【问题标题】:Package imports, cannot use struct from imported package包导入,不能使用导入包中的结构
【发布时间】:2023-03-07 05:39:01
【问题描述】:

这可能是一个菜鸟的错误,但我无法弄清楚。

在 main.go 我正在导入一个包。

import(
    "models/users"
)

// ...

func main() {
    r.HandleFunc("/users/list", UsersModel.List())

包存放在src/models/users

用户包如下所示:

package users

import (
    "gopkg.in/mgo.v2"
)

// ...

/**
 * User Model
 */
type UsersModel struct {

}

// Add methods to the UsersModel type.
func (m *UsersModel) List() {
// ...

当我运行代码时,出现以下错误。

src\main.go:9: 导入但未使用:“models/users” src\main.go:20: 未定义:用户模型

go 代码似乎是有效的,就好像我使其无效会引发错误一样。如何从 users 包中导出 UsersModel 类型?

【问题讨论】:

  • UsersModel 不是 var,而是 main.go 中的类型。您必须有一个 UsersModel 实例。
  • 这能回答你的问题吗? rand package error in Go

标签: go


【解决方案1】:

您需要在使用 UsersModel 之前加上包名 users,如下所示:

um := users.UserModel{}

UsersModel.List() 也是错误的:go 没有“静态方法”或“类方法”。

【讨论】:

  • 只是为了扩展这一点:除非您创建了UsersModel 的实例(即user := users.UsersModel{}),否则您不能调用方法。在您的情况下,您无法可靠地做到这一点,因为您无法以清晰的方式将其输入HandleFunc。您最好创建一个具有user := users.UsersModel{}ListAllUsersHandler(w http.ResponseWriter, r *http.Request),然后将users 实例的内容转换为HTML/JSON/whatever。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-12
  • 2022-09-30
  • 2015-07-26
  • 1970-01-01
  • 2014-02-07
  • 1970-01-01
相关资源
最近更新 更多