Go语言常见的变量声明形式
var a int32
var s string = "hello"
var i = 13
n := 17
var (
crlf = []byte("\r\n")
colonSpace = []byte(": ")
)
8.1 包级变量的声明形式
1.声明并同时显式初始化
// Go编译器会自动根据等号右侧的InitExpression表达式求值的类型确定左侧所声明变量的类型
// var variableName = InitExpression
var EOF = errors.New("EOF")
// 以整型值初始化,Go编译器会将之设置为默认类型int;而以浮点值初始化的变量f,Go编译器会将之设置为默认类型float64。
var a = 17
var f = 3.14
// 如果不接受默认类型,而是要显式为包级变量a和f指定类型,那么有以下两种声明方式:
// 第一种
var a int32 = 17
var f float32 = 3.14
// 第二种
var a = int32(17)
var f = float32(3.14)
// 从一致性的角度,Go语言官方更推荐后者
2.声明的延迟初始化
// Go语言会让这些变量拥有初始的"零值"
var a int32
var f float64
3.声明聚类与就近原则
声明聚类:
- 将同一变量声明放在一个var块中,将不同类的声明放在不同的var块中
- 将延迟初始化的变量声明放在一个var块中,将声明并显式初始化的变量放在另一个var块中
就近原则:尽可能在靠近第一次使用变量的位置声明该变量。
8.2 局部变量的声明形式
1.对于延迟初始化的局部变量声明,采用带有var关键字的声明形式
当defer后接的闭包函数需要使用err判断函数/方法退出状态时
func Foo() {
var err error
defer func {
if err != nil {
...
}
}()
err = Bar()
...
}
2.对于声明且显式初始化的局部变量,建议使用短变量声明形式
a := 17
f := 3.14
s := "hello, gopher!"
a := int32(17)
f := float32(3.14)
s := string("hello, gopher!")
3.尽量在分支控制时应用短变量声明形式
如果在声明局部变量时遇到适合聚类的应用场景,也应该毫不犹豫地使用var块来声明多个局部变量
// $GOROOT/src/net/dial.go
func (r *Resolver) resolverAddrList(ctx context.Context, op, network,
addr string, hint Addr) (addrList, error) {
...
var (
tcp *TCPAddr
udp *UDPAddr
IP *IPAddr
wildcard bool
)
...
}
标签:初始化,精进,变量,17,读书笔记,var,Go,声明
From: https://www.cnblogs.com/brynchen/p/18002075