3.1.goland中项目结构

(1)在goland中创建标准Go项目

(2)goland配置

创建项目Learn-Go

file-settings-go-GOPATH-添加

在项目目录下创建src目录,在src目录下创建demo目录,在demo目录下创建demo.go文件

//Learn_Go/src/demo/demo.go
package demo import "fmt" func Demo() {
fmt.Println("执行demo")
} 

在项目目录下创建main.go文件

//Learn_Go/main.go
package main import "demo" func main() {
demo.Demo() //执行demo
}

 目录结果

点项目右键-->>run-->>go_build Learn_Go

3.2.包和包级别访问权限

同一个包内小写可以访问,其它包要想访问必须大写

目录结果

demo1.go

//Learn_Go/src/demo/demo1.go
package demo import "fmt" func demo1() {
fmt.Println("执行demo111")
}

demo2.go

//Learn_Go/src/demo/demo2.go
package demo import "fmt" func Demo2() {
fmt.Println("执行demo222")
demo1() //同包内可以访问,不需要大写
}

main.go

//Learn_Go/main.go
package main import "demo" func main() {
demo.Demo2()
} //结果
执行demo222
执行demo111

3.3.闭包

闭包就是解决局部变量不能被外部访问一种解决方案,在函数内部定义局部变量,把另一个函数当中返回值,局部变量

对于返回值函数就相当于全局变量,所以多次调用返回值函数局部变量的值跟随变化。

//Learn_Go/main.go
package main import "fmt" func closure() func()int{
i := 1
return func() int {
i = i+1
return i
}
} func main() {
f := closure()
fmt.Println(f()) //2
fmt.Println(f()) //3
fmt.Println(f()) //4
}

3.4.值传递和引用传递

讨论值传递和引用传递时,其实就是看值类型变量和引用类型变量作为函数参数时,修改

形参是否会影响到实参,在Go语言中五个引用类型变量,其它都是值类型

  • slice
  • map
  • channel
  • inrerface
  • fun()

引用类型作为参数时,称为浅拷贝,形参改变,实参数跟着变化,因为传递的是地址,形参和实参都指向同一块地址

值类型作为参数时,称为深拷贝,形参改变,实参不变,因为传递的是值的副本,形参会新开辟一块空间,与实参指向不同

如果希望值类型数据在修改形参时实参跟随变化,可以把参数设置为指针类型

//Learn_Go/main.go
package main import "fmt" //int,string:值类型 切片和指针可以改变值
func demo(i int, s string, arr []int, content *int) {
i = 110
s = "derek"
arr[0] = 3
arr[1] = 4
*content = 110
} func main() {
a := 119
b := "jack"
c := []int{1,2}
d := 119
demo(a,b,c,&d)
fmt.Println(a,b,c,d) //119 jack [3 4] 110
}

  

