04. Go极简教程 初始化顺序\命名规范

2018-06-03  本文已影响37人  超级大柱子

初始化顺序

先执行import包的每个文件的变量, 然后是init方法, 最后执行main函数, 当main函数执行结束程序退出

一图胜千言

函数\变量\结构体 命名

某个名称在包外是否可见,取决于其首个字符是否为大写字母

Go中约定使用驼峰记法 MixedCaps 或 mixedCaps。

由于结构体在大多数地方会被引用, 所以通常是大写开头

接口名

按照约定,只包含一个方法的接口应当以该方法的 名称加上-er后缀 或类似的修饰来构造一个施动着名词,如 Reader、Writer、 Formatter、CloseNotifier 等.

请不要使用I开头作为接口命名 如IRead, IWrite

重新声明与再次赋值

f, err := os.Open(name)

该语句声明了两个变量 f 和 err。在几行之后,又通过

d, err := f.Stat()

注意,尽管两个语句中都出现了 err,但这种重复仍然是合法的:err 在第一条语句中被声明,但在第二条语句中只是被再次赋值罢了

在满足下列条件时,已被声明的变量 v 可出现在:= 声明中:

空白符

若你只需要该遍历中的第二个项(值),请使用空白标识符,即下划线来丢弃第一个值:

for _, value := range array {
    sum += value
}

类型选择

使用t.(type)进行类型判断

var t interface{}
t = functionOfSomeType()
switch t := t.(type) {
default:
    fmt.Printf("unexpected type %T\n", t)     // %T 输出 t 是什么类型
case bool:
    fmt.Printf("boolean %t\n", t)             // t 是 bool 类型
case int:
    fmt.Printf("integer %d\n", t)             // t 是 int 类型
case *bool:
    fmt.Printf("pointer to boolean %t\n", *t) // t 是 *bool 类型
case *int:
    fmt.Printf("pointer to integer %d\n", *t) // t 是 *int 类型
}

make 分配

下面的例子阐明了 new 和 make 之间的区别

var p *[]int = new([]int)       // 分配切片结构;*p == nil;基本没用
var v  []int = make([]int, 100) // 切片 v 现在引用了一个具有 100 个 int 元素的新数组

// 没必要的复杂:
var p *[]int = new([]int)
*p = make([]int, 100, 100)

// 习惯用法:
v := make([]int, 100)

请记住,make 只适用于映射、切片和信道且不返回指针。若要获得明确的指针, 请使用 new 分配内存。

打印

fmt.Printf("Hello %d\n", 23)
fmt.Fprint(os.Stdout, "Hello ", 23, "\n")
fmt.Println("Hello", 23)
fmt.Println(fmt.Sprint("Hello ", 23))

fmt.Sprintf,字符串函数(Sprintf 等)会返回一个字符串

空白符导入

当一个程序未被直接使用时,可以作为空白符导入

参考资料:
http://go-tour-zh.appspot.com/

Go极简教程 继续阅读( 目录)

上一篇下一篇

猜你喜欢

热点阅读