新手,用一个月左右看了看语法 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 任意一个有问题就整个退出呢
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.