类型没有字段或方法

问题描述 投票:0回答:1

我对结构体的方法有疑问。 在一个文件(同一包)中我有一个结构:

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 methods
1个回答
0
投票

这也吸引了我>.<

Go 只考虑导出以大写字母开头的函数;包括会员职能。所以你需要改变:

func (task *Task) createTask() (err error) {
   ...

func (task *Task) CreateTask() (err error) {
   ...

在呼叫站点也类似。

不幸的是,如果您编写了模块并打算导出该函数,Go 的错误不会告诉您如何解决此问题。

© www.soinside.com 2019 - 2024. All rights reserved.