配置文件内容:
[icp]
url=0.0.0.0:00
username=username
password=password
单元测试:
package tools
import "testing"
/*
* @author: SongJXin
* @author: 2018/10/10
* @description:
*/
func TestGetConfig_url(t *testing.T) {
url,err := GetConfig("url")
if err != nil{
t.Error("get url err: \n" + err.Error())
return
}
t.Log("url is " + url)
}
func TestGetConfig_username(t *testing.T) {
username,err := GetConfig("username")
if err != nil {
t.Error("get username err: " + err.Error())
return
}
t.Log("username is " + username)
}
func TestGetConfig_password(t *testing.T) {
password,err := GetConfig("password")
if err != nil {
t.Error("get password err:" + err.Error())
return
}
t.Log("password is " + password)
}
func TestGetConfig_none(t *testing.T) {
data,err := GetConfig("aaa")
if err != nil || data != "" {
t.Error("aaa data is " + data)
return
}
t.Log("can't read aaa")
}
实现代码:
package tools
import (
"github.com/Unknwon/goconfig"
"errors"
"os"
)
/*
* @author: SongJXin
* @author: 2018/10/10
* @description:
*/
func GetConfig(name string) (string,error) {
// 载入配置文件 通过绝对路径的方式获取。使main和单元测试都能正确运行
cfg, err := goconfig.LoadConfigFile(os.Getenv("GOPATH")+"\\src\\IcpUser\\config.ini")
if err != nil {
return "",errors.New("load config file err: \n" + err.Error())
}
// 获取某个值 第一个参数为哪个部分,第二个参数为要获取的属性的名称
value,err := cfg.GetValue("icp",name)
return value,nil
}
目录结构如下: