共计 819 个字符,预计需要花费 3 分钟才能阅读完成。
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] |
正文完