这是我参与「第三届青训营 -后端场」笔记创作活动的第3篇笔记
切片(Slice) 重要!
arr := [...]int {0,1,2,3,4,5,6,7}
s := arr[2,6] //2 3 4 5
s [0] = 10 //arr的值变为[0 1 10 3 4 5 6 7]
- Slice 本身没有数据,是对底层array的一个view
Slice 可以 Reslice
Slice的扩展
- Slice可以向后扩展,不可以向前扩展
- s[i] 不可以超越len(s), 向后扩展不可以超越底层数组cap(s)
package main
import "fmt"
func main() {
arr := [...]int {1,2,3,4,5,6,7}
s1 := arr[2:6]
s2 := s1[3:5]
fmt.Println("s1= ", s1) //s1 = [2 3 4 5]
fmt.Println("s2= ", s2) //s2 = [5 6]
}
Slice添加元素
- 添加元素时如果超越cap, 系统会重新分配更大的底层数组,原来的数组(可能会被垃圾回收掉)
- 由于值传递的关系,必须接受append的返回值
- s = append(s, val)
- s := make([]int, 16, 32) // len, cap
package main
import "fmt"
func printSlice(s []int) {
fmt.Printf("len=%d,cap=%d",len(s),cap(s))
}
func main(){
s1 := []int{2,4,6,8}
printSlice(s1)
s2 := make([]int, 16)
printSlice(s2)
s3 := make([]int, 10, 32)
printSlice(s3)
//len=4, cap=4
//len=16, cap=16
//len=10, cap=32
}
Slice复制元素
copy(destination,source)
Slice删除元素
s2 := []int{2,4,6,8,0,0,0,0,0,0,0}
fmt.Println("Deleting elements from slice") //delete 8
s2 = append(s2[:3],s2[4:]...)
fmt.Println("Popping from front")
front := s2[0]
s2 = s2[1:]
fmt.Println("Popping from back")
tail := s2[len(s2) -1]
s2 = s2[:len(s2) - 1]
Map
- 创建:make(map[string]int)
- 获取元素:m[key]
- key不存在时,获得Value类型的初始值
- 用value, ok := m[key] 来判断是否存在key
- 用delete删除一个key
- 遍历Map,不保证遍历顺序
- Map还可嵌套map
package main
import "fmt"
func main() {
m := map[string]string{
"name": "ccmouse",
"course": "golang",
"site": "imooc",
"quality": "notbad",
}
fmt.Println(m)
m2 := make(map[string]int) //m2 == empty map
var m3 map[string]int //m3 == nil
fmt.Println("Traversing map")
for k, v := range m {
fmt.Println(k, v) //无序的
//取不存在的值时,输出一个空串""
}
map的key
- map使用哈希表,必须可以比较相等
- 除了slice, map, function的内建类型都可以作为key
- Struct类型不包含上述字段,也可以作为key
字符串处理
- rune相当于go的char
- 使用range遍历pos, rune对
- 使用utf8.RuneCountInString获得字符数量
- 使用[]byte获得字节
其他字符串操作
- Fields, Split, Join
- Contains, Index
- ToLower, ToUpper
- Trim, TrimRight, TrimLeft
package main
import (
"fmt"
"math"
)
func main() {
var a = "initial";
var d = true;
f := float32(e);
}
package main
import (
"fmt"
"math/rand"
)
func main {
maxNum := 100
rand.Seed(time.Now(),UnixNano()) //时间戳设置随机数种子
secretNumber := rand.Intn(maxNum)
fmt.Println("The secretnumber is ", secretNumb)
}
\