在函数中返回struct的值,并在另一个包中使用它

时间:2018-08-14 10:20:33

标签: go struct

我尝试在示例项目中创建程序包配置,但某些功能无法正常运行,我具有文件夹结构:

config/config.go // package config
main.go  // package main

并且我想在主文件中使用配置:

func main() {
    conf := config.GetConf()

    db := dbConn{
        schemas:  map[string]*sql.DB{},
        url:      fmt.Sprintf("tcp(%s)", conf.db['dev']),
        username: db.user,
        password: db.password,
    }
    db.create()
}

我的配置文件:

type Config struct {
    db         map[string]string
    user     string
    password string
}

func GetConf() *Config {
    config := Config{
        db: map[string]string{
            "dev": "database.url",
        },
        user: "root",
        password: "pass",
    }

    return &config
}

编译器返回错误:conf.db未定义(无法引用未导出的字段或方法db)

1 个答案:

答案 0 :(得分:3)

引用其他程序包(声明包除外)中未导出的标识符是编译时错误。

导出标识符(以大写字母开头),它将起作用。

type Config struct {
    DB       map[string]string
    User     string
    Password string
}

func GetConf() *Config {
    config := Config{
        DB: map[string]string{
            "dev": "database.url",
        },
        User:     "root",
        Password: "pass",
    }

    return &config
}

在您的主要帐户中:

func main() {
    conf := config.GetConf()

    db := dbConn{
        schemas:  map[string]*sql.DB{},
        url:      fmt.Sprintf("tcp(%s)", conf.DB['dev']),
        username: conf.User,
        password: conf.Password,
    }
    db.create()
}