指针类型
普通类型,变量量存的就是值,也叫值类型。指针类型存的是地址
获取变量量的地址, 用&, 比如: var a int, 获取a的地址:&a
指针类型,变量量存的是一个地址,这个地址存的才是值
获取指针类型所指向的值,使用:*, 比如:var *p int, 使用*p获取p指向的值
内置函数
1、close:主要 用来关闭channel
2、len: 用来求 长度, 比如string、array、slice、map、channel
3、new: 用来分配内存,主要用来分配值类型, 比如int、struct、string。返回的是指针
4、make: 用来分配内存,主要用来分配引 用类型, 比如chan、map、slice
5、append: 用来追加元素到数组、slice中
6、panic和recover: 用来做错误处理理
7、new和make的区别
函数
1、声明语法:func 函数名 (参数列列表) [(返回值列列表)] {}
2、golang函数特点:
不支持重载, 一个包不能有两个名字一样的函数。
函数是一等公民,函数也是一种类型, 一个函数可以赋值给变量
匿名函数
多返回值
3、函数参数传递 方式:
1). 值传递
2). 引用传递
注意1: 无论是值传递,还是引用传递,传递给函数的都是变量量的副本,不过,值传递是值的拷贝。引用传递是地址的拷贝, 一般来说,地址拷贝更为高效。 而值拷贝取决于拷贝的对象大小,对象越大,则性能越低。
3).函数参数传递方式:
注意2:map、slice、chan、指针、interface默认以引用的方式传递
4、命名返回值的名字:
5、_标识符, 用来忽略略返回值:
6、可变参数:
注意:其中arg是 一个slice,我们可以通过arg[index]依次访问所有参数通过len(arg)来判断传递参数的个数。
7、defer 用途:
1)当函数返回时,执行defer语句。因此,可以用来做资源清理
2)多个defer语句,按先进后出的方式执行
3) defer语句中的变量,在defer声明时就决定了。
defer 行为特征:
defer 用途:
- 关闭文件句柄
2.锁资源释放
3.数据库连接释放
递归函数
一个函数调用自己,就叫做递归。
递归的设计原则
1) 一个大的问题能够分解成相似的小问题
2)定义好出 口条件
闭包
- 闭包:一个函数和与其相关的引用环境组合而成的实体。
应用举例
包
1、golang中的包
a.golang 目前有150个标准的包,覆盖了几乎所有的基础库
b.golang.org有所有包的文档,没事都翻翻
2、go get安装第三方包
go get github.com/gorilla/websocket,包会装在GOPATH路径下