1 回答

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超3個(gè)贊
您可以使用類(lèi)型別名:
type SDKErr = errs.Error
// Error to inherit from errs.Error
type MyError struct {
SDKErr
ErrDetail string //more message to my error
st []uintptr
}
func (e *MyError) Error() string {
// ...
}
現(xiàn)在嵌入字段的名字是SDKErr,但是不會(huì)和方法名沖突,errs.Error不需要轉(zhuǎn)換就可以用在任何需要的地方。
游樂(lè)場(chǎng):https ://go.dev/play/p/XSWi5hzHGPh
當(dāng)然你也可以使用命名字段,而不是別名:
type MyError struct {
SDKErr errs.Error
ErrDetail string //more message to my error
st []uintptr
}
然后調(diào)用errs.Errorsimply like的方法e.SDKErr.GetCode()。但是MyError,例如,如果要序列化為 JSON,則字段errs.Error將顯示為嵌套對(duì)象,而使用類(lèi)型別名時(shí),它們將被“扁平化”。
基本上如果errs.Error被定義為:
type Error struct {
Code int
}
使用類(lèi)型別名和嵌入字段,JSON 看起來(lái)像:
{"Code":0,"ErrDetail":""}
與命名字段:
{"SDKErr":{"Code":0},"ErrDetail":""}
- 1 回答
- 0 關(guān)注
- 108 瀏覽
添加回答
舉報(bào)