config.ini configuration file
[server]
ip=10.238.2.2
port = 8080
[mysql]
username=root
passwd = root
database = test
host=192.168.1.1
port=3066
ini_config_test.go configuration file structure
package iniconfig
import (
"os"
"testing"
)
type Config struct {
ServerConf ServerConfig `ini:"server"`
MysqlConf MysqlConfig `ini:"mysql"`
}
type ServerConfig struct {
IP string `ini:"ip"`
Port int `ini:"port"`
}
type MysqlConfig struct {
Username string `ini:"username"`
Passwd string `ini:"passwd"`
Database string `ini:"database"`
Host string `ini:"host"`
Port int `ini:"port"`
}
func TestIniConfig(t *testing.T) {
data, err := os.ReadFile("./config.ini")
if err != nil {
t.Error("read file failed")
}
var conf Config
err = UnMarshal(data, &conf)
if err != nil {
t.Errorf("unmarshal failed,err:%v", err)
}
t.Logf("unmarshal success,conf====:%#v", conf)
}
Unit test print initialized structure
PS D:\TEXT\gotest\iniconfig> go test -v
=== RUN TestIniConfig
ini_config_test.go:47: unmarshal success,conf====:
iniconfig包名,Config配置文件结构体名称。
iniconfig.Config{
ServerConf结构体字段,iniconfig包名ServerConfig结构体
ServerConf:iniconfig.ServerConfig{IP:"", Port:0},
MysqlConf:iniconfig.MysqlConfig{Username:"", Passwd:"", Database:"", Host:"", Port:0}
}
--- PASS: TestIniConfig (0.00s)
PASS
ok gotest/iniconfig 0.184s
PS D:\TEXT\gotest\iniconfig>
ini_config.go get data and structure
package iniconfig
import (
"errors"
"reflect"
)
func UnMarshal(data []byte, result interface{
}) (err error) {
typeInfo := reflect.TypeOf(result)
if typeInfo.Kind() != reflect.Ptr {
err = errors.New("please pass address")
return
}
return
}