英文:
Error Message : go: go.mod file not found in current directory or any parent directory;
问题
我正在尝试使用Go运行一个单元测试。这些函数在主文件中运行正常。以下是给出的函数:
func LoadLexicon(lexiconPath string) (map[string]string, error) {
m := make(map[string]string)
lexiconPath = strings.TrimSuffix(lexiconPath, "\n")
if lexiconPath == "nil" {
m["COME"] = "k V m"
m["WORDS"] = "w 3` d z"
m["MECCA"] = "m E k @"
return m, nil
}
readFile, err := os.Open(lexiconPath)
if err != nil {
fmt.Println(err)
return m, err
}
fileScanner := bufio.NewScanner(readFile)
fileScanner.Split(bufio.ScanLines)
var fileLines []string
for fileScanner.Scan() {
fileLines = append(fileLines, fileScanner.Text())
}
lex_words := make(map[string]string)
for _, line := range fileLines {
temp := strings.Split(line, "\t")
lex_words[strings.ToUpper(temp[0])] = temp[1]
}
return lex_words, err
}
但是当我运行单元测试时,
func TestLoadLexicon(t *testing.T) {
tests := []struct {
n string
want string
}{
{"COME", "k V m"},
{"WORDS", "w 3` d z"},
{"MECCA", "m E k @"},
}
for _, tc := range tests {
if got, _ := LoadLexicon("nil"); got[tc.n] != tc.want {
t.Errorf("got %s, want %s", got[tc.n], tc.want)
}
}
}
我得到了这个错误:
Running tool: /usr/local/go/bin/go test -timeout 30s -run ^TestLoadLexicon$
go: go.mod file not found in current directory or any parent directory; see 'go help modules'
> Test run finished at 29/08/2022, 02:58:53 <
英文:
I am trying to run a unit test using go. The functions work properly in the main file. The function is given below:
func LoadLexicon(lexiconPath string) (map[string]string, error) {
m := make(map[string]string)
lexiconPath = strings.TrimSuffix(lexiconPath, "\n")
if lexiconPath == "nil" {
m["COME"] = "k V m"
m["WORDS"] = "w 3` d z"
m["MECCA"] = "m E k @"
return m, nil
}
readFile, err := os.Open(lexiconPath)
if err != nil {
fmt.Println(err)
return m, err
}
fileScanner := bufio.NewScanner(readFile)
fileScanner.Split(bufio.ScanLines)
var fileLines []string
for fileScanner.Scan() {
fileLines = append(fileLines, fileScanner.Text())
}
lex_words := make(map[string]string)
for _, line := range fileLines {
temp := strings.Split(line, "\t")
lex_words[strings.ToUpper(temp[0])] = temp[1]
}
return lex_words, err
}
But when I am running the unit test,
func TestLoadLexicon(t *testing.T) {
tests := []struct {
n string
want string
}{
{"COME", "k V m"},
{"WORDS", "w 3` d z"},
{"MECCA", "m E k @"},
}
for _, tc := range tests {
if got, _ := LoadLexicon("nil"); got[tc.n] != tc.want {
t.Errorf("got %s, want %s", got[tc.n], tc.want)
}
}
}
I am getting this error
`
Running tool: /usr/local/go/bin/go test -timeout 30s -run ^TestLoadLexicon$
go: go.mod file not found in current directory or any parent directory; see 'go help modules'
> Test run finished at 29/08/2022, 02:58:53 <
`
答案1
得分: 2
你需要在项目的根目录中添加一个 go.mod 文件来管理依赖项。
使用模块来管理依赖项。官方文档:https://go.dev/blog/using-go-modules
示例:
go mod init 项目名称
go mod init example.com/项目名称
go mod init github.com/你的用户名/项目名称
在运行上述命令之后,你可能需要使用 tidy 命令进行清理。
go mod tidy
在导入包到你的 Go 文件时,请使用上述路径格式。
示例:
import (
// 这样导入内部和外部包
"github.com/你的用户名/项目名称/包名"
// 正常方式导入标准库包
"testing"
"math/rand"
)
英文:
You need to add a go.mod file to your project's root directory.
Use modules to manage dependencies. Official docs: https://go.dev/blog/using-go-modules
Example:
go mod init project-name
go mod init example.com/project-name
go mod init github.com/you-user-name/project-name
You may need to use the tidy command to clean up after running one of the above commands.
go mod tidy
Use the path format from above when importing a package into your go file
Example:
import (
// Import internal and external packages like this
"github.com/you-user-name/project-name/package-name"
// Import standard library packages the normal way
"testing"
"math/rand"
)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论