英文:
golang 1.19.2 internal pkg imports
问题
如果我有以下的项目结构:
src/github.com/proj
src/github.com/proj/a
src/github.com/proj/b
并且在 pkg a 中的一个文件引用了 pkg b 中的一个值。在 pkg a 文件中,这个导入应该是什么样子的?
示例:pkg a 的 foo.go 文件
import
(
github.com/proj/b // 如果使用这个,我需要在 go.mod 文件中添加条目
proj/b // 没有 go.mod 条目
)
func fooFunc() {
return b.Value
}
英文:
if I have the following proj structure:
src/github.com/proj
src/github.com/proj/a
src/github.com/proj/b
and a file in pkg a references a value in pkg b. What should this import look like in the pkg a file?
example: pkg a foo.go
import
(
github.com/proj/b //if this then I would need a go.mod entry
proj/b //no go.mod entry
)
func fooFunc() {
return b.Value
}
答案1
得分: 2
假设以下情况:
-
你的项目在Github上的一个单一仓库中(github.com/user/proj),而不是问题中暗示的多个仓库。
-
你的项目在根目录下有一个单一的go.mod文件,模块路径为github.com/user/proj。
-
目录b中的文件使用
package b
作为包声明。
使用以下导入语句:
package a
import (
"github.com/user/proj/b"
)
func fooFunc() {
return b.Value
}
英文:
Assuming the following:
-
Your project is in a single repository on Github (github.com/user/proj), not multiple repositories as implied by the question.
-
Your project has a single go.mod at the root of the project with module path github.com/user/proj.
-
The files in directory b use
package b
as the package statement.
Use this import:
package a
import (
"github.com/user/proj/b"
)
func fooFunc() {
return b.Value
}
答案2
得分: 0
考虑以下项目结构,其中 .
是你的项目根文件夹:
.
├── api
│ └── api.go
├── database
│ └── database.go
├── go.mod
└── main.go
以及源代码文件的内容:
./go.mod
module github.com/myproj
go 1.20
./main.go
package main
import "github.com/myproj/api"
func main() {
api.Create()
}
./api/api.go
package api
import "github.com/myproj/database"
func Create() {
database.Create()
}
./database/database.go
package database
import "fmt"
func Create() {
fmt.Println("OK")
}
Go 会自动将你的内部包解释为依赖项。从根目录运行以下命令:
go run .
请注意,为了使外部内部包能够访问它,你必须使用大写字母作为变量和函数的首字母来使其公开。
func MyPublicFunction(){}
func myPrivateFunction(){}
英文:
Consider the following project structure where .
is your project root folder:
.
├── api
│ └── api.go
├── database
│ └── database.go
├── go.mod
└── main.go
And the source code file contents:
./go.mod
module github.com/myproj
go 1.20
./main.go
package main
import "github.com/myproj/api"
func main() {
api.Create()
}
./api/api.go
package api
import "github.com/myproj/database"
func Create() {
database.Create()
}
./database/database.go
package database
import "fmt"
func Create() {
fmt.Println("OK")
}
Go will automatically interpret your internal packages as dependencies. From the root you run:
go run .
Note that you must make variables and functions public with a upper case first letter in order for external inner packages to have access to it.
func MyPublicFunction(){}
func myPrivateFunction(){}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论