解碼JSON時,我總是為每個對象顯式編寫一個結構,以便可以在父結構中為單個對象實現(xiàn)Stringer接口,如下所示:type Data struct { Records []Record}type Record struct { ID int Value string}func (r Record) String() string { return fmt.Sprintf("{ID:%d Value:%s}", r.ID, r.Value)}我最近了解到可以對匿名結構進行嵌套。此方法對于定義要解碼的數(shù)據(jù)的結構更加簡潔:type Data struct { Records []struct { ID int Value string }}但是,是否可以在結構的成員(特別是匿名結構的成員)上定義方法?類似于第一個代碼塊中的Stringer接口實現(xiàn)。
1 回答

鴻蒙傳說
TA貢獻1865條經驗 獲得超7個贊
不可以,方法只能附加到同一包中定義的命名類型。從規(guī)格:
方法是具有接收器的功能。方法聲明將標識符(方法名稱)綁定到方法。它還將方法與接收者的基本類型相關聯(lián)。
MethodDecl = "func" Receiver MethodName Signature [ Body ] .
Receiver = "(" [ identifier ] [ "*" ] BaseTypeName ")" .
BaseTypeName = identifier .
接收器類型必須采用T或* T的形式,其中T是類型名稱。用T表示的類型稱為接收方基本類型;它不能是指針或接口類型,并且必須在與方法相同的程序包中聲明。據(jù)說該方法已綁定到基本類型,并且該方法的名稱僅在該類型的選擇器中可見。
Records第二個OP示例中的字段類型使用類型文字(即)來定義。不滿足上述“類型名稱”條件。
- 1 回答
- 0 關注
- 200 瀏覽
添加回答
舉報
0/150
提交
取消