Go 传递结构
我是新手,来自红宝石背景。我试图理解在一个没有类的世界中的代码结构,并且可能犯了一个错误,我想用Go中的“Ruby方式”来实现它 我试图重构我的代码,使其更加模块化/可读,因此我将配置文件的加载移到了它自己的包中。好主意Go 传递结构,go,struct,Go,Struct,我是新手,来自红宝石背景。我试图理解在一个没有类的世界中的代码结构,并且可能犯了一个错误,我想用Go中的“Ruby方式”来实现它 我试图重构我的代码,使其更加模块化/可读,因此我将配置文件的加载移到了它自己的包中。好主意 package configuration import "github.com/BurntSushi/toml" type Config struct { Temperatures []struct { Degrees int Un
package configuration
import "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 main
import "./configuration"
var conf Configuration = configuration.Load()
给出未定义:Config
。我明白为什么。我可以复制主包中的结构定义,但这不是很枯燥
我的理解是,像这样传递结构是一种不好的做法,因为它使代码更难理解(现在每个人都需要知道我的配置结构)
将逻辑隐藏在一个包中,就像我在这里尝试做的那样,这是一个好主意吗?如果是这样,传递这个配置结构的“Go”方式是什么?在主包中,您应该指定
var conf configuration.Config = configuration.Load()
configuration
指导入的包,Config
指从该包导出的结构(大写名称)。但是您也可以忽略这一点,因为可以推断类型
var conf = configuration.Load()
作为旁注:请不要在您应该指定的主程序包中使用相对导入
var conf configuration.Config = configuration.Load()
configuration
指导入的包,Config
指从该包导出的结构(大写名称)。但是您也可以忽略这一点,因为可以推断类型
var conf = configuration.Load()
作为旁注:请不要在Go导入中使用相对导入,因为您总是声明包的完整路径,不要在导入中使用相对路径,最好的例子是toml import
import“github.com/burntushi/toml”
,存在于:
GOPATH/src/github.com/BurntSushi/toml
GOPATH/pkg/551;/github.com/BurntSushi/toml
然后构建包并main.go
package main
import "mypackage/configuration"
func main() {
// configuration contain all funcs & structs
var conf configuration.Config = configuration.Load()
}
去吧,那不是鲁比
Ref Packages:在Go导入中,您始终声明包的完整路径,不要在导入中使用相对路径,最好的示例是toml import
import“github.com/BurntSushi/toml”
存在于:
GOPATH/src/github.com/BurntSushi/toml
GOPATH/pkg/551;/github.com/BurntSushi/toml
然后构建包并main.go
package main
import "mypackage/configuration"
func main() {
// configuration contain all funcs & structs
var conf configuration.Config = configuration.Load()
}
去吧,那不是鲁比
Ref Packages:为什么不导入配置包,然后执行Go的变量声明/安装快捷方式?也许我错过了什么
package main
import "mypackage/configuration"
func main() {
conf := configuration.Load()
}
为什么不导入配置包,然后执行Go的变量声明/安装快捷方式?也许我错过了什么
package main
import "mypackage/configuration"
func main() {
conf := configuration.Load()
}
首先,如果导出结构,则不需要在包之间复制结构。我想你的意思是使用
configuration.Config
?此外,除了快速测试外,不要使用相对导入。始终使用完整的导入路径。请参阅“如何编写Go代码”以获取有关的教程。@MuffinTop谢谢,这是一个很棒的资源!首先,如果导出结构,则不需要在包之间复制结构。我想你的意思是使用configuration.Config
?此外,除了快速测试外,不要使用相对导入。始终使用完整的导入路径。请参阅“如何编写Go代码”以获取有关的教程。@MuffinTop谢谢,这是一个很棒的资源!快捷方式对我不起作用,因为我想在所有不同的函数中使用我的conf
var,所以我在主函数之外声明它。但我明白你在解释什么。谢谢。这个快捷方式不适合我,因为我想在所有不同的函数中使用我的conf
var,所以我在主函数之外声明它。但我明白你在解释什么。谢谢