1.简单demo

a := 20
b := 20
fmt.Printf("a:%d",a)
fmt.Println()
fmt.Printf("b:%d",b)
fmt.Println()
changeA(&a)  //指针拷贝
changeB(b)   //值拷贝
fmt.Printf("after changeA a:%d",a)
fmt.Println()
fmt.Printf("after changeB b:%d",b)

func changeA(a *int){
    *a = 100
}

func changeB(b int){
    b = 100
}


--结果
a:20
b:20
after changeA a:100
after changeB b:20

指针拷贝会修改传递过来的值,值拷贝仅仅修改拷贝后的值
当需要修改传入的参数原来的值或者传入的对象比较大的时候,可以使用指针传递
golang中引用类型的声明默认是没有初始化的,定义一个指针后,该指针是nil
可以通过new进行初始化。

2.make

与new功能相同的还有make,make只对slice、map和chan进行初始化,slice、map和chan必须经过make初始化后,才可以操作
func make(t Type, size ...IntegerType) Type
make返回的是指针类型
new对指针进行初始化,返回指针类型对应的默认值,并可以对指针变量进行赋值

3.map 找子字符串个数

str := "a b c ab c a do do i i test am you"
mapC := make(map[string]int)
strArr := strings.Split(str, " ")
fmt.Println(strArr)
for k := range strArr {
    mapC[strArr[k]] = mapC[strArr[k]] + 1
}
fmt.Println(mapC)

--
[a b c ab c a do do i i test am you]
map[a:2 ab:1 am:1 b:1 c:2 do:2 i:2 test:1 you:1]

你若安好便是晴天
82 声望10 粉丝