6 Commits

3 changed files with 22 additions and 6 deletions

10
.drone.yml Normal file
View File

@ -0,0 +1,10 @@
kind: pipeline
type: docker
name: default
steps:
- name: build
pull: if-not-exists
image: golang
commands:
- go build goini.go

View File

@ -1,4 +1,4 @@
# GoINI
# GoINI[![PkgGoDev](https://pkg.go.dev/badge/github.com/xiaoqidun/goini)](https://pkg.go.dev/github.com/xiaoqidun/goini)
简单易用的Golang INI配置解析库
# 安装方法
go get -u github.com/xiaoqidun/goini

View File

@ -12,6 +12,7 @@ import (
// GoINI GoINI数据结构
type GoINI struct {
tag string
data []byte
dataMap map[string]map[string]string
nameList []string
@ -22,6 +23,7 @@ type GoINI struct {
// NewGoINI 获取GoINI对象
func NewGoINI() *GoINI {
return &GoINI{
tag: "goini",
commonField: "BuiltCommon",
}
}
@ -120,6 +122,11 @@ func (ini *GoINI) String() string {
return strings.Join(iniLines, "\n")
}
// SetTag 设置结构体的tag键名称
func (ini *GoINI) SetTag(tag string) {
ini.tag = tag
}
// SetData 从代码读取配置并解析
func (ini *GoINI) SetData(fileData []byte) {
ini.data = bytes.TrimSpace(fileData)
@ -225,15 +232,14 @@ func (ini *GoINI) MapToStruct(ptr interface{}) (err error) {
if t.Kind() != reflect.Ptr {
err = errors.New("input struct ptr")
return
} else {
t = t.Elem()
v = v.Elem()
}
t = t.Elem()
v = v.Elem()
for i := 0; i < t.NumField(); i++ {
if !v.CanInterface() {
continue
}
k := t.Field(i).Tag.Get("goini")
k := t.Field(i).Tag.Get(ini.tag)
if k == "" {
k = t.Field(i).Name
}
@ -245,7 +251,7 @@ func (ini *GoINI) MapToStruct(ptr interface{}) (err error) {
if !v.CanInterface() {
continue
}
kk := tt.Field(ii).Tag.Get("goini")
kk := tt.Field(ii).Tag.Get(ini.tag)
if kk == "" {
kk = t.Field(ii).Name
}