我在filLib.go中使用了以下代码:
func LoadConfiguration(filename string) (Configuration, error) {
bytes, err := ioutil.ReadFile(filename)
if err != nil {
return Configuration{}, err
}
var c Configuration
err = json.Unmarshal(bytes, &c)
if err != nil {
return Configuration{}, err
}
return c, nil
}
但是ioutil.ReadFile(filename)返回* os.PathError。
文件config.json和filLib.go都在同一个文件夹中。
答案 0 :(得分:4)
*.go
文件的路径与正在执行的编译代码的工作目录没有直接关系。验证代码的实际位置(与您认为应该的位置相比)。
import(
"os"
"fmt"
"log"
)
func main() {
dir, err := os.Getwd()
if err != nil {
log.Fatal(err)
}
fmt.Println(dir)
}
答案 1 :(得分:0)
问题可能在于您提供的文件名。下面是适用于我的代码示例。
func loadConfig() {
var AppConfig Conf
raw, err := ioutil.ReadFile("conf/conf.json")
if err != nil {
log.Println("Error occured while reading config")
return
}
json.Unmarshal(raw, &AppConfig)
}
答案 2 :(得分:0)
我找到了这个图书馆enter link description here
这是一个非常简单易用的配置库,允许Go应用程序使用基于Json的配置文件。配置提供程序从config.json文件读取配置数据。您可以获取配置的字符串值,或通过相关的节名称约定参数将接口绑定到有效的JSON节。 考虑以下config.json文件:
{
"ConnectionStrings": {
"DbConnection": "Server=.;User Id=app;Password=123;Database=Db",
"LogDbConnection": "Server=.;User Id=app;Password=123;Database=Log"
},
"Caching": {
"ApplicationKey": "key",
"Host": "127.0.01"
},
"Website": {
"ActivityLogEnable": "true",
"ErrorMessages": {
"InvalidTelephoneNumber": "Invalid Telephone Number",
"RequestNotFound": "Request Not Found",
"InvalidConfirmationCode": "Invalid Confirmation Code"
}
},
"Services": {
"List": [
{
"Id": 1,
"Name": "Service1"
},
{
"Id": 2,
"Name": "Service2"
},
{
"Id": 3,
"Name": "Service3"
}
]
}
}
以下代码显示了如何访问某些上述配置设置。您可以通过GetSection函数获取配置值,方法是将Json节指定为字符串参数,并以“:”分隔
c, err := jsonconfig.GetSection("ConnectionStrings:DbConnection")
任何有效的Json是有效的配置类型。您还可以通过jsonconfig绑定结构。例如,可以将缓存配置绑定到有效的结构:
type Caching struct {
ApplicationKey string
Host string
}
var c缓存 err = jsonconfig.Bind(&c,“缓存”)