以下錯(cuò)誤:./main.go:13: c.Set undefined (type redis.Conn has no field or method Set)./main.go:19: invalid receiver type *redis.Conn (redis.Conn is an interface type)./main.go:20: red.Send undefined (type *redis.Conn has no field or method Send)是從這個(gè)代碼產(chǎn)生的:package mainimport ( "encoding/json" "github.com/garyburd/redigo/redis" "github.com/gorilla/mux" "log" "net/http" )func setHandler(res http.ResponseWriter, req *http.Request) { c := connectRedis() c.Set("foo", "bar") data, _ := json.Marshal("{'order':1, 'weight': 100, 'reps': 5, 'rest': 1}") res.Header().Set("Content-Type", "application/json; charset=utf-8") res.Write(data)}func (red *redis.Conn) Set(key string, value string) error { if _, err := red.Send("set", key, value); err != nil { return err }}func connectRedis() redis.Conn { c, err := redis.Dial("tcp", ":6379") if err != nil { // handle error } defer c.Close() return c}func main() { r := mux.NewRouter() r.HandleFunc("/sets.json", setHandler) http.Handle("/", r) err := http.ListenAndServe(":7000", nil) if err != nil { log.Fatal("ListenAndServe: ", err) }}當(dāng)我有一個(gè)接口時(shí),如何注冊(cè)一個(gè)方法?
2 回答

慕的地6264312
TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超6個(gè)贊
您正在嘗試從另一個(gè)包中向預(yù)先存在的結(jié)構(gòu)添加新方法;你不能這樣做。
正確的做法是在您自己的包中定義一個(gè)結(jié)構(gòu),該結(jié)構(gòu)將為預(yù)先存在的結(jié)構(gòu)設(shè)置別名并繼承其所有方法。這樣做之后,您將能夠?qū)⑿路椒ㄌ砑拥叫陆Y(jié)構(gòu)中。
之后,您可以在任何地方使用您自己的結(jié)構(gòu),以便您可以訪問額外的方法。

aluckdog
TA貢獻(xiàn)1847條經(jīng)驗(yàn) 獲得超7個(gè)贊
您現(xiàn)在可能想看看是否可以將方法和行為附加到任何類型,例如 int 或 time.Time - 不可能。只有在同一包中定義了類型時(shí),您才能為該類型添加方法。
- 2 回答
- 0 關(guān)注
- 354 瀏覽
添加回答
舉報(bào)
0/150
提交
取消