函数外部定义的包级名字,如果首字母大写,则可以被其它包访问。
var:变量 const:常量 type:类型 func:函数
其中变量类型和初始值可以省略其一。 如果省略变量类型,那么会根据初始值自动推倒变量类型;如果省略初始值,那么会进行默认初始化为对应变量类型的零值。
简短变量声明左边的变量至少有一个是新的变量,否则需要使用多重赋值。
比较下面两份代码:
var cwd string func init() { cwd, err := os.Getwd() // 这里声明了新的cwd变量,并没有对全局的cwd赋值 if err != nil { log.Fatalf("os.Geted failed: %v", err) } log.Printf("Working directory = %s", cwd) } var cwd string func init() { var err error cwd, err = os.Getwd() if err != nil { log.Fatalf("os.Geted failed: %v", err) } log.Printf("Working directory = %s", cwd) }Go语言将数据类型分为4类:
基础类型:数字、字符串、布尔型复合类型:数组、结构体引用类型:指针、切片、字典、函数、通道接口类型:Unicode字符rune类型与int32类型等价 byte与uint8等价 字符串不可变。
rune与string的转换:
s := "hello" s2r := []rune(s) r2s := string(s2r)byte与string的转换:
s := "world" s2b := []byte(s) b2s := string(s2b) strings 包提供了许多如字符串的查询、替换、比较、截断、拆分和合并等功能。bytes 包也提供了许多类似功能的函数,但是针对和字符个有着相同结构的[]byte 类型。strconv 包提供了布尔型、整型数、浮点数和对应字符串的相互转换,还提供了双引号相关的转换。unicode 包提供了 IsDigit、IsLetter、IsUpper 和 IsLower 等类似功能,它们用于给字符分类。path 和 path/filepath 包提供了关于文件路径的操作。与其它语言的数组基本一致。
匿名成员:
type Point struct { X, Y int } type Circle struct { Point Radius int } type Wheel struct { Circle Spokes int } var w Wheel w.X = 10 // equivalent to w.Circle.Point.X = 10 w.Y = 20 w.Radius = 100 w.Spokes = 30