变量
var 声明,支持类型判断.
var name string
string类型 name
var s string
值初始化
var age = 20
age 类型自动推断
height := 165
简短声明(仅限函数使用)
i,j,k := 3.8,true,100
声明一组变量
_, res := 123,321
_特殊变量名,赋予他的值会被丢弃
常量
const 声明
const Pi = 3.14
声明一个常量Pi
const(
apple = "fruit"
banana
)
banana 常量未定义初始化值会与apple值相同
数据类型
boolean,整型,浮点型,字符串,错误
布尔 bool 初始化默认fasle
整型
int8,int16,int32,int64 (有符号)
uint8(byte),uint16,uint32(rune),uint64 (无符号)
uintptr
byte,rune 与uint8,uint32别名
整形初始化默认值0
浮点型
float32,float64(默认浮点类型)
complex64,complex128
float32,float64 初始化默认值0
字符串
双引号或``,UTF8编码,\转义
初始化默认值""
修改需要转换类型为 rune或byte 操作后再转换
数组
长度非负整数
var arr = [10]int{1,2,3,4}
声明数组切片 slice
切片默认初始化前nil
s1 := make([]int,3,5)
声明切片append() 尾部追加元素
切片长度是包含的元素个数, 容量是能存储的元素个数.
Map
kV结构集合
m := make(map[string]int) { "blue": 1, "red": 2 }
delete(m,red)
删除map中一项m["orange"] = 3
增加一项m["blue"] = 4
更新一项
range 遍历map,slice
```
for i,v := range m {
fmt.Println(i,v)
}
```
函数
func sub(x,y int) (z int) {
z = x - y
return z
}
声明一个方法sub,参数x,y为int型, z返回参数 int型
函数无返回值可不声明,参数也可是函数.
可以传指针或传引用操作
...int
表示传递变长的参数
defer 关键字 在函数最后执行动作的声明(延迟代码)
局部函数声明修改不影响全局,若全局有同名变量时,内部赋值会改变全局变量(非声明).
方法
方法是特殊的函数,区别于方法有前置实例接收参数(receiver)
接口
一种抽象的类型
type I interface {
Get() int
Put(int)
}
声明时,不能有字段,不能自定义方法,只声明方法,不实习现.
//实现接口:
func f(p I) {
fmt.Println(p.get())
p.Out(1)
}
接收一个接口类型作为参数
p实现了接口I,Get(),Put()方法.