? 在聲明一個(gè)新類(lèi)型之后声畏,聲明一個(gè)該類(lèi)型的方法之前需要先回答一個(gè)問(wèn)題:這個(gè)類(lèi)型的本質(zhì)是什么。如果這個(gè)類(lèi)型增加或者刪除某個(gè)值序愚,是要?jiǎng)?chuàng)建新值還是要更改當(dāng)前的值率碾?如果是要?jiǎng)?chuàng)建一個(gè)新值,該類(lèi)型的方法就是使用值傳遞者撑刺。如果是修改當(dāng)前的值就使用指針接受者這個(gè)答案會(huì)影響程序內(nèi)部傳遞這個(gè)類(lèi)型的值得方式:是按照值傳遞還是按照指針傳遞鹉胖。保持傳遞的一致性很重要。這個(gè)背后的原則是够傍,不要只關(guān)注某個(gè)地方是如何處理的這個(gè)值甫菠,而是要關(guān)注這個(gè)值得(本質(zhì)是什么)?冕屯。
5.3.1內(nèi)置類(lèi)型
內(nèi)置類(lèi)型是由語(yǔ)言提供的一組類(lèi)型寂诱。我們已經(jīng)見(jiàn)過(guò)這些類(lèi)型,分別是數(shù)值類(lèi)型安聘,字符串類(lèi)型和布爾類(lèi)型痰洒。這些類(lèi)型本質(zhì)上都是(原始的類(lèi)型)?浴韭。因此黨對(duì)這些值進(jìn)行增加或者刪除的時(shí)候丘喻,會(huì)創(chuàng)建一個(gè)新的值∧罹保基于這個(gè)結(jié)論把這些類(lèi)型的值傳遞給方法或者函數(shù)時(shí)泉粉,應(yīng)該傳遞一個(gè)(對(duì)應(yīng)的值得副本)?榴芳。
5.3.2引用類(lèi)型
go語(yǔ)言里的類(lèi)型有一下幾個(gè):切片嗡靡、映射、通道翠语、接口和函數(shù)類(lèi)型叽躯。當(dāng)聲明上述類(lèi)型的變量的時(shí)候,創(chuàng)建的變量被稱作(標(biāo)頭值)肌括?点骑。從技術(shù)細(xì)節(jié)上說(shuō)(字符串也是一種引用類(lèi)型)?谍夭。每個(gè)引用類(lèi)型創(chuàng)建的標(biāo)頭值是一個(gè)包含指向底層數(shù)據(jù)結(jié)構(gòu)的指針黑滴。每個(gè)引用類(lèi)型還包括一組特殊的字段,(用于管理底層數(shù)據(jù)結(jié)構(gòu))紧索?{管理方式}袁辈。因?yàn)闃?biāo)頭值是為復(fù)制而設(shè)計(jì)的,所以永遠(yuǎn)不需要共享一個(gè)引用類(lèi)型的值珠漂。標(biāo)頭值包含一個(gè)指針晚缩,因此通過(guò)復(fù)制來(lái)傳遞一個(gè)引用類(lèi)型的值得副本尾膊,本質(zhì)上就是在共享底層數(shù)據(jù)。
5.3.3
結(jié)構(gòu)類(lèi)型可以用來(lái)描述一組數(shù)據(jù)值荞彼,這組值的本質(zhì)既可以是(原始的冈敛,也可以是非原始的)?鸣皂。如果決定在某寫(xiě)東西需要?jiǎng)h除或者添加某個(gè)接口類(lèi)型的值時(shí)該結(jié)構(gòu)的值不應(yīng)該被改變抓谴,那么需要遵守之前提到的內(nèi)置類(lèi)型和引用類(lèi)型的規(guī)范。