golang 1.19.2 内部包导入

huangapple go评论75阅读模式
英文:

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(){}

huangapple
  • 本文由 发表于 2023年5月9日 03:27:22
  • 转载请务必保留本文链接:https://go.coder-hub.com/76203793.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定