Golang构建结果出现意外的目录结构问题
Golang构建结果出现意外的目录结构问题 我安装了 Go 1.13.6。
运行 go test -c -o tester 来构建测试时出现以下错误:
unexpected directory layout:
import path: _/mnt/c/Users/litang/githubWorkSpace/MIT-6.824repo/src/labrpc
root: /mnt/c/Users/litang/githubWorkSpace/MIT-6.824repo/src
dir: /mnt/c/Users/litang/githubWorkSpace/MIT-6.824repo/src/labrpc
expand root: /mnt/c/Users/litang/githubWorkSpace/MIT-6.824repo
expand dir: /mnt/c/Users/litang/githubWorkSpace/MIT-6.824repo/src/labrpc
separator: /
ERROR: Build failed
GOPATH 设置为 /mnt/c/Users/litang/githubWorkSpace/MIT-6.824repo
当前工作目录是 $GOPATH/src/raft
gopath 目录结构:
├── Makefile
├── README.md
├── labs
│ ├── lab1
│ │ └── README.md
│ └── lab2
│ └── README.md
├── out2
└── src
├── kvraft
│ ├── client.go
│ ├── common.go
│ ├── config.go
│ ├── server.go
│ └── test_test.go
├── labgob
│ ├── labgob.go
│ └── test_test.go
├── labrpc
│ ├── labrpc.go
│ └── test_test.go
├── raft
│ ├── config.go
│ ├── go_test_many.sh
│ ├── loop_to_test_raft.sh
│ ├── persister.go
│ ├── raft.go
│ ├── test_test.go
│ └── util.go
在 raft.go 中,我的导入如下:
import (
"bytes"
"labgob"
"labrpc"
"math"
"math/rand"
"sync"
"sync/atomic"
"time"
)
我应该怎么做才能解决这个问题?
更多关于Golang构建结果出现意外的目录结构问题的实战教程也可以访问 https://www.itying.com/category-94-b0.html
据我所知,在 GOPATH 中,除了 src、pkg 和 bin 作为子文件夹外,不允许存在其他内容。
通常,你可能希望将你的程序更新为使用模块,而不是使用传统的 GOPATH。
更多关于Golang构建结果出现意外的目录结构问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
这个错误是由于Go模块路径与目录结构不匹配导致的。在Go 1.13中,当使用GOPATH模式时,导入路径应该基于GOPATH/src目录。错误信息显示导入路径是 _/mnt/c/Users/litang/githubWorkSpace/MIT-6.824repo/src/labrpc,这表示Go工具无法正确解析模块路径。
解决方案是确保导入路径正确。在你的情况下,应该使用相对GOPATH/src的路径。修改raft.go中的导入语句:
import (
"bytes"
"math"
"math/rand"
"sync"
"sync/atomic"
"time"
// 使用正确的导入路径
"mit-6.824/src/labgob"
"mit-6.824/src/labrpc"
)
或者,更好的方法是初始化Go模块。在你的项目根目录(MIT-6.824repo目录)运行:
cd /mnt/c/Users/litang/githubWorkSpace/MIT-6.824repo
go mod init mit-6.824
然后更新raft.go中的导入语句:
import (
"bytes"
"math"
"math/rand"
"sync"
"sync/atomic"
"time"
"mit-6.824/src/labgob"
"mit-6.824/src/labrpc"
)
如果不想使用Go模块,可以设置环境变量强制使用GOPATH模式:
export GO111MODULE=off
cd /mnt/c/Users/litang/githubWorkSpace/MIT-6.824repo/src/raft
go test -c -o tester
另一个快速解决方案是使用相对导入路径。修改raft.go:
import (
"bytes"
"math"
"math/rand"
"sync"
"sync/atomic"
"time"
"../labgob"
"../labrpc"
)
然后运行测试:
cd /mnt/c/Users/litang/githubWorkSpace/MIT-6.824repo/src/raft
go test -c -o tester
如果这些方法都不起作用,检查labrpc目录是否包含有效的Go包。确保labrpc目录下有go.mod文件或正确的包声明。在labrpc/labrpc.go中:
package labrpc
// 包内容...
运行go env确认环境设置:
go env GOPATH
go env GO111MODULE

