gpt4 book ai didi

go - Go 中带有接收者的方法声明

转载 作者:数据小太阳 更新时间:2023-10-29 03:07:41 25 4
gpt4 key购买 nike

以下错误:

./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)
}
}

有接口(interface)时如何注册方法?

最佳答案

您正在尝试将一个新方法 添加到另一个包中已有的结构中;你不能那样做。

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

之后你就可以在任何地方使用你自己的结构,这样你就可以访问额外的方法。

关于go - Go 中带有接收者的方法声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20702321/

25 4 0
文章推荐: map - 在 Go 中清除具有指针值的映射
文章推荐: javascript - 如何根据 JavaScript 中的值禁用