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中访问权限控制的作用: 为了使用户不要触碰那些他们不该触碰的部分,这些部分对于类内部的操作时必要的,但是它并不属于客户端程序员所需接口的一部分. 为了让类库设计者可用更改类的内部工作方式,而不 ...
随机推荐
- webrtc笔记(5): 基于kurento media server的多人视频聊天示例
这是kurento tutorial中的一个例子(groupCall),用于多人音视频通话,效果如下: 登录界面: 聊天界面: 运行方法: 1.本地用docker把kurento server跑起来 ...
- Mlsql内部资源调度读取opentsdb数据信息代码
package com.redoop.mlsqlimport java.net.URLEncoderimport java.nio.charset.Charsetimport net.sf.json. ...
- 数据竞争检查工具(TSan)
https://github.com/google/sanitizers/wiki https://github.com/google/sanitizers/wiki/ThreadSanitizerC ...
- Kubernetes 部署集群内部DNS服务
Kubernetes 部署集群内部DNS服务 部署官网:https://github.com/kubernetes/kubernetes/tree/master/cluster/addons/dns/ ...
- 【UOJ#49】【UR #3】轴仓库
[UOJ#49][UR #3]轴仓库 题面 UOJ 题解 不难发现一定是每次找到离当前位置最近的一个箱子,然后把它搬过来. 那么如果我们能够确定起始位置,我们就可以二分从两侧多少距离搬箱子,判断一下时 ...
- Powershell ExecutionPolicy 执行策略
简单说明 powershell对于脚本的执行有着严格的安全限制 Get-ExecutionPolicy -List #查看当前的执行策略 Set-ExecutionPolicy -Scope Curr ...
- 使用角色管理工具 安装或配置microsoft.net framework 3.5 sp1
解决方法:
- C# 分布式自增ID算法snowflake(雪花算法)
概述 分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的.有些时候我们希望能使用一种简 ...
- sublime_text运行python ctrl+b运行的界面隐藏了怎么重新调出来恢复显示?
sublime_text运行python ctrl+b运行的界面隐藏了怎么重新调出来恢复显示?搜索了下都是说怎么隐藏的,隐藏后怎么恢复显示的没找到看进程还在运行,但调不出来看运行结果了,console ...
- SQL行转列,列转行
SQL 行转列,列转行 行列转换在做报表分析时还是经常会遇到的,今天就说一下如何实现行列转换吧. 行列转换就是如下图所示两种展示形式的互相转换 行转列 假如我们有下表: SELECT * FROM s ...