debugging - Golang 调试器未运行
问题描述
我正在尝试使用 Go 设置 VS Code,并且在附加调试器时出现错误。由于我是 VS Code 的新手,所以我不知道为什么。
我已经安装了 delve 调试器:
go get -u github.com/derekparker/delve/cmd/dlv
delv -v
delv 9.11.3-1ubuntu1.1-Ubuntu
当我尝试将调试器附加到一个非常简单的 golang 文件时出现此错误:
API server listening at: 127.0.0.1:2345
time="2018-08-30T09:39:57-06:00" level=info msg="launching process with args: [/home/craig/Documents/GoLang/src/github.com/mornindew/sharedPackages/email/debug]" layer=debugger
Can not debug non-main package
Process exiting with code: 1
代码:
package email
import "fmt"
// SendEmail - Sends The email
func SendEmail() {
}
func main() {
fmt.Println("Hello World!")
i := 101
fmt.Println(i)
}
这一切都非常有帮助,非常感谢。
这让我觉得我的项目组织有问题。我有一个项目有一堆可重用的包。我不想为每个单独的包创建一个 github 存储库。本质上:
package1
-- package1.go
-- package1_test.go
package2
-- package2.go
-- package2_test.go
...
package10
-- package10.go
-- package10_test.go
这是结构不正确吗?有没有推荐的方法来完成这个?
解决方案
正如错误所暗示的那样,您只能调试一个main
包(一个名为 的包main
) - 具体来说,因为您只能运行一个main
包。在 Go 中,二进制文件的起点是在名为main()
的包中调用的函数main
。在您的代码中,您有一个名为 的函数main()
,但它位于一个名为 的包中email
,该包无法内置到程序中,因此无法调试。
Go 之旅的第一页对此进行了介绍:https ://tour.golang.org/basics/1
程序开始在 package 中运行
main
。
以及在规范中:https ://golang.org/ref/spec#Program_execution
一个完整的程序是通过将一个称为主包的单个未导入包与它导入的所有包传递链接来创建的。主包必须有包名
main
并声明一个main
不带参数且不返回值的函数。
推荐阅读
- vim - 执行“参数”\r(回车)不起作用
- jquery - jQuery 检查 CSS 类的高度是否小于 20%
- graphql - 如何从后端消息队列应用程序触发 GraphQL 订阅
- java - 使用 jGit 将文件推送到远程存储库
- javascript - 发布了一个 npm 包,但安装它只有基本文件
- c++ - 如何使用模板构造函数定义推导指南?
- node.js - React Native - 如何使两个设备在连接到同一网络时相互通信?
- php - 如何为我的联系表创建确认页面?
- ruby - ActiveRecord::StatementInvalid: 找不到表'users' Rails 5 教程
- python - 当我的玩家在pygame中碰撞时如何让我的玩家穿过敌人?