3.GO-项目结构、包访问权限、闭包和值传递引用传递的更多相关文章

  1. 再谈包访问权限 子类为何不能使用父类protected方法

    可见范围 权限的含义应该理解为控制范围,要把它理解成一个限制范围的空间,更为准确的说叫做可见范围 访问控制的等级,从最大权限到最小权限依次为:public.protected.包访问权限(没有关键词) ...

  2. -1-2 java 面向对象基本概念 封装继承多态 变量 this super static 静态变量 匿名对象 值传递 初始化过程 代码块 final关键字 抽象类 接口 区别 多态 包 访问权限 内部类 匿名内部类 == 与 equal

    java是纯粹的面向对象的语言 也就是万事万物皆是对象 程序是对象的集合,他们通过发送消息来相互通信 每个对象都有自己的由其他的对象所构建的存储,也就是对象可以包含对象 每个对象都有它的类型  也就是 ...

  3. Java程序员的日常 —— 《编程思想》包和访问权限

    包的作用 在C++中有命名空间的概念,这是因为,不同的项目或者人写出来的代码,可能名称是一样的.比如,java.util中有List,java.awt中也有List,那么我们在开发中,怎么会知道使用的 ...

  4. thinkinginjava学习笔记05_访问权限

    Java中访问权限等级从大到小依次为:public.protected.包访问权限(没有关键词).private: 以包访问权限为界限,public.protected分别可以被任意对象和继承的对象访 ...

  5. 初读"Thinking in Java"读书笔记之第六章 --- 访问权限控制

    包:库单元 包内包含有一组类,他们在单一的名字空间下被组织在一起. 通过import ***.***.*可以将某个包下的所有类导入到当前文件中. 每个Java源文件最多只能有一个public类,且名称 ...

  6. 章节五、2-Package包和权限修饰符

    一.Package包 为了更好的组织类,java提供了包机制,用于区别类名的命名空间. 包的作用: 1.把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用. 2.如同文件夹一样,包也采用了 ...

  7. Java 访问权限控制:你真的了解 protected 关键字吗?

    摘要: 对于类的成员而言,其能否被其他类所访问,取决于该成员的修饰词:而对于一个类而言,其能否被其他类所访问,也取决于该类的修饰词.在Java中,类成员访问权限修饰词有四类:private,无(包访问 ...

  8. 【Thinking in Java, 4e】访问权限控制

    [包:库单元] 编译单元的概念. 一个.java文件就是一个编译单元,一个编译单元只能有一个public类,编译单元中的非public类一般是用于为public类提供支持的,这些类在包外不可见. im ...

  9. Java基础—访问权限控制

    Java中访问权限控制的作用: 为了使用户不要触碰那些他们不该触碰的部分,这些部分对于类内部的操作时必要的,但是它并不属于客户端程序员所需接口的一部分. 为了让类库设计者可用更改类的内部工作方式,而不 ...

随机推荐

  1. 第04组 Alpha冲刺(5/6)

    队名:new game 组长博客:戳 作业博客:戳 组员情况 鲍子涵(队长) 燃尽图 过去两天完成了哪些任务 才两天,也就是实现一些功能而已 复习了一下SuffixAutomata 接下来的计划 实现 ...

  2. C# HTTP系列 HttpWebRequest 与 HttpWebResponse

    HTTP协议,即超文本传输协议(Hypertext transfer protocol).是一种详细规定了浏览器和万维网(WWW = World Wide Web)服务器之间互相通信的规则,通过因特网 ...

  3. Java-100天知识进阶-JVM内存-知识铺(三)

    知识铺: 致力于打造轻知识点,持续更新每次的知识点较少,阅读不累.不占太多时间,不停的来唤醒你记忆深处的知识点. Java内存模型(JMM) JVM内存模式是JVM的内存分区 Java内存模式是一种虚 ...

  4. HashMap的底层原理(jdk1.7.0_79)

    前言 在Java中我们最常用的集合类毫无疑问就是Map,其中HashMap作为Map最重要的实现类在我们代码中出现的评率也是很高的. 我们对HashMap最常用的操作就是put和get了,那么你知道它 ...

  5. 一个简单的利用 WebClient 异步下载的示例(三)

    继续上一篇 一个简单的利用 WebClient 异步下载的示例(二) 后,继续优化它. 1. 直接贴代码了: DownloadEntry: public class DownloadEntry { p ...

  6. JVM的监控工具之jvisual

    VisualVM(All-in-One Java Trouble shootingTool)是到目前为止随JDK发布的功能最强大的运行监视和故障处理程序,并且可以预见在未来一段时间内都是官方主力发展的 ...

  7. Elastic 使用索引生命周期管理实现热温冷架构

    Elastic: 使用索引生命周期管理实现热温冷架构 索引生命周期管理 (ILM) 是在 Elasticsearch 6.6(公测版)首次引入并在 6.7 版正式推出的一项功能.ILM 是 Elast ...

  8. DVWA-基于布尔值的盲注与基于时间的盲注学习笔记

    DVWA-基于布尔值的盲注与基于时间的盲注学习笔记 基于布尔值的盲注 一.DVWA分析 将DVWA的级别设置为low 1.分析源码,可以看到对参数没有做任何过滤,但对sql语句查询的返回的结果做了改变 ...

  9. java架构之路-(nginx使用详解)nginx的反向代理和优化配置

    书接上回说,nginx我们学会了简单的配置.那么我今天来聊一下,我们ngxin的一些优化配置(我不是很懂,不敢谈高级配置).我先来看一下nginx的好处和正向代理. nginx的好处 1.可以高并发连 ...

  10. 【新手篇】搭建DCN漏洞靶机及简单的SQL手工注入

    很多新手小白入门后发现想要学好“网安”技术,除了掌握基础理论知识,更需要经常模拟不同的漏洞环境,但是如果使用外网服务器练习,会存在一定风险,因此能够搭建一个本地的模拟环境去测试漏洞将是一个不错的方案. ...