我有自定義類型Int64Array
,Channel
和ChannelList
,如:在golang中,如何嵌入自定義類型?
type Int64Array []int64
func (ia *Int64Array) Scan(src interface{}) error {
rawArray := string(src.([]byte))
if rawArray == "{}" {
*ia = []int64{}
} else {
matches := pgArrayPat.FindStringSubmatch(rawArray)
if len(matches) > 1 {
for _, item := range strings.Split(matches[1], ",") {
i, _ := strconv.ParseInt(item, 10, 64)
*ia = append(*ia, i)
}
}
}
return nil
}
func (ia Int64Array) Value() (driver.Value, error) {
var items []string
for _, item := range ia {
items = append(items, strconv.FormatInt(int64(item), 10))
}
return fmt.Sprintf("{%s}", strings.Join(items, ",")), nil
}
type Channel int64
type ChannelList []Channel
如何能夠將Int64Array
到ChannelList
,這樣我可以調用它Scan
和Value
方法呢?我試過如下:
type ChannelList []Channel {
Int64Array
}
,但我發現語法錯誤。重要的是要確保ChannelList
項目的類型爲Channel
,如果這不可能通過嵌入我可能會創建獨立的功能,由ChannelList
和Int64Array
調用。
'Value'已經正常通過,'Scan'需要一個指針,因爲它**用'append'改變**片段。你的最後一段是錯誤的,當你看到一個指向切片的指針時,似乎已經習慣於總是包含它。 – Wessie
@Wessie同意了(回答編輯)。名稱「掃描」讓我感到困惑。我沒有預料到似乎是隻讀操作('Scan')來改變它的接收器上的任何東西。 – VonC