Go语法-基础结构
变量
简短变量声明语句中必须至少要声明一个新的变量
f, err := os.Open(infile)
// ...
f, err := os.Create(outfile) // compile error: no new vagriables
指针
同c语言差不多
x := 1
p := &x // p, of type *int, points to x
fmt.Println(*p) // "1"
*p = 2 // equivalent to x = 2
fmt.Println(x) // "2"
变量生命周期
逃逸的变量需要额外分配内存,同时对性能的优化可能会产生细微的影响。
逃逸可以是局部变量定义的值赋给包变量,当函数结束时局部变量并未被进行回收,也就是逃逸
类型
定义类型
type 类型名字 底层类型
type Celsius float64 // 摄氏温度
type Fahrenheit float64 // 华氏温度
定义不同的数据类型,因此它们不可以被相互比较或混在一个表达式运算,也避免了一些问题。比如华氏摄氏混算等。
对于每一个类型T,都有一个对应的类型转换操作T(x),用于将x转为T类型
func CToF(c Celsius) Fahrenheit { return Fahrenheit(c*9/5 + 32) }
func FToC(f Fahrenheit) Celsius { return Celsius((f - 32) * 5 / 9) }
Fahrenheit和Celsius不是函数,只是底层数据相同,所以可以相互转换。
下面的声明语句,Celsius类型的参数c出现在了函数名的前面,表示声明的是Celsius类型的一个叫名叫String的方法,该方法返回该类型对象c带着°C温度单位的字符串。应该是有点像java的方法重写
func (c Celsius) String() string { return fmt.Sprintf("%g°C", c) }