新手项目组织的疑惑

2022-05-30 09:54:26 +08:00
 dzdh

新手,用一个月左右看了看语法 demo 啥的各种小 demo 看了看觉得自己行了。

然后想写个项目( ssh 跳板机)练练手,在项目组织上又迷糊了,现在这么组织的

├── go.mod
├── go.sum
├── internal
│   ├── admin
│   │   ├── resources
│   │   │   └── assets
│   │   │       └── FS.go  < FS=embed *.js *.css **/*.js **/*.css
│   │   └── server.go
│   ├── bootstrap.go
│   ├── config
│   │   └── config.go
│   ├── model
│   │   ├── init.go
│   │   └── models.go
│   └── ssh
│       ├── clients.go
│       ├── error.go
│       ├── forward.go
│       ├── handler.go
│       └── server.go
├── main.go

想实现 在 main.go里 调用 bootstrap.setupadmin() bootstrap.setupsshserver() 同时也是为了方便的以后能把 admin 和 sshserver 分离开。

那我在什么时候初始化数据库连接呢?放在 model.init 里? init 方法的话,我在哪传入配置信息呢?(数据库地址啊、密码啊啥的)。现在是 model.init.go 里是 Initialize(cfg *internal.Config.Global)

所以完整的 main.go 是这样的

func main() {
    cfgfilepath = // parseflag
    
    if cfg, err = ioutil.ReadAll(cfgfilepath) err!=nil {panic
    config.Global.LoadConfig(cfg)
    
    model.Initialize(config.Global)
    
    // 支持信号退出用
    context = context.withcancel(...
    
    // 这两个里是 go func..
    model.SetupAdmin(config.Global, context)
    model.SetupSSHServer(config.Global, context)
    
    <- 等待信号
}

这样组织代码有问题吗?怎么做能让 admin 和 sshserver 两个 net.Listen 任意一个有问题就整个退出呢

3561 次点击
所在节点    Go 编程语言
25 条回复
Biwood
2022-05-30 19:30:19 +08:00
个人非常讨厌过多的文件夹嵌套,超过三层的文件夹我基本就要疯了,最好是文件夹都在顶层,实在不得已再开第二层,Go 语言的哲学就是简单直接、灵活、可扩展,千万别过度设计
Macolor21
2022-05-30 22:53:34 +08:00
@zackkson1991 #17 https://www.v2ex.com/t/851925 这可不是我说的
lesismal
2022-05-31 09:51:40 +08:00
对于应用服务,internal 可能不是好点子,一旦多个仓库想共用,没法 import 它
LoNeFong
2022-05-31 10:17:42 +08:00
工程化实践可以参考一下 bilibili 毛剑的课
ShiJh
2022-05-31 13:19:15 +08:00
go clean template GitHub 上面的了解一下

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/856138

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX