一、变量分组声明
在Go语言中,同时声明多个常量、变量,或者导入多个包时,可采用分组的方式进行声明。
import "fmt"
import "os"const i = 100
const pi = 3.1415
const prefix = "Go_"var i int
var pi float32
var prefix string
可以分组写成如下形式:
import (
"fmt"
"os"
)const (
i = 100
pi = 3.1415
prefix = "Go_"
)var (
i int
pi float32
prefix string
)
二、iota枚举
Go里面有一个关键字iota,这个关键字用来声明enum的时候采用,它默认开始值是0,const中每增加一行加1:
const (
x = iota // x == 0
y = iota // y == 1
z = iota // z == 2
w // 常量声明省略值时,默认和之前一个值的字面相同。这里隐式地说w = iota,因此w == 3。其实上面y和z可同样不用"= iota")
const v = iota // 每遇到一个const关键字,iota就会重置,此时v == 0
const (
h, i, j = iota, iota, iota //h=0,i=0,j=0 iota在同一行值相同
)
const (
a = iota //a=0
b = "B"
c = iota //c=2
d, e, f = iota, iota, iota //d=3,e=3,f=3
g = iota //g = 4)
func main() {
fmt.Println(a, b, c, d, e, f, g, h, i, j, x, y, z, w, v)
}
除非被显式设置为其它值或iota,每个const分组的第一个常量被默认设置为它的0值,第二及后续的常量被默认设置为它前面那个常量的值,如果前面那个常量的值是iota,则它也被设置为iota。
三、零值
关于“零值”,所指并非是空值,而是一种“变量未填充前”的默认值,通常为0。
此处罗列 部分类型 的 “零值”
int 0
int8 0
int32 0
int64 0
uint 0x0
rune 0 //rune的实际类型是 int32
byte 0x0 // byte的实际类型是 uint8
float32 0 //长度为 4 byte
float64 0 //长度为 8 byte
bool false
string ""
四、goto
Go有goto语句——请明智地使用它。用goto跳转到必须在当前函数内定义的标签。例如假设这样一个循环:
func myFunc() {
i := 0
Here: //这行的第一个词,以冒号结束作为标签
println(i)
i++
goto Here //跳转到Here去
}
标签名是大小写敏感的。
五、包导入
import name "fmt" // name.Println 别名方式
import _ "fmt" // 只初始化目标包
import . "fmt" // 省略包名
import "fmt" // fmt.Println 原始包名+方法(函数)
六、包下载
1、使用go自带的命令行工具
# go get -u -v ****
go get后面接入的参数即是:github或者其他托管网站的代码路径。
2、gopm
gopm 也属于一个 go 第三方库,需要使用第一种方式下载安装:
# go get -u github.com/gpmgo/gopm
下载完成后,使用gopm下载第三方库
# gopm get ****
后面接项目路径。用法和go get 几乎一致。
七、包管理
自己创建的项目中如何管理第三方包呢? 即:将用到的第三方包移至个人项目工程下。
govendor
# go get -u github.com/kardianos/govendor
govendor init
这一步触发的动作是创建:vendor 目录 和 vendor.json 文件。
govendor add +external
这一步触发的动作是:将自己项目中使用到的第三方库,复制到vendor 目录下,并维护vendor.json文件。