【问题标题】:Import local package导入本地包
【发布时间】:2015-05-03 18:32:53
【问题描述】:

我的项目结构如下:

--/project
----main.go
----/models
------user.go

在 main.go 我想用户 user.go:

user.go:

package models

type User struct {
    Name string
}

ma​​in.go:

package main

import (...)

func main() {
    user := &User{Name: "Igor"}
}

如何从 main.go 导入 user.go?

/project 在 GOPATH 下,所以我试了一下:

import "project/models"

但这无济于事。

【问题讨论】:

    标签: go


    【解决方案1】:

    你的设置是正确的,你使用的包是错误的。

    改变:

    user := &User{Name: "Igor"}
    

    到:

    user := &models.User{Name: "Igor"}
    

    或者,如果您不想总是说 models.XXX,请将您的导入更改为。

    import . "project/models"
    

    我确实发现这样做会使代码长期难以阅读。 读者很清楚“models.User”的来源,而不是普通的“User”,因为通常这意味着它来自这个包。

    【讨论】:

    • 现在,这很有用!谢谢!
    【解决方案2】:

    如果您在 go 工作区之外构建项目,您可以使用 relative imports:

    import "./models"
    

    但是,使用相对导入并不是一个好主意。首选方法是导入完整的包路径(并将您的项目放在 proper go workspace 中):

    import "github.com/igor/myproject/models"
    

    【讨论】:

    • 其实项目的完整路径是$GOPATH/src/project。如果我写 import "project/models",它不应该工作吗?
    • 无论如何我都收到错误消息:本地导入“./models”在非本地包中
    • 如果它位于 $GOPATH/src/project 中,那么你有一个正确的 go 工作区,你不能使用本地导入。
    • 而你也可以import "projects/models"
    • 是的,因为在 go 中导入的类型名称应该是合格的:user := &models.User{Name: "Igor"}
    猜你喜欢
    • 2021-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-02
    • 1970-01-01
    • 1970-01-01
    • 2019-12-26
    • 2013-04-29
    相关资源
    最近更新 更多