为了账号安全,请及时绑定邮箱和手机立即绑定

Go 中带有接收器的方法声明

Go 中带有接收器的方法声明

Go
冉冉说 2021-06-29 17:15:50
以下错误:./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 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)    }}当我有一个接口时,如何注册一个方法?
查看完整描述

2 回答

?
慕的地6264312

TA贡献1817条经验 获得超6个赞

您正在尝试从另一个包中向预先存在的结构添加新方法;你不能这样做。

正确的做法是在您自己的包中定义一个结构,该结构将为预先存在的结构设置别名并继承其所有方法。这样做之后,您将能够将新方法添加到新结构中。

之后,您可以在任何地方使用您自己的结构,以便您可以访问额外的方法。


查看完整回答
反对 回复 2021-07-12
?
aluckdog

TA贡献1847条经验 获得超7个赞

您现在可能想看看是否可以将方法和行为附加到任何类型,例如 int 或 time.Time - 不可能。只有在同一包中定义了类型时,您才能为该类型添加方法。



查看完整回答
反对 回复 2021-07-12
  • 2 回答
  • 0 关注
  • 331 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信