我对结构体的方法有疑问。 在一个文件(同一包)中我有一个结构:
type Task struct {
ID int `json:"id"`
Priority string `json:"priority"`
Content string `json:"content"`
}
任务在 POST 中作为主体出现。将 JSON 解析为该结构效果很好。 在其他文件中我有一个方法:
func (task *Task) createTask() (err error) {
data, err := bson.Marshal(&task)
if err != nil {
return errors.New("error in parsing incoming task")
}
rslt, err := collection.InsertOne(context.Background(), data)
if err != nil {
return errors.New("error in saving task to database")
}
fmt.Println(rslt.InsertedID)
return nil
}
任务结构与我的服务器位于同一文件中。 createTask() 方法位于处理与 mongoDB 通信的文件中。 当我运行服务器时出现此错误:
./server.go:53:12: task.createTask undefined (type Task has no field or method createTask)
这是我调用该方法的方式:
var task Task
json.Unmarshal(body, &task)
err = task.createTask()
你知道我做错了什么吗?
这也吸引了我>.<
Go 只考虑导出以大写字母开头的函数;包括会员职能。所以你需要改变:
func (task *Task) createTask() (err error) {
...
到
func (task *Task) CreateTask() (err error) {
...
在呼叫站点也类似。
不幸的是,如果您编写了模块并打算导出该函数,Go 的错误不会告诉您如何解决此问题。