Golang本地包开发指南

Golang本地包开发指南 你好,

我是Go语言的新手,正在尝试开发自己的库。我可以成功地将代码推送到Github并在我的项目中使用这些包。

package main

import "github.com/fredericdepuydt/go-libraries/echo"

func main() {
    echo.Error("An error message")
    echo.Warning("A warning")
    echo.Comment("Comment")
}

我希望能够进一步开发这个库,而不是在测试前将每一行代码都推送到Github。 目前这不可能实现,因为我本地的仓库被忽略了,总是拉取并使用远程git的最新版本。

我尝试添加了以下文件夹结构:

src
   github.com
      fredericdepuydt
         go-libraries
           echo
             echo.go
           color
             color.go

到GOPATH和GOROOT中,但在每次构建或运行时,编译器仍然试图从在线仓库获取所有内容。

我使用VScode和Go扩展(由Google提供)进行开发。

如何强制Go使用我的本地仓库?

此致, Frederic Depuydt


更多关于Golang本地包开发指南的实战教程也可以访问 https://www.itying.com/category-94-b0.html

2 回复

您似乎没有使用 Go 模块。强烈建议您这样做。

使用模块时,您可以使用 replace 指令指向库的本地副本。

更多关于Golang本地包开发指南的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


在Go模块中,可以通过replace指令来使用本地包进行开发。以下是具体步骤:

1. 初始化Go模块

在你的库项目根目录中:

cd /path/to/your/local/go-libraries
go mod init github.com/fredericdepuydt/go-libraries

2. 在使用库的项目中添加replace指令

在你的主项目go.mod文件中添加:

module your-project-name

go 1.21

require github.com/fredericdepuydt/go-libraries v0.0.0

replace github.com/fredericdepuydt/go-libraries => /path/to/your/local/go-libraries

3. 或者使用相对路径(推荐)

module your-project-name

go 1.21

require github.com/fredericdepuydt/go-libraries v0.0.0

replace github.com/fredericdepuydt/go-libraries => ../go-libraries

4. 完整示例

项目结构:

your-project/
├── go.mod
├── go.sum
└── main.go

go-libraries/
├── go.mod
├── echo/
│   └── echo.go
└── color/
    └── color.go

your-project/go.mod:

module myapp

go 1.21

require github.com/fredericdepuydt/go-libraries v0.0.0

replace github.com/fredericdepuydt/go-libraries => ../go-libraries

your-project/main.go:

package main

import "github.com/fredericdepuydt/go-libraries/echo"

func main() {
    echo.Error("An error message")
    echo.Warning("A warning")
    echo.Comment("Comment")
}

5. 使用go work(Go 1.18+)

对于更复杂的开发工作流,可以使用Go Workspace:

# 在项目根目录创建workspace
go work init your-project go-libraries

# 生成的go.work文件
go 1.21

use (
    ./your-project
    ./go-libraries
)

这样配置后,Go工具链将优先使用本地包而不是远程仓库,便于你进行本地开发和测试。

回到顶部