From c2ad9f5fb97db1d609a7bf60a13ce3847b31576e Mon Sep 17 00:00:00 2001 From: John Date: Tue, 17 Sep 2019 20:53:20 +0800 Subject: [PATCH] fix issue in gyaml for invalid decoding result of type map[interface{}]interface{} --- .example/encoding/gparser/config.yaml | 44 +++++++++++ .../encoding/gparser/gparser_yaml_issue336.go | 77 +++++++++++++++++++ encoding/gyaml/gyaml.go | 4 +- go.mod | 7 +- go.sum | 23 ++---- 5 files changed, 133 insertions(+), 22 deletions(-) create mode 100644 .example/encoding/gparser/config.yaml create mode 100644 .example/encoding/gparser/gparser_yaml_issue336.go diff --git a/.example/encoding/gparser/config.yaml b/.example/encoding/gparser/config.yaml new file mode 100644 index 000000000..7fe5f397a --- /dev/null +++ b/.example/encoding/gparser/config.yaml @@ -0,0 +1,44 @@ + +broker: + ip: "127.0.0.1" + tcpport: "4222" + httpport: "8222" + user: "alfxnats" + pwd: "alfxnats" + clusterid: "alfxnats" +database: + ip: "110.1.1.227" + port: "27017" + user: "alfxdev" + pwd: "alfxdev" + dbname: "alfxdev" +scheduler: + a2rparallel: 4 + sleeptime: 300 +worker: + name: "worker1" + domains: + officenet: 3 + producnet: 3 + free: 3 + temppath: "/home/alfx/proc" +common: + filepath: "/home/alfx/file" + logpath: "home/alfx/log" + logdebug: true + logtrace: true +report: + localip: "127.0.0.1" + localport: "" + + + + + + + + + + + + diff --git a/.example/encoding/gparser/gparser_yaml_issue336.go b/.example/encoding/gparser/gparser_yaml_issue336.go new file mode 100644 index 000000000..ee796d16d --- /dev/null +++ b/.example/encoding/gparser/gparser_yaml_issue336.go @@ -0,0 +1,77 @@ +package main + +import ( + "fmt" + + "github.com/gogf/gf/encoding/gparser" +) + +type Conf struct { + Broker Broker + Database Database + Scheduler Scheduler + Worker Worker + Common Common + Report Report +} + +type Broker struct { + Ip string + Tcport string + Httpport string + User string + Pwd string + Clusterid string +} + +type Database struct { + Ip string + Port string + User string + Pwd string + Dbname string +} + +type Scheduler struct { + SleepTime int + Pidfilepath string + A2rparallel int +} + +type Worker struct { + Name string + Domains map[string]interface{} + Temppath string + Pidfilepath string +} + +type Common struct { + Filepath string + Logpath string + Logdebug bool + Logtrace bool +} + +type Report struct { + Localip string + Localport string //暂不启用 +} + +func main() { + _, err := gparser.Load("config.yaml") + if err != nil { + fmt.Println("oops,read config.yaml err:", err) + } + + //fmt.Println("yaml.v3读取yaml文件") + //f, err := os.Open("config.yaml") + //if err != nil { + // panic(err) + //} + //var conf Conf + //err = yaml.NewDecoder(f).Decode(&conf) + //if err != nil { + // panic(err) + //} + //fmt.Println(conf) +} diff --git a/encoding/gyaml/gyaml.go b/encoding/gyaml/gyaml.go index 7abd614f8..577b6690d 100644 --- a/encoding/gyaml/gyaml.go +++ b/encoding/gyaml/gyaml.go @@ -12,7 +12,7 @@ import ( "github.com/gogf/gf/util/gconv" - yaml3 "gopkg.in/yaml.v3" + yaml3 "github.com/gf-third/yaml/v3" ) func Encode(v interface{}) ([]byte, error) { @@ -24,7 +24,7 @@ func Decode(v []byte) (interface{}, error) { if err := yaml3.Unmarshal(v, &result); err != nil { return nil, err } - return gconv.Map(result), nil + return gconv.MapDeep(result), nil } func DecodeTo(v []byte, result interface{}) error { diff --git a/go.mod b/go.mod index 38228b5f5..5c5d25b54 100644 --- a/go.mod +++ b/go.mod @@ -6,15 +6,16 @@ require ( github.com/fatih/structs v1.1.0 github.com/fsnotify/fsnotify v1.4.7 github.com/gf-third/mysql v1.4.2 + github.com/gf-third/yaml/v3 v3.0.0 github.com/gofrs/flock v0.7.1 // indirect github.com/gomodule/redigo v2.0.0+incompatible github.com/gorilla/websocket v1.4.1 - github.com/grokify/html-strip-tags-go v0.0.0-20190424092004-025bd760b278 + github.com/grokify/html-strip-tags-go v0.0.0-20190916062342-6f856a90d556 github.com/mattn/go-runewidth v0.0.4 // indirect github.com/olekukonko/tablewriter v0.0.1 github.com/theckman/go-flock v0.7.1 - golang.org/x/sys v0.0.0-20190910064555-bbd175535a8b // indirect + golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3 // indirect golang.org/x/text v0.3.2 google.golang.org/appengine v1.6.2 // indirect - gopkg.in/yaml.v3 v3.0.0-20190905181640-827449938966 + gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 // indirect ) diff --git a/go.sum b/go.sum index 90f5343ea..6219984df 100644 --- a/go.sum +++ b/go.sum @@ -6,44 +6,33 @@ github.com/fatih/structs v1.1.0 h1:Q7juDM0QtcnhCpeyLGQKyg4TOIghuNXrkL32pHAUMxo= github.com/fatih/structs v1.1.0/go.mod h1:9NiDSp5zOcgEDl+j00MP/WkGVPOlPRLejGD8Ga6PJ7M= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/gf-third/mysql v1.4.2 h1:f1M5CNFUG3WkE07UOomtu4o0n/KJKeuUUf5Nc9ZFXs4= github.com/gf-third/mysql v1.4.2/go.mod h1:+dd90V663ppI2fV5uQ6+rHk0u8KCyU6FkG8Um8Cx3ms= -github.com/gofrs/flock v0.7.1 h1:DP+LD/t0njgoPBvT5MJLeliUIVQR03hiKR6vezdwHlc= +github.com/gf-third/yaml/v3 v3.0.0 h1:IMLH3JWFpNraTz5d6jzaNZFvWaVYAwhP9w1lhk9SFUs= +github.com/gf-third/yaml/v3 v3.0.0/go.mod h1:En6jd9ZtAhuCiVfRnTo8NYVgbiZvg/F26r8Tj+vsUy4= github.com/gofrs/flock v0.7.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= -github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/gomodule/redigo v2.0.0+incompatible h1:K/R+8tc58AaqLkqG2Ol3Qk+DR/TlNuhuh457pBFPtt0= github.com/gomodule/redigo v2.0.0+incompatible/go.mod h1:B4C85qUVwatsJoIUNIfCRsp7qO0iAmpGFZ4EELWSbC4= -github.com/gorilla/websocket v1.4.1 h1:q7AeDBpnBk8AogcD4DSag/Ukw/KV+YhzLj2bP5HvKCM= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/grokify/html-strip-tags-go v0.0.0-20190424092004-025bd760b278 h1:DZo48DQFIDo/YWjUeFip1dfJztBhRuaxfUnPd+gAfcs= -github.com/grokify/html-strip-tags-go v0.0.0-20190424092004-025bd760b278/go.mod h1:Xk7G0nwBiIloTMbLddk4WWJOqi4i/JLhadLd0HUXO30= -github.com/mattn/go-runewidth v0.0.4 h1:2BvfKmzob6Bmd4YsL0zygOqfdFnK7GR4QL06Do4/p7Y= +github.com/grokify/html-strip-tags-go v0.0.0-20190916062342-6f856a90d556/go.mod h1:Xk7G0nwBiIloTMbLddk4WWJOqi4i/JLhadLd0HUXO30= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/olekukonko/tablewriter v0.0.1 h1:b3iUnf1v+ppJiOfNX4yxxqfWKMQPZR5yoh8urCTFX88= github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/theckman/go-flock v0.7.1 h1:YdJyIjDuQdEU7voZ9YaeXSO4OnrxdI+WejPUwyZ/Txs= github.com/theckman/go-flock v0.7.1/go.mod h1:kjuth3y9VJ2aNlkNEO99G/8lp9fMIKaGyBmh84IBheM= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65 h1:+rhAzEzT3f4JtomfC371qB+0Ola2caSKcY69NUBZrRQ= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190910064555-bbd175535a8b h1:3S2h5FadpNr0zUUCVZjlKIEYF+KaX/OBplTGo89CYHI= -golang.org/x/sys v0.0.0-20190910064555-bbd175535a8b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3 h1:7TYNF4UdlohbFwpNH04CoPMp1cHUZgO1Ebq5r2hIjfo= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -google.golang.org/appengine v1.6.2 h1:j8RI1yW0SkI+paT6uGwMlrMI/6zwYA6/CFil8rxOzGI= google.golang.org/appengine v1.6.2/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/yaml.v3 v3.0.0-20190905181640-827449938966 h1:B0J02caTR6tpSJozBJyiAzT6CtBzjclw4pgm9gg8Ys0= -gopkg.in/yaml.v3 v3.0.0-20190905181640-827449938966/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=