go入门(3)—— 指针和切片

指针:

1. GO虽然保留了指针,但与其他编程语言不同的是,在GO当中不支持指针运算以及“->”运算符,而直接采用“.”选择符来操作指针目标对象的成员
2.操作符&取变量地址,使用*通过指针间接访问目标对象
3.默认值为nil,而非Null
4.在GO中,++与–是作为语句而不是作为表达式

package main

import "fmt"

/*func main() {
    a := 1
    a++

    var p *int = &a
    fmt.Println(*p)
}
*/
/*func main() {
    v := 1
    if v := 2; v > 0 {
        fmt.Println(v)
    }
    fmt.Println(v)
}*/
func main() {
    v := 1
    if v := 2; v > 0 {
        fmt.Println(v)
    }
    fmt.Println(v)
}

切片slice

1.其本身并不是数组,它指向底层的数组;作为变长数组的替代方案,可以关联底层数组的局部或全部;为引用类型;可以直接创建或从底层数组获取生成;使用len()获取元素个数,cap()获取容量;一般使用make()创建;如果多个切片指向相同底层数组,其中一个的值改变会影响全部;语法,make([]T,len,cap);其中cap可以省略,则和len的值相同;
2. Reslice
Reslice时索引以被slice的切片为准;索引不可以超过被slice的切片的容量cap值;索引越界不会导致底层数组的重新分配而是引发错误
3. Append
可以在slice尾部追加元素;可以将一个slice追加在另一个slice尾部;如果最终长度未超过追加到slice的容量则返回原始slice,如果超过追加到的slice的容量则将重新分配数组并拷贝原始数据

package main

import (
    "fmt"
)

func main() {
    /*a := [10]int{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}
    fmt.Println(a)
    s1 := a[:5]
    fmt.Println(s1)*/
    /*s1 := make([]int, 3)
    fmt.Println(len(s1), cap(s1))*/
    s1 := make([]int, 3, 6)
    fmt.Println(s1)
    s1 = append(s1, 1, 2, 3)
    fmt.Println(s1)
    a1 := []int{1, 2, 3, 4, 5, 6}
    a2 := []int{7, 8, 9}
    copy(a2[1:3], a1[1:3])
    fmt.Println(a2)
}

上一篇:go入门(2)——基础语法

你可能感兴趣的:(go)