返回结构参考

问题描述 投票:0回答:1

我知道很多人已经问过这个问题,我研究并尝试过,但我不明白,首先这是我的功能:

func Config() *config {
    configfile := viper.New()
    configfile.SetConfigFile("config.toml")
    configfile.ReadInConfig()
    type configstruct struct {
        first_launch             bool
        generate_desktop_file    bool
        systemwide_desktop_entry bool
        webapps_directory        string
        locale                   string
    }
    config := configstruct{
        first_launch:             configfile.GetBool("general.first_launch"),
        generate_desktop_file:    configfile.GetBool("general.generate_desktop_file"),
        systemwide_desktop_entry: configfile.GetBool("general.systemwide_desktop_entry"),
        webapps_directory:        configfile.GetString("general.webapps_directory"),
        locale:                   configfile.GetString("general.locale")}
    fmt.Println(reflect.TypeOf(config))
    return &config
}

我尝试让它以这种方式工作,就像很多人写的那样,但后来我在

func Config() *config
行得到了这个错误。这是错误:
undefined: config
。显然我做错了什么,但我不知道我做错了什么。旁注,我对 Go 完全陌生,之前我只使用 Python

我尝试将 *config 添加到 func 中,并在 func 内部添加了一个 return &config,我期望它将返回一个我可以使用的指针,但我收到错误:

undefinied config

go structure
1个回答
0
投票

您应该从函数中返回

*configstruct
。在函数外部定义结构始终是一个好主意,否则它会绑定在
function
范围内,请参阅下面更新的代码。

type configstruct struct {
            first_launch             bool
            generate_desktop_file    bool
            systemwide_desktop_entry bool
            webapps_directory        string
            locale                   string
        }
    
    func Config() *configstruct {
        configfile := viper.New()
        configfile.SetConfigFile("config.toml")
        configfile.ReadInConfig()
        
        config := configstruct{
            first_launch:             configfile.GetBool("general.first_launch"),
            generate_desktop_file:    configfile.GetBool("general.generate_desktop_file"),
            systemwide_desktop_entry: configfile.GetBool("general.systemwide_desktop_entry"),
            webapps_directory:        configfile.GetString("general.webapps_directory"),
            locale:                   configfile.GetString("general.locale")}
        fmt.Println(reflect.TypeOf(config))
        return &config
    }
© www.soinside.com 2019 - 2024. All rights reserved.