博主这句话是什么意思:“如果你传递一个指针,而不是一个值类型,go编译器大多数情况下会认为需要创建一个对象,并将对象移动到堆上,所以会导致额外的内存分配:因此当使用指针代替值类型作为参数传递时,需要根据自己需求来使用。”,我的理解是如果传递指针,就会创建一个新的结构体Person{}(例子中)?但是我试了一下,没有创建,如代码:
package main
import "fmt"
func main() {
p2 := &Person{"wuxiao", 15}
fmt.Println(&p2)//打印地址
setName1(p2)
fmt.Println(&p2)//打印传值以后的地址
}
type Person struct {
name string
age int
}
func setName1(p *Person) {
p.name = "dabai"
}
打印结果是:
0xc082024020
0xc082024020
一样啊,没变,也就是没有创建新的对象啊?不知道我有没有理解错你的意思?
一日一学_Go从错误中学习基础二上一篇(一日一学_Go从错误中学习基础一)讲了部分Golang容易出错地方,为了让读者清晰学习,我决定分开。 new()与make()使用 数组、结构体和所有的值类型都可以使...
@WuXiao_ 相互学习,我正在学习golang,看到你写的go系列教程,很好,学到了很多东西,希望你写更多的好文,让我们学习。
一日一学_Go从错误中学习基础一在写Go代码时,多少会出一些错误,我把这些常见错误整理出来。一是再次让自己重新认识Golang,进行不足的学习。二是分享出来让更多人认识Golang。 短声明使用 短声明只能...
用defer循环关流的可以用这样写:
for _, filename := range filenames {
if err := doFile(filename); err != nil {
return err
}
}
func doFile(filename string) error {
f, err := os.Open(filename)
if err != nil {
return err
}
defer f.Close()
}
//将defer语句移至另外一个被调函数。在每次循环时,调用这个函数。
一日一学_Go从错误中学习基础一在写Go代码时,多少会出一些错误,我把这些常见错误整理出来。一是再次让自己重新认识Golang,进行不足的学习。二是分享出来让更多人认识Golang。 短声明使用 短声明只能...