1.数组
数组是一个具有编号且长度固定地元素序列。对于一个数组,可以很方便地取特定索引地值或者往特定索引取存储值,然后也能够直接去打印一个数组。代码如下:
var a [5]int
a[4] = 100
fmt.Println("get:", a[2])
fmt.Println("len:", len(a))
b := [5]int{1, 2, 3, 4, 5}
fmt.Println(b)
复制代码
其中,体现出数组定义的两种方法,len方法返回的是数组长度。
2.切片
切片不同于数组,可以任意更改长度。可以用make来创建一个切片,可以向数组一样去取值,然后使用append来追加元素,代码如下:
s := make([]string, 3)
s[0] = "a"
fmt.Println("get", s[0])
fmt.Println("len", len(s))
s = append(s, "d", "e")
复制代码
其中,使用make创建切片,len方法返回切片长度,apeend给当前切片追加新元素。
3.map
map又可称为哈希或者字典,是在实际使用过程中最频繁用到的数据结构。可以用make创建一个空map,其中包含两个类型,第一个是key的类型,第二个是value的类型,具体操作中可以存储或者去除键值对,也可以删除键值对。代码如下:
m := make(map[string]int)
m["one"] = 1
m["two"] = 2
fmt.Println(m)
r, ok := m["unknown"]
fmt.Println(r, ok)
r1, ok1 := m["one"]
fmt.Println(r1, ok1)
delete(m, "one")
复制代码
其中,用make创建了一个空map,并对其赋初值,并执行了查询和删除操作。
4.range
对于一个slice或者一个map的话,我们可以使用range来快速遍历,这样可以让代码更加简介。对于数组则会返回两个值,第一个值是索引,第二个则是对应位置的值,代码如下:
for i, num := range nums {
sum += num
if num == 2 {
fmt.Println("index:", i, "num:", num)
}
}
复制代码
其中,使用了range遍历并打印对应值。
5.异常处理
在go语言中符合语言习惯的做法就是使用一个单独的返回值来传递错误信息,不同于Java的异常,go语言的异常处理能够清晰地知道那个函数返回了错误,并且能于简单的if-else来处理错误。在函数里,在其返回值类型后加个error,代表该函数可能会返回错误。则实现该函数时,return需要同时return两个值:要么出错时,可以return nil和一个error,否则返回原本的结果和nil,代码如下:
func findUser(users []user3, name string) (u *user3, err error) {
for _, u := range users {
if u.name == name {
return &u, nil
}
}
return nil, errors.New("not found")
}
复制代码
在以上函数中,展示出了不同情况下采取的不同异常处理的方法。
6.字符串操作
在标准库strings包里面有很多常用的字符串工具函数。代码如下:
a := "Hello"
fmt.Println(strings.Contains(a, "ll"))
fmt.Println(strings.Count(a, "l"))
复制代码
其中,Contains方法用于判断字符串中是否有对应字符,Count方法用于打印字符串中对应字符首次出现的位置。