go - 将 go 项目分解为子文件夹

标签 go

我想将我的项目分解为子文件夹。

我想要这样的代码结构:

├── main.go
└── models
    └── user.go

main.go 在哪里:

package main

import (
  "fmt"
  "./models"
)

func main(){
  fmt.Println(User{"new_user"})

}

而 user.go 是:

package models

type User struct {
  Login string
}

但 User 未在主包中定义,导入会引发警告“已导入且未使用”。

我做错了什么?我的项目很简单(不是这样的例子,而是只有几个文件( Controller 和模型)),我想要一个简单的结构。

也许我的做法完全错误?

问题项目在这里:https://github.com/abonec/go_import_problem

最佳答案

我最近通过使用 go modules 实现了这一点。

go v1.11.1 起,Golang 引入了对模块的初步选择加入支持。这旨在完全消除,坦率地说,荒谬的 $GOPATH 必要性。您现在不仅可以在任何普通目录(例如 ~/development)中拥有版本化的依赖项,而且您基本上可以拥有类似于 namespace 和子目录的内容。你可以enable this feature通过使用以下环境变量调用 go 命令:GO111MODULE=on

Go v1.11.3 预计 enable modules by default并定于 2019 年 8 月。


这是一个示例目录结构(您可能会在其他一些语言中找到它)。

~/Dev/my-app
 ├── src/
 │   ├── one/
 │   │   ├── two/
 │   │   │   └── two.go
 │   │   └── one.go
 │   └── zero.go
 ├── go.mod
 └── app.go

应用程序名为 my-app,这将是 app.go 的模块名称。我们在 go.mod 中定义一次,然后子目录中的所有其他 go 文件都将自动导入,就好像它们是命名空间一样。

鉴于上述情况,two.go,假设它包含一个名为 Two 的函数,将可通过使用 app.go 导入 my-app/src/one/two.

为了实现这一目标,您需要执行以下操作:

go.mod

module my-app

two.go

package two

func Two() string {
    return "I'm totally not supposed to be using go modules for this"
}

应用程序去

package main

import "my-app/src/one/two"

func main() {
    two.Two()
}

如果你要在 two/中放置另一个文件,那么你可以简单地使用 two.TheNewFunc() 只要你使 TheNewFunc() 在新文件中可用文件。

我创建了一个非常简单的 GitHub repo您可以将其作为演示查看。

关于go - 将 go 项目分解为子文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51092587/

相关文章:

go - 从 golang os.exec 调用 'go build' 命令

json - golang序列化反序列化时JSON属性名称不同

go - Gin 框架无法从 Postman 获取数据

go - 如何在 Go 中等待命令行输入

regex - 负向回顾失败

go - 在 golang 的另一个结构中重用结构

go modules - 替换不起作用 - 没有版本的替换模块必须是目录路径(根目录或以

arrays - golang : convert uint32 (or any built-in type) to []byte (to be written in a file)

command-line - 如何在 golang 中正确使用 os.Args?

go - 为 TOML 文件和 golang 解析表中的键值对