Golang项目文件夹路径设置错误怎么办
Golang项目文件夹路径设置错误怎么办 你好,我在理解如何组织Go项目时遇到了一些困难。
我的项目构建两个二进制文件,一个客户端和一个服务器。它由以下部分组成:
- 使用“mod”的公共包
- 使用“mod”的私有包
- 为两个二进制文件共有的函数准备的本地包。
我使用了这个文件夹结构:
git.company.com/my-project
+ go.mod
+ cmd
| + server
| | + go-files / package main / import "git.company.com/my-project/local-package-1"
| + client
| + go-files / package main
+ local-package-1
| + go-files / package local-package-1
+ local-package-2
+ go-files / package local-package-2 / import "git.company.com/my-project/local-package-1"
go.mod 文件如下:
module git.company.com/my-project
go 1.14
// 下面这行似乎没有效果
replace git.company.com/my-project/ => ./
require (
git.company.com/go-toolbox-1 v0.0.0-xxx-xxx
git.company.com/go-toolbox-2 v0.0.0-xxx-xxx
github.com/lib/pq v1.9.0
github.com/mattn/go-sqlite3 v1.14.5
)
我这样构建:
cd cmd/server && GO111MODULE=on go build
这可以正常工作。
我可以从项目根目录这样更新模块:
go get -u github.com/lib/pq
这也可以正常工作。
但是我无法从项目根目录一次性更新所有依赖项:
go get -u
go get .: path /Users/xxx/git/my-project is not a package in module rooted at /Users/xxx/git/my-project
我想我遗漏了某些东西。我尝试去理解并模仿 https://github.com/golang-standards/project-layout,但没有成功。
请注意,除了 go get -u 之外,我可以构建我的工具,并且项目可以运行。
有人能帮助我吗?
更多关于Golang项目文件夹路径设置错误怎么办的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于Golang项目文件夹路径设置错误怎么办的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
你的项目结构是正确的,主要问题在于 go get -u 命令的使用方式。在 Go 模块项目中,go get -u 需要指定具体的包路径或模块路径,不能直接在根目录无参数运行。
以下是解决方案和示例:
1. 修复 go get -u 问题
在项目根目录运行以下命令之一:
// 更新所有依赖项
go get -u ./...
// 或更新特定模块
go get -u git.company.com/go-toolbox-1
go get -u github.com/lib/pq
2. 移除无效的 replace 指令
你的 go.mod 中的 replace 指令有问题,应该移除或修正:
module git.company.com/my-project
go 1.14
// 移除这行,或者如果需要本地替换,使用正确格式:
// replace git.company.com/my-project => ./local-package-1
require (
git.company.com/go-toolbox-1 v0.0.0-xxx-xxx
git.company.com/go-toolbox-2 v0.0.0-xxx-xxx
github.com/lib/pq v1.9.0
github.com/mattn/go-sqlite3 v1.14.5
)
3. 完整的项目结构示例
git.company.com/my-project/
├── go.mod
├── go.sum
├── cmd/
│ ├── server/
│ │ ├── main.go
│ │ └── server.go
│ └── client/
│ ├── main.go
│ └── client.go
├── internal/
│ ├── pkg1/
│ │ ├── pkg1.go
│ │ └── pkg1_test.go
│ └── pkg2/
│ ├── pkg2.go
│ └── pkg2_test.go
├── pkg/
│ ├── local-package-1/
│ │ ├── module1.go
│ │ └── module1_test.go
│ └── local-package-2/
│ ├── module2.go
│ └── module2_test.go
└── scripts/
└── build.sh
4. 构建命令示例
// 从项目根目录构建所有
go build ./cmd/...
// 构建特定二进制
go build -o bin/server ./cmd/server
go build -o bin/client ./cmd/client
// 安装到 $GOPATH/bin
go install ./cmd/...
5. 导入示例
cmd/server/main.go:
package main
import (
"git.company.com/my-project/pkg/local-package-1"
"git.company.com/my-project/pkg/local-package-2"
"git.company.com/my-project/internal/pkg1"
)
func main() {
local_package_1.Function1()
local_package_2.Function2()
pkg1.InternalFunction()
}
pkg/local-package-1/module1.go:
package local_package_1
import "fmt"
func Function1() {
fmt.Println("Function from local-package-1")
}
6. 依赖管理命令
// 查看所有依赖
go list -m all
// 整理 go.mod 文件
go mod tidy
// 下载所有依赖
go mod download
// 验证依赖完整性
go mod verify
你的项目结构基本正确,主要问题是 go get -u 命令的使用方式。使用 go get -u ./... 可以更新所有依赖项。

