Golang中如何复用本地包

Golang中如何复用本地包 我相对来说是Go语言的新手,但到目前为止已经学完了几乎所有的Go教程。 我需要一些帮助来弄清楚我哪里做错了。 我遇到的问题主题是——在不同的本地应用程序/包中复用同一个本地目标包,而不将该目标包放在主调用包的文件夹下。

目的是在将其推送到Git仓库的模块之前,先在不同的应用程序中使用这个包进行试验。

我在Git上有非常简单的代码和详细信息:

GitHub GitHub

头像

bugaevski/goneedhelp

通过在GitHub上创建账户来为bugaevski/goneedhelp的开发做出贡献。

我真诚地感谢任何线索或指导方向。

诚挚地,


更多关于Golang中如何复用本地包的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于Golang中如何复用本地包的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在Go中复用本地包,可以通过replace指令或设置GOPRIVATE环境变量来实现。以下是具体方法:

1. 使用replace指令(推荐用于本地开发)

go.mod文件中使用replace指令将模块路径指向本地目录。

示例结构:

/projects
  /myapp
    main.go
    go.mod
  /mypackage
    go.mod
    mypackage.go

myapp/go.mod:

module myapp

go 1.21

replace mypackage => ../mypackage

require mypackage v0.0.0

myapp/main.go:

package main

import (
    "fmt"
    "mypackage"
)

func main() {
    fmt.Println(mypackage.Hello())
}

mypackage/mypackage.go:

package mypackage

func Hello() string {
    return "Hello from local package"
}

运行go mod tidy同步依赖。

2. 使用GOPRIVATE环境变量

设置GOPRIVATE避免Go尝试从远程仓库获取包。

export GOPRIVATE=github.com/yourusername/*

然后在go.mod中直接引用本地路径:

require github.com/yourusername/mypackage v0.0.0

replace github.com/yourusername/mypackage => ../mypackage

3. 使用go.work文件(Go 1.18+)

创建go.work文件管理多个本地模块。

示例: 在项目根目录运行:

go work init ./myapp ./mypackage

生成的go.work文件:

go 1.21

use (
    ./myapp
    ./mypackage
)

关键点:

  • 确保本地包的go.mod中模块名称与主应用中require的模块名称一致
  • 运行go mod tidy解决依赖
  • 使用相对路径时注意目录层级关系

这些方法允许你在不发布到远程仓库的情况下复用本地包。

回到顶部