1. 断言 r.(x)
r.(map[string]interface{}) r.(x)
断言,然后可以用一元或二元值接收。一个参数接受的话,出错会panic。两个参数接受的话,第二个是bool,断言不成功会赋值为false。常用type switch判断interface的实体类型
2.map的 声明与遍历
var m1 map[string]string
m1 = make(map[string]string) //使用make函数创建一个非nil的map,nil map不能赋值
也可以选择是否在创建时指定该map的初始存储能力,下面的例子创建了一个初始存储能力为100的map:
myMap = make(map[string] PersonInfo, 100)
// 最后给已声明的map赋值
m1["a"] = "aa"
m1["b"] = "bb"
使用make函数创建一个非nil的map,nil map不能赋值
也可以选择是否在创建时指定该map的初始存储能力,下面的例子创建了一个初始存储能力为100的map:
myMap = make(map[string] PersonInfo, 100)
// 最后给已声明的map赋值
m1["a"] = "aa"
m1["b"] = "bb"
m := make(map[string]string)
// 初始化 + 赋值一体化
m3 := map[string]string{
"a": "aa",
"b": "bb",
}
// 遍历map
for k, v := range m1 {
fmt.Println(k, v)
}// 从这个map查找键为"1234"的信息
person, ok := personDB["1234"]
io.WriteString()
func WriteString(w Writer, s string) (n int, err error) // 将字符串s的内容写入w中
3.数组和切片
1、初始化:数组需要指定大小,不指定也会根据初始化的自动推算出大小,不可改变
var v3 [10]int // 数组
var v4 []int // 数组切片
2、函数传递:数组需要明确指定大小,切片不需要。数组是值传递,切片是地址传递
var a [10]int
a := [3]int{1,2,3}
结构体数组
type a1 =struct {
key1 string
key2 string
key3 string
}
testData :=[]a1{
a1{"1","2","3"},
a1{"4","5","6"},
}
切片拥有长度和容量。长度为包含元素的个数,容量是指第一个元素开始到底层数组末尾的个数用len(s)和cap(s)获取。
make 可以创建切片
a := make([]int ,5)//创建长度和容量为5的切片。
b:=make([]int,0,5 ) 创建长度为0容量为5的切片
切片的切片c:=b[: 2] d :=d[2;5]
可以用append()向切片中追加元素
s = append(s, 6, 7, 8)
可以像遍历map一样遍历切片中的数
for i,v:=range s{
fmt.Println(i,v)
}
for _,v :=range s{fmt.Println(v)}//这里用到了匿名变量_
3.itoa
iota比较特殊,可以被认为是一个可被编译器修改的常量,在每一个const关键字出现时被
重置为0,然后在下一个const出现之前,每出现一次iota,其所代表的数字会自动增1。