数组
func main() {
var nums1 [3]int
nums2 := [3]int{
1, 2, 3}
nums3 := [...]int{
3, 4, 5}
fmt.Println(nums1, nums3, nums2)
for i:=0;i<len(nums3);i++{
fmt.Println(nums3[i])
}
for i :=range nums2{
fmt.Println(i)
}
for i, v:=range nums2{
fmt.Println(i,v)
}
for _, v:=range nums2{
fmt.Println(v)
}
}
func printArray(arr [5]int) {
arr[3] = 100
}
func printArray2(arr *[5]int) {
arr[3] = 100
(*arr)[3] = 100
}
切片-Slice
func main() {
arrList := [7]int{
1,2,3,4,5,6,7}
arr := arrList[:]
arr1 := arrList[2,6]
arr1[0] = 22
sliceLearn(arr)
arr3 := arr1[1,3]
arr4 := arr3[0:4]
}
func sliceLearn(arr []int){
arr[0]=22
}
struct {
ptr
len
cap
}
func main() {
arr := [6]int{
1, 2, 3, 4, 5, 6}
slice1 := arr[2:5]
slice2 := append(slice1, 11)
slice3 := append(slice2, 12)
fmt.Println(slice1, slice2, slice3)
fmt.Println(arr)
var s []int
s1 := []int{
2, 3, 4, 5}
s2 := make([]int, 16)
s3 := make([]int, 16, 32)
for i := 0; i < 100; i++ {
printSlice(s)
s = append(s, 2*i)
}
fmt.Println(s)
copy(s2,s1)
s2 = append(s2[:3],s2[4:]...)
s2 = s2[1:]
s2 = s2[:len(s2)-1]
}
func printSlice(s []int) {
fmt.Printf(" len=%d, cap=%d\n", len(s), cap(s))
}
Map
map[k]V
map[k]map[k2]V
func main() {
m1 := map[string]string{
"aa": "bb",
"bb": "cc",
}
m2 := make(map[string]string)
var m3 map[string]string
fmt.Println(m1, m2, m3)
for k, v := range m1 {
fmt.Println(k, v)
}
for k := range m1 {
fmt.Println(k)
}
fmt.Println(m1["abc"])
courseName, ok := m2["abc"]
fmt.Println(courseName, ok)
delete(m1,"abc")
}
- 创建:make(map[string]int)
- 获取元素 m[key]
- key不存在时获取value类型的初始值
- 用value, ok := m[key]来判断是否存在key
- 用delete删除一个key
- map遍历不保证顺序,可以用len来获取个数
- map使用的是哈希表,key必须可以比较相等
- 除了slice, map, function的内建类型都可以作为key
- struct类型不包含上述字段,也可以作为key
- 每个rune是4个字节,转rune 不是对原有的内存存的东西进行解释,而是重新开一个内存,然后解释后存起来
rune
- rune相当于go的char
- 使用range遍历pos(索引不连续),rune(索引连续)对
- 使用utf8.RuneCountInString获得字符数量
- 使用len获得字节长度
- 使用[]byte获得字节
func main() {
s := "yes!肖小小最棒"
fmt.Printf("%s\n", []byte(s))
for _, b := range []byte(s) {
fmt.Printf("%X ", b)
}
fmt.Println()
for i, ch := range s {
fmt.Printf("(%d,%X)", i, ch)
}
fmt.Println()
fmt.Println(utf8.RuneCountInString(s))
bytes := []byte(s)
for len(bytes) > 0 {
ch, size := utf8.DecodeRune(bytes)
bytes = bytes[size:]
fmt.Printf("%c", ch)
}
fmt.Println()
for i, ch := range []rune(s) {
fmt.Printf("(%d,%c)", i, ch)
}
fmt.Println()
}