go buildgopkgmodgithubcommattngo-runewidthv0014runewidthgo72 found packages uniseg docgo and main gen_breaktestgo in rootgopkgmodgithubcomrivounisegv043 怎么解决
这个问题是因为在 github.com/mattn/go-runewidth 的依赖中,有一个名为 github.com/rivo/uniseg 的包,但它包含两个文件,一个是 doc.go,另一个是 gen_breaktest.go,其中 gen_breaktest.go 中包含了一个 main 函数,这导致了构建时出现了冲突。
解决这个问题的方法是将 gen_breaktest.go 文件移动到一个独立的包中,并将其作为 github.com/rivo/uniseg 的依赖。具体步骤如下:
- 在
$GOPATH/src/github.com/rivo/uniseg目录下创建一个新的目录,例如tools,用于存放gen_breaktest.go文件。 - 将
gen_breaktest.go文件移动到tools目录中,并将包名修改为breaktest,例如:
// gen_breaktest.go
package breaktest
import (
"fmt"
"github.com/rivo/uniseg"
)
func main() {
// ...
}
- 在
$GOPATH/src/github.com/rivo/uniseg目录下创建一个新的文件tools.go,用于导入breaktest包,并将其作为github.com/rivo/uniseg的依赖。例如:
// tools.go
// +build tools
package tools
import (
_ "github.com/rivo/uniseg/tools/breaktest"
)
- 修改项目的依赖,将
github.com/rivo/uniseg替换为github.com/rivo/uniseg/tools,例如:
// main.go
package main
import (
"fmt"
"github.com/mattn/go-runewidth"
"github.com/rivo/uniseg/tools"
)
func main() {
// ...
}
- 最后,重新运行
go build命令即可。
这样做的好处是,在构建时,breaktest 包不会被编译进最终的可执行文件中,从而避免了在运行时出现冲突的问题
原文地址: https://www.cveoy.top/t/topic/ftkm 著作权归作者所有。请勿转载和采集!