以下错误:
./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)
由此代码生成:
package main
import (
"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)
}
}
如果我有界面,如何注册方法?
答案 0 :(得分:2)
您正尝试将新方法添加到另一个包中的预先存在的结构中;你不能这样做。
正确的方法是在您自己的包中定义一个结构,该结构将为预先存在的结构添加别名并继承其所有方法。完成后,您将能够将新方法添加到新结构中。
之后,您可以在任何地方使用自己的结构,这样您就可以访问额外的方法。
答案 1 :(得分:0)
现在可能很想看看你是否可以将方法和行为附加到任何类型,例如int或time.Time - 不可能。只有在同一个包中定义了类型时,才能为类型添加方法。