我是 golang 开发的新手,对与此问题相关的事情有一些疑问。
作为学习练习,我正在尝试创建一个简单的库来处理基于 json 的配置文件。作为用于多个应用程序的配置文件,它应该能够处理不同的参数。然后我创建了一个具有文件名和数据接口的类型结构配置。每个应用程序都有一个基于其配置需求的结构。
在下面的代码中,我将所有内容(lib 和“主代码”)放在一起,“TestData 结构”是“应用程序参数”。如果它不存在,它将设置一个默认值并创建文件,并且它正在工作。但是当我尝试读取文件时。我尝试解码json并将其放回数据接口。但它给了我一个错误,我不知道如何解决这个问题。有人可以帮忙吗?
[更新] 我之前没有放置目标代码,因为我认为将所有内容作为单个程序阅读会更容易。Bellow 是用于更好地查看问题的“目标代码”。由于我将无法在库中使用 TestData 结构,因为它会因程序而异,因此处理此问题的唯一方法是使用接口。有没有更好的办法?
库配置
package config
import (
"encoding/json"
"fmt"
"os"
)
// Base configuration struct
type Configuration struct {
Filename string
Data interface{}
}
func (c *Configuration) Create(cData *Configuration) bool {
cFile, err := os.Open(cData.Filename)
defer cFile.Close()
if err == nil {
fmt.Println("Error(1) trying to create a configuration file. File '", cData.Filename, "' may already exist...")
return false
}
cFile, err = os.Create(cData.Filename)
if err != nil {
fmt.Println("Error(2) trying to create a configuration file. File '", cData.Filename, "' may already exist...")
return false
}
buffer, _ := json.MarshalIndent(cData.Data, "", "")
cFile.Write(buffer)
return true
}
func (c *Configuration) Read(cData *Configuration) bool {
cFile, err := os.Open(cData.Filename)
defer cFile.Close()
if err != nil {
fmt.Println("Error(1) trying to read a configuration file. File '", cData.Filename, "' may not already exist...")
return false
}
jConfig := json.NewDecoder(cFile)
jerr := jConfig.Decode(&cData.Data)
if jerr != nil {
panic(jerr)
}
return true
}
使用库配置的程序
package main
import (
"fmt"
"./config"
)
// struct basic para configuração
type TestData struct {
URL string
Port string
}
HUX布斯
大话西游666
相关分类