? 在聲明一個新類型之后,聲明一個該類型的方法之前需要先回答一個問題:這個類型的本質是什么。如果這個類型增加或者刪除某個值,是要創建新值還是要更改當前的值?如果是要創建一個新值,該類型的方法就是使用值傳遞者。如果是修改當前的值就使用指針接受者這個答案會影響程序內部傳遞這個類型的值得方式:是按照值傳遞還是按照指針傳遞。保持傳遞的一致性很重要。這個背后的原則是,不要只關注某個地方是如何處理的這個值,而是要關注這個值得(本質是什么)?。
5.3.1內置類型
內置類型是由語言提供的一組類型。我們已經見過這些類型,分別是數值類型,字符串類型和布爾類型。這些類型本質上都是(原始的類型)?。因此黨對這些值進行增加或者刪除的時候,會創建一個新的值。基于這個結論把這些類型的值傳遞給方法或者函數時,應該傳遞一個(對應的值得副本)?。
5.3.2引用類型
go語言里的類型有一下幾個:切片、映射、通道、接口和函數類型。當聲明上述類型的變量的時候,創建的變量被稱作(標頭值)?。從技術細節上說(字符串也是一種引用類型)?。每個引用類型創建的標頭值是一個包含指向底層數據結構的指針。每個引用類型還包括一組特殊的字段,(用于管理底層數據結構)?{管理方式}。因為標頭值是為復制而設計的,所以永遠不需要共享一個引用類型的值。標頭值包含一個指針,因此通過復制來傳遞一個引用類型的值得副本,本質上就是在共享底層數據。
5.3.3
結構類型可以用來描述一組數據值,這組值的本質既可以是(原始的,也可以是非原始的)?。如果決定在某寫東西需要刪除或者添加某個接口類型的值時該結構的值不應該被改變,那么需要遵守之前提到的內置類型和引用類型的規范。