首先介绍使用yaml配置文件,这里使用的是github上第三方开源gopkg.in/yaml.v2
第一步:下载
go get gopkg.in/yaml.v21
第二步:新建一个yaml文件,比如conf.yaml
host: localhost:3306
user: tigerwolfc
pwd: 654321
dbname: tablename
特别需要强调的是冒号后面必须有一个空格,以user: tigerwolfc为例,
user: tigerwolfc//冒号后面有空格
第三步:在程序中使用配置文件获取参数,比如main.go
package main
import (
"io/ioutil"
"gopkg.in/yaml.v2"
"fmt"
)
func main() {
var c conf
conf:=c.getConf()
fmt.Println(conf.Host)
}
//profile variables
type conf struct {
Host string `yaml:"host"`
User string `yaml:"user"`
Pwd string `yaml:"pwd"`
Dbname string `yaml:"dbname"`
}
func (c *conf) getConf() *conf {
yamlFile, err := ioutil.ReadFile("conf.yaml")
if err != nil {
fmt.Println(err.Error())
}
err = yaml.Unmarshal(yamlFile, c)
if err != nil {
fmt.Println(err.Error())
}
return c
}
运行main.go,就可以打印出配置文件中user的值tigerwolfc
TOML 的目标是成为一个极简的配置文件格式。TOML 被设计成可以无歧义地被映射为哈希表,从而被多种语言解析。需要使用第三方库https://github.com/BurntSushi/toml
第一步:下载
go get github.com/BurntSushi/toml
第二部:新建一个toml文件,比如conf.toml
# id
ID = 3
# name
Name = "TigerwolfC"
# weight
Weight = 58
# books
Books = ["Golang", "C++", "Python"]
Sex = true
#friend Friend都可以
[friend]
Age = 28
Name = "chen_peggy"
细节点:
package main
import (
"fmt"
"github.com/BurntSushi/toml"
"log"
)
//Person
type Person struct {
ID uint32
Sex bool
Name string
Weight float32
Friend *Friends
Books []string
}
// friends
type Friends struct {
Age int
Name string
}
func test_toml() {
var cp Person
var path string = "./conf.toml"
if _, err := toml.DecodeFile(path, &cp); err != nil {
log.Fatal(err)
}
fmt.Printf("%v %v\n", cp.Name, cp.Friend.Name)
}
func main() {
test_toml()
}
/*
result:
TigerwolfC chen_peggy
*/
---------------------
JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
新建一个文件名为conf.json,键入内容:
{
"enabled": true,
"path": "/usr/local"
}
新建main.go,键入内容:
package main
import (
"encoding/json"
"fmt"
"os"
)
type configuration struct {
Enabled bool
Path string
}
func main() {
file, _ := os.Open("conf.json")
defer file.Close()
decoder := json.NewDecoder(file)
conf := configuration{}
err := decoder.Decode(&conf)
if err != nil {
fmt.Println("Error:", err)
}
fmt.Println(conf.Path)
}
true
/usr/local
新建main.go,键入内容:
package main
import (
"encoding/xml"
"fmt"
"os"
)
type configuration struct {
Enabled bool `xml:"enabled"`
Path string `xml:"path"`
}
func main() {
xmlFile, err := os.Open("conf.xml")
if err != nil {
fmt.Println("Error opening file:", err)
return
}
defer xmlFile.Close()
var conf configuration
if err := xml.NewDecoder(xmlFile).Decode(&conf); err != nil {
fmt.Println("Error Decode file:", err)
return
}
fmt.Println(conf.Enabled)
fmt.Println(conf.Path)
}
; A comment line
[Section]
enabled = true
path = /usr/local # another comment
使用第三方库:
go get gopkg.in/gcfg.v1
新建main.go,键入代码:
package main
import (
"fmt"
"gopkg.in/gcfg.v1"
)
func main() {
config := struct {
Section struct {
Enabled bool
Path string
}
}{}
err := gcfg.ReadFileInto(&config, "conf.ini")
if err != nil {
fmt.Println("Failed to parse config file: %s", err)
}
fmt.Println(config.Section.Enabled)
fmt.Println(config.Section.Path)
}
输出:
true
/usr/local
如有不对欢迎指正,相互学习,共同进步。