这个问题是因为在 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 的依赖。具体步骤如下:

  1. $GOPATH/src/github.com/rivo/uniseg 目录下创建一个新的目录,例如 tools,用于存放 gen_breaktest.go 文件。
  2. gen_breaktest.go 文件移动到 tools 目录中,并将包名修改为 breaktest,例如:
// gen_breaktest.go

package breaktest

import (
    "fmt"
    "github.com/rivo/uniseg"
)

func main() {
    // ...
}
  1. $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"
)
  1. 修改项目的依赖,将 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() {
    // ...
}
  1. 最后,重新运行 go build 命令即可。

这样做的好处是,在构建时,breaktest 包不会被编译进最终的可执行文件中,从而避免了在运行时出现冲突的问题

go buildgopkgmodgithubcommattngo-runewidthv0014runewidthgo72 found packages uniseg docgo and main gen_breaktestgo in rootgopkgmodgithubcomrivounisegv043 怎么解决

原文地址: https://www.cveoy.top/t/topic/ftkm 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录