无法解码 toml 文件

Unable to decode toml file

我想从 toml 文件中读取配置。

conf/conf.toml

db_host = "127.0.0.1"

db_port = 3306

db_user = "root"

db_password ="123456"

conf/conf.go file

package conf

import (
    "log"
    "github.com/BurntSushi/toml"
)

type appcfg struct {
    DbHost     string `toml:"db_host"`
    DbPort     string `toml:"db_port"`
    DbUser     string `toml:"db_user"`
    DbPassword string `toml:"db_password"`
}

var (
    App       *appcfg
    defConfig = "./conf/conf.toml"
)

func init() {

    var err error
    App, err = initCfg()
    log.Println(App.DbHost)

}

func initCfg() (*appcfg, error) {
    app := &appcfg{}
    _, err := toml.DecodeFile(defConfig, &app)
    if err != nil {
        return nil, err
    }
    return app, nil
}

当我 运行 这个程序时,我收到一个我不知道如何修复的错误:

panic: runtime error: invalid memory address or nil pointer dereference

(重新发布 Comin2021 现已删除的英文答案,因为它已被 OP 接受)

您将 DbPort 的类型定义为 string,但它在您的配置文件中显示为整数。更改如下:

type appcfg struct {
    DbHost     string `toml:"db_host"`
    DbPort     int64  `toml:"db_port"`  // change this
    DbUser     string `toml:"db_user"`
    DbPassword string `toml:"db_password"`
}

还要检查 initCfg 第二个 return 值 err 是否为空并记录它。