指针类型 

普通类型,变量量存的就是值,也叫值类型。指针类型存的是地址 

获取变量量的地址, 用&, 比如: 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 用途:

  1. 关闭文件句柄 

  2.锁资源释放

  3.数据库连接释放

递归函数

  一个函数调用自己,就叫做递归。

  递归的设计原则

  1) 一个大的问题能够分解成相似的小问题

  2)定义好出 口条件

 闭包

  1. 闭包:一个函数和与其相关的引用环境组合而成的实体。 

 应用举例

 包

1、golang中的包

  a.golang 目前有150个标准的包,覆盖了几乎所有的基础库

  b.golang.org有所有包的文档,没事都翻翻

2、go get安装第三方包

  go get github.com/gorilla/websocket,包会装在GOPATH路径下