竹一笔记 2024-05-07 17:04 采纳率: 40.9%
浏览 5

go语言初学者问题字数有10

img

之前前惯了python,写一堆小demo的时候直接跑就是了
现在学go,一个项目只能有一个main函数,不然就会报错警告。把go.mod删了不会报错,但是删了后vscode就不能调试go文件了

各位在写go的demo的时候是怎么写的?总不能写一个删一个,只留一个main吧?或者一个demo建一个文件夹,一个pkg只有一个main?这也太麻烦了吧

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-07 17:04
    关注

    引自免费微信小程序:皆我百晓生

    学习Go语言时,确实每个包(package)通常包含一个main函数,用于执行程序。这与Python不同,Python允许你在同一个目录下运行多个独立的脚本。不过,在Go中,你可以通过一些组织方式来管理多个 demo 或测试示例。

    这里提供两种常见的做法:

    1. 使用子目录和模块(modules)

    将每个 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。

    2. 单个主程序和可选的入口点

    另一种方法是创建一个单一的主程序,它可以通过命令行参数或配置选择执行哪个 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编程的具体问题或需要进一步的帮助,请随时提问。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月7日

悬赏问题

  • ¥66 关于川崎机器人调速问题
  • ¥15 winFrom界面无法打开
  • ¥15 crossover21 ARM64版本安装软件问题
  • ¥15 mymetaobjecthandler没有进入
  • ¥15 mmo能不能做客户端怪物
  • ¥15 osm下载到arcgis出错
  • ¥15 Dell g15 每次打开eiq portal后3分钟内自动退出
  • ¥200 使用python编写程序,采用socket方式获取网页实时刷新的数据,能定时print()出来就行。
  • ¥15 matlab如何根据图片中的公式绘制e和v的曲线图
  • ¥15 我想用Python(Django)+Vue搭建一个用户登录界面,但是在运行npm run serve时报错了如何解决?