使用Golang和SQLite构建应用时遇到的代码运行错误
使用Golang和SQLite构建应用时遇到的代码运行错误 大家好, 我编程经验不多,但现在我想学好一门编程语言,最终选择了Go。在阅读了几本书并做了一些简单的代码测试后,我跟着一个更完整的教程,尝试编写第一个完整的程序。不幸的是,我几乎立刻就卡住了,因为运行程序的第一部分就出现了错误,我自己无法解决,所以向你们求助(抱歉英语不好)。这是代码的第一部分:
main.go
package main
import (
"log"
"github.com/dixonwille/wmenu/v5"
)
func main() {
menu := wmenu.NewMenu("What would you like to do?")
menu.Action(func(opts []wmenu.Opt) error { handleFunc(opts); return nil })
menu.Option("Add a new Person", 0, true, nil)
menu.Option("Find a Person", 1, false, nil)
menu.Option("Update a Person's information", 2, false, nil)
menu.Option("Delete a person by ID", 3, false, nil)
menuerr := menu.Run()
if menuerr != nil {
log.Fatal(menuerr)
}
}
错误信息:
go run main.go
main.go:5:2: cannot find package "github.com/dixonwille/wmenu/v5" in any of:
/home/linuxbrew/.linuxbrew/Cellar/go/1.19.2/libexec/src/github.com/dixonwille/wmenu/v5 (from $GOROOT)
/home/max/go/src/github.com/dixonwille/wmenu/v5 (from $GOPATH)
我哪里做错了?这个包已经安装了。 你们能帮帮我吗?
更多关于使用Golang和SQLite构建应用时遇到的代码运行错误的实战教程也可以访问 https://www.itying.com/category-94-b0.html
你需要导入 “fmt”。
更多关于使用Golang和SQLite构建应用时遇到的代码运行错误的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
好的,谢谢。
这是完整项目的 go.mod 文件。
module jeremymorgan.com/gosqlite
go 1.17
require (
github.com/daviddengcn/go-colortext v0.0.0-20180409174941-186a3d44e920 // indirect
github.com/dixonwille/wlog/v3 v3.0.1 // indirect
github.com/dixonwille/wmenu/v5 v5.1.0 // indirect
github.com/mattn/go-isatty v0.0.11 // indirect
github.com/mattn/go-sqlite3 v1.14.8 // indirect
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037 // indirect
)
我正在学习的项目教程可以在这里找到: allhandsontech.com/programming/golang/how-to-use-sqlite-with-go
感谢您的回答。
canuto:
然后我尝试执行命令“go mod init”,但遇到了这个错误:
go: cannot determine module path for source directory /home/max/go/SqliteTest/Test1-Sqlite (outside GOPATH, module path must be specified)
出现此错误是因为 go mod init 需要模块路径作为参数。
如果你重命名当前的 go.mod 文件并执行
go mod init jeremymorgan.com/gosqlite
你应该会得到一个与你手动创建的类似的 go.mod 文件。
canuto:
go run main.go:
./main.go:30:3: undefined: fmt
正如 @mje 已经写到的,你需要导入 fmt 包,它是标准库的一部分。
提示:一个支持 Go 的编辑器可以利用 Go 语言服务器,根据需要自动添加或移除标准库的导入。(只要编辑器能解析包路径,第三方包也可以。)因此,例如,当你输入 fmt.Println 时,编辑器会自动插入 import "fmt"。
感谢分享您的 go.mod 文件。它看起来没问题,只是我原本预期 wmenu 会是一个直接依赖项。
为了测试这个问题,我从您提到的 SQLite 教程中提取了前两个代码片段(这些片段足以让代码编译和运行),将它们放入一个 main.go 文件,并使用 go mod init 创建了一个 go.mod 文件。
然后我运行了 go mod tidy:
> go mod tidy 0s
go: downloading github.com/dixonwille/wmenu/v5 v5.1.0
go: downloading github.com/dixonwille/wlog/v3 v3.0.1
go: downloading github.com/mattn/go-isatty v0.0.11
go: downloading github.com/daviddengcn/go-colortext v0.0.0-20180409174941-186a3d44e920
go: downloading golang.org/x/sys v0.0.0-20191026070338-33540a1f6037
go: downloading github.com/stretchr/testify v1.4.0
go: downloading github.com/golangplus/testing v0.0.0-20180327235837-af21d9c3145e
go: downloading github.com/pmezard/go-difflib v1.0.0
go: downloading gopkg.in/yaml.v2 v2.2.2
go: downloading github.com/davecgh/go-spew v1.1.0
go run main.go 运行正常:
> go run main.go 0s
1) *Add a new Person
2) Find a Person
3) Update a Person's information
4) Delete a person by ID
What would you like to do?
1
Adding a new Person
问题:
- 您运行
go mod tidy的输出是什么? - 执行
go clean -modcache && go mod tidy是否有所改善? - 如果这没有帮助,
go build返回了什么?
首先,你需要初始化 Go 模块并下载依赖包。错误信息表明 Go 编译器无法在 GOROOT 或 GOPATH 中找到 github.com/dixonwille/wmenu/v5 包。这通常是因为没有使用 Go 模块管理依赖,或者依赖包没有正确下载。
解决方案:
-
初始化 Go 模块(如果尚未初始化): 在项目根目录下运行以下命令:
go mod init your-module-name例如:
go mod init myapp -
下载依赖包: 运行以下命令以下载所有依赖(包括
wmenu/v5):go mod tidy -
运行程序: 完成上述步骤后,再次运行程序:
go run main.go
完整示例:
假设你的项目结构如下:
myapp/
├── main.go
└── go.mod
go.mod 文件内容(由 go mod init 和 go mod tidy 自动生成):
module myapp
go 1.19
require github.com/dixonwille/wmenu/v5 v5.1.0
main.go 保持不变。如果 handleFunc 函数未定义,你需要先实现它。例如:
package main
import (
"log"
"github.com/dixonwille/wmenu/v5"
)
func handleFunc(opts []wmenu.Opt) {
// 处理菜单选项的代码
for _, opt := range opts {
switch opt.Value {
case 0:
log.Println("添加新人员")
case 1:
log.Println("查找人员")
case 2:
log.Println("更新人员信息")
case 3:
log.Println("按ID删除人员")
}
}
}
func main() {
menu := wmenu.NewMenu("What would you like to do?")
menu.Action(func(opts []wmenu.Opt) error { handleFunc(opts); return nil })
menu.Option("Add a new Person", 0, true, nil)
menu.Option("Find a Person", 1, false, nil)
menu.Option("Update a Person's information", 2, false, nil)
menu.Option("Delete a person by ID", 3, false, nil)
menuerr := menu.Run()
if menuerr != nil {
log.Fatal(menuerr)
}
}
运行程序后,菜单将正常显示。如果仍有问题,请检查网络连接或 Go 环境配置。

