为了账号安全,请及时绑定邮箱和手机立即绑定

传递结构.

传递结构.

Go
慕沐林林 2021-12-07 18:51:49
我是 Ruby 背景的新手。我试图在没有类的世界中理解代码结构,并且可能犯了一个错误,希望在 Go 中以“Ruby 方式”进行。我正在尝试重构我的代码以使其更具模块化/可读性,因此我将配置文件的加载移动到了它自己的包中。好主意?package configurationimport "github.com/BurntSushi/toml"type Config struct {    Temperatures []struct {        Degrees int        Units string    }}func Load() Config {    var cnf Config    _, err := toml.DecodeFile("config", &cnf)    if err != nil {        panic(err)    }    return cnf}现在,在我的主包中:package mainimport "./configuration"var conf Configuration = configuration.Load()给undefined: Config。我明白为什么。我可以复制主包中的结构定义,但这不是很 DRY。我的理解是,像这样传递结构体是一种不好的做法,因为它会使您的代码更难理解(现在每个人都需要了解我的 Config 结构体)。在 Go 中像我试图在这里做的那样将逻辑隐藏在包中是一个好主意吗?如果是这样,传递这个 Config 结构的“Go”方式是什么?
查看完整描述

3 回答

?
富国沪深

TA贡献1790条经验 获得超9个赞

在您的主包中,您应该指定

var conf configuration.Config = configuration.Load()

configuration指的是您导入的包,并且Config是从该包中导出的结构(大写名称)。但是你也可以省略这个,因为可以推断类型

var conf = configuration.Load()

作为旁注:请不要使用相对导入


查看完整回答
反对 回复 2021-12-07
?
达令说

TA贡献1821条经验 获得超6个赞

在 Go 导入中你总是声明你包的完整路径,不要在导入中使用相对路径,最好的例子是import "github.com/BurntSushi/toml"存在于以下位置的toml 导入:GOPATH/src/github.com/BurntSushi/toml GOPATH/pkg/_/github.com /BurntSushi/toml


然后构建你的包和 main.go


package main


import "mypackage/configuration"


func main() {

   // configuration contain all funcs & structs 

   var conf configuration.Config = configuration.Load()

}

去它不是红宝石。


参考包:https : //golang.org/doc/code.html


查看完整回答
反对 回复 2021-12-07
?
白衣染霜花

TA贡献1796条经验 获得超10个赞

为什么不直接导入配置包,然后做 Go 的变量声明/实例化快捷方式呢?也许我错过了一些东西。


package main


import "mypackage/configuration"


func main() {

   conf := configuration.Load()

}


查看完整回答
反对 回复 2021-12-07
  • 3 回答
  • 0 关注
  • 173 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信