go语言摘记
基本法则:
1)在最外部声明的函数、类型、变量都要从其关键字开始。如func、type、var...
2)任何代码都要以包为单位封装和被调用。
3)大括号的前括号要在行末,后括号要另起一行行首。
4)函数内声明的临时变量必须要使用。如要放弃接收变量可使用_符号接收值表示忽略。
5)最外部声明的函数、类型、变量如果是首字母大写,表示公开,可被其他包使用。小写表示不公开。
一 包
1)包名顶行写:
package 包名
2)导入用import关键字,多个包可以使用符号()进行组合
import "包路径"
3)包名为包路径最后一段名字
一 变量
1)标准格式:
var 变量名 类型
2)声明时直接赋值可以省略类型,由其自动推导
3)声明时直接赋值可以省略var,使用:=符号简写。该语法仅能在函数内使用。因为与更高级别的法则冲突:在最外部声明的函数、类型、变量都要从其关键字开始。
二 函数
1)标准格式:
func 函数名(参数1 参数1类型, 参数2 参数2类型) (返回值 返回值类型) {
}
2)与声明变量相似的,参数、返回值的类型也要放在名称之后。这样做的理由是更易读,比如当复杂函数做参数传递时。
3)函数返回值可以多个。也可以给返回值变量命名。
三 结构
1)标准格式:
type 结构名 struct{
成员变量名 类型,
....
}
2)结构的创建:省略成员名可以按顺序初始化;不省略名称则不需要顺序。
3)type可以用来给别的类型起别名。当然之后需要显式转型。
4)通过.操作符获取结构内的成员。
四 指针
1)go有指针类型,用*表示,*出现在类型前方。
2)go没有指针运算
3)获取变量的引用通过取地址符&获取。同理可以在类型创建的时候直接&获取其引用。
4)引用变量的值要通过 *变量名 获取,*出现在变量名前方。
5)如果是指针类型的结构,可以通过.操作符直接调用类型成员。(*p).Name和p.Name的效果相同。
五 方法
1)go没有类,但可以用类型作为函数的接收器实现结构的方法。本质上就是函数的第一个参数为该类型。
2)不能给除自身包之外的类型添加方法。
3)方法的语法结构:
func (接收器变量 接收器类型) 函数名(参数)返回值{
}
4)使用方法,就是在类型变量后面使用.操作符。
5)接收器可以是指针类型。因为go语言的传参本质就是拷贝,所以传递指针类型变量可以用于修改值。效果等同函数。
6)当使用指针类型接收器的时候,使用方法也可以直接通过.操作符。(*p).Add()和p.Add()的效果相同。
7)当接收器不是指针类型的时候,引用类型的变量也可以使用.操作符直接调用方法。但是要注意的是go的传参始终都是值拷贝。
8)上述特性与函数参数不同,函数参数类型必须与声明的参数类型一致,不然无法通过编译。
六 接口