
博主這句話是什么意思:“如果你傳遞一個指針,而不是一個值類型,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。 短聲明使用 短聲明只能...