3.GO-项目结构、包访问权限、闭包和值传递引用传递
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-项目结构、包访问权限、闭包和值传递引用传递的更多相关文章
- 再谈包访问权限 子类为何不能使用父类protected方法
可见范围 权限的含义应该理解为控制范围,要把它理解成一个限制范围的空间,更为准确的说叫做可见范围 访问控制的等级,从最大权限到最小权限依次为:public.protected.包访问权限(没有关键词) ...
- -1-2 java 面向对象基本概念 封装继承多态 变量 this super static 静态变量 匿名对象 值传递 初始化过程 代码块 final关键字 抽象类 接口 区别 多态 包 访问权限 内部类 匿名内部类 == 与 equal
java是纯粹的面向对象的语言 也就是万事万物皆是对象 程序是对象的集合,他们通过发送消息来相互通信 每个对象都有自己的由其他的对象所构建的存储,也就是对象可以包含对象 每个对象都有它的类型 也就是 ...
- Java程序员的日常 —— 《编程思想》包和访问权限
包的作用 在C++中有命名空间的概念,这是因为,不同的项目或者人写出来的代码,可能名称是一样的.比如,java.util中有List,java.awt中也有List,那么我们在开发中,怎么会知道使用的 ...
- thinkinginjava学习笔记05_访问权限
Java中访问权限等级从大到小依次为:public.protected.包访问权限(没有关键词).private: 以包访问权限为界限,public.protected分别可以被任意对象和继承的对象访 ...
- 初读"Thinking in Java"读书笔记之第六章 --- 访问权限控制
包:库单元 包内包含有一组类,他们在单一的名字空间下被组织在一起. 通过import ***.***.*可以将某个包下的所有类导入到当前文件中. 每个Java源文件最多只能有一个public类,且名称 ...
- 章节五、2-Package包和权限修饰符
一.Package包 为了更好的组织类,java提供了包机制,用于区别类名的命名空间. 包的作用: 1.把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用. 2.如同文件夹一样,包也采用了 ...
- Java 访问权限控制:你真的了解 protected 关键字吗?
摘要: 对于类的成员而言,其能否被其他类所访问,取决于该成员的修饰词:而对于一个类而言,其能否被其他类所访问,也取决于该类的修饰词.在Java中,类成员访问权限修饰词有四类:private,无(包访问 ...
- 【Thinking in Java, 4e】访问权限控制
[包:库单元] 编译单元的概念. 一个.java文件就是一个编译单元,一个编译单元只能有一个public类,编译单元中的非public类一般是用于为public类提供支持的,这些类在包外不可见. im ...
- Java基础—访问权限控制
Java中访问权限控制的作用: 为了使用户不要触碰那些他们不该触碰的部分,这些部分对于类内部的操作时必要的,但是它并不属于客户端程序员所需接口的一部分. 为了让类库设计者可用更改类的内部工作方式,而不 ...
随机推荐
- Element-ui上传图片按顺序展示
背景 不知道你上传图片的时候有没有过这样的情况,批量上传多张图片,可能因为图片大小或者网络问题,导致图片返回的顺序和上传时的顺序不一样.因为我们公司是做电商的,即使我们的支持拖动排序,运营还是希望图片 ...
- 【Linux命令】Linux压缩及解压命令
Linux压缩及解压命令 一.文件打包和压缩命令介绍 linux系统文件压缩格式,常用的有*.tar.gz.*.gz.*.zip.*.tar,还有*.rar..7z..bz2..tar.xz..tar ...
- 单个视频播放控制&默认横屏播放
一.视频列表中控制只允许一个视频播放 // 获取DOM中所有的video标签 var videoTags = document.querySelectorAll('video'); // 控制播放的视 ...
- Python 多进程池
def get_html(n): time.sleep(n) print("sub_progress success") return n # 多进程池 pool = multip ...
- python threading ThreadPoolExecutor源码解析
future: 未来对象,或task的返回容器 1. 当submit后: def submit(self, fn, *args, **kwargs): with self._shutdown_lock ...
- 【转】Git GUI基本操作
一.Git GUI基本操作 1.版本库初始化 gitpractise文件夹就变成了Git可以管理的仓库,目录下多了一个.git文件夹,此目录是Git用于管理版本库的,不要擅自改动里面的文件,这样会破坏 ...
- Quartz的配置与使用
什么是Quartz Quartz是OpenSymphony开源组织在Job scheduling领域的开源项目,它可以与J2EE与J2SE应用程序相结合也可以单独使用.Quartz可以用来创建简单或为 ...
- mysql参数之innodb_buffer_pool_size大小设置
用于缓存索引和数据的内存大小,这个当然是越多越好, 数据读写在内存中非常快, 减少了对磁盘的读写. 当数据提交或满足检查点条件后才一次性将内存数据刷新到磁盘中.然而内存还有操作系统或数据库其他进程使用 ...
- 程序基于InstallShield2013LimitedEdition的安装和部署
在VS2012之前,我们做安装包一般都是使用VS自带的安装包制作工具来创建安装包的,VS2012.VS2013以后,微软把这个去掉,集成使用了InstallShield进行安装包的制作了,虽然思路差不 ...
- Immediate Window
name="ZFF""ZFF"date=new DateTime(2017,02,03,21,19,45){2/3/2017 21:19:45 PM} Date ...