博主這句話是什么意思:“如果你傳遞一個(gè)指針,而不是一個(gè)值類型,go編譯器大多數(shù)情況下會(huì)認(rèn)為需要?jiǎng)?chuàng)建一個(gè)對(duì)象,并將對(duì)象移動(dòng)到堆上,所以會(huì)導(dǎo)致額外的內(nèi)存分配:因此當(dāng)使用指針代替值類型作為參數(shù)傳遞時(shí),需要根據(jù)自己需求來使用?!保业睦斫馐侨绻麄鬟f指針,就會(huì)創(chuàng)建一個(gè)新的結(jié)構(gòu)體Person{}(例子中)?但是我試了一下,沒有創(chuàng)建,如代碼:
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"
}
打印結(jié)果是:
0xc082024020
0xc082024020
一樣啊,沒變,也就是沒有創(chuàng)建新的對(duì)象???不知道我有沒有理解錯(cuò)你的意思?
一日一學(xué)_Go從錯(cuò)誤中學(xué)習(xí)基礎(chǔ)二上一篇(一日一學(xué)_Go從錯(cuò)誤中學(xué)習(xí)基礎(chǔ)一)講了部分Golang容易出錯(cuò)地方,為了讓讀者清晰學(xué)習(xí),我決定分開。 new()與make()使用 數(shù)組、結(jié)構(gòu)體和所有的值類型都可以使...
@WuXiao_ 相互學(xué)習(xí),我正在學(xué)習(xí)golang,看到你寫的go系列教程,很好,學(xué)到了很多東西,希望你寫更多的好文,讓我們學(xué)習(xí)。
一日一學(xué)_Go從錯(cuò)誤中學(xué)習(xí)基礎(chǔ)一在寫Go代碼時(shí),多少會(huì)出一些錯(cuò)誤,我把這些常見錯(cuò)誤整理出來。一是再次讓自己重新認(rèn)識(shí)Golang,進(jìn)行不足的學(xué)習(xí)。二是分享出來讓更多人認(rèn)識(shí)Golang。 短聲明使用 短聲明只能...
用defer循環(huán)關(guān)流的可以用這樣寫:
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語句移至另外一個(gè)被調(diào)函數(shù)。在每次循環(huán)時(shí),調(diào)用這個(gè)函數(shù)。
一日一學(xué)_Go從錯(cuò)誤中學(xué)習(xí)基礎(chǔ)一在寫Go代碼時(shí),多少會(huì)出一些錯(cuò)誤,我把這些常見錯(cuò)誤整理出來。一是再次讓自己重新認(rèn)識(shí)Golang,進(jìn)行不足的學(xué)習(xí)。二是分享出來讓更多人認(rèn)識(shí)Golang。 短聲明使用 短聲明只能...