之前前惯了python,写一堆小demo的时候直接跑就是了
现在学go,一个项目只能有一个main函数,不然就会报错警告。把go.mod删了不会报错,但是删了后vscode就不能调试go文件了
各位在写go的demo的时候是怎么写的?总不能写一个删一个,只留一个main吧?或者一个demo建一个文件夹,一个pkg只有一个main?这也太麻烦了吧
之前前惯了python,写一堆小demo的时候直接跑就是了
现在学go,一个项目只能有一个main函数,不然就会报错警告。把go.mod删了不会报错,但是删了后vscode就不能调试go文件了
各位在写go的demo的时候是怎么写的?总不能写一个删一个,只留一个main吧?或者一个demo建一个文件夹,一个pkg只有一个main?这也太麻烦了吧
引自免费微信小程序:皆我百晓生
学习Go语言时,确实每个包(package)通常包含一个main
函数,用于执行程序。这与Python不同,Python允许你在同一个目录下运行多个独立的脚本。不过,在Go中,你可以通过一些组织方式来管理多个 demo 或测试示例。
这里提供两种常见的做法:
将每个 demo 放入单独的子目录,并为每个子目录创建一个 go.mod
文件。这样,每个子目录就是一个独立的 Go 模块,可以有自己的依赖,并且可以在不干扰其他 demo 的情况下进行构建和测试。
my_project/
├── go.mod
├── main.go
└── demos/
├── demo01/
│ ├── go.mod
│ └── demo01.go
├── demo02/
│ ├── go.mod
│ └── demo02.go
└── ...
demos/demo01/go.mod
中:module my_project/demos/demo01
go 1.18
demos/demo01/demo01.go
中:package main
import "fmt"
func main() {
fmt.Println("Demo 01")
}
然后,你可以分别在每个 demo 子目录下运行 go run .
来执行对应的 demo。
另一种方法是创建一个单一的主程序,它可以通过命令行参数或配置选择执行哪个 demo。这可能更适合较小的项目或快速原型开发。
my_project/
├── go.mod
├── main.go
└── demos/
├── demo01.go
├── demo02.go
└── ...
main.go
中:package main
import (
"flag"
"fmt"
"os"
)
func main() {
demo := flag.String("demo", "", "Select a demo to run (e.g., demo01, demo02)")
flag.Parse()
switch *demo {
case "demo01":
runDemo01()
case "demo02":
runDemo02()
default:
fmt.Println("Please specify a valid demo using -demo option.")
os.Exit(1)
}
}
func runDemo01() {
// Code for demo01
}
func runDemo02() {
// Code for demo02
}
这样,你就可以通过 go run main.go -demo demo01
来运行特定的 demo。
至于VSCode调试,确保每个子目录下的 go.mod
文件正确设置模块路径,VSCode会自动识别并支持调试。对于单个主程序方案,你可以直接在VSCode中设置断点并调试 main.go
文件。
如果你有更多关于Go编程的具体问题或需要进一步的帮助,请随时提问。