使用场景

    使用interface{}的场景,各种不固定数据类型格式,或者需要对变量进行频繁的数据类型转换的场景。

    接口文档

    https://godoc.org/github.com/gogf/gf/container/gvar

    1. package main
    2. import (
    3. "github.com/gogf/gf/frame/g"
    4. "fmt"
    5. )
    6. func main() {
    7. var v g.Var
    8. v.Set("123")
    9. fmt.Println(v.Val())
    10. // 基本类型转换
    11. fmt.Println(v.Int())
    12. fmt.Println(v.Uint())
    13. fmt.Println(v.Float64())
    14. // slice转换
    15. fmt.Println(v.Ints())
    16. fmt.Println(v.Floats())
    17. // struct转换
    18. type Score struct {
    19. Value int
    20. }
    21. s := new(Score)
    22. v.Struct(s)
    23. fmt.Println(s)
    24. }

    执行后,输出结果为:

    JSON序列化/反序列

    1. Marshal

      1. package main
      2. import (
      3. "encoding/json"
      4. "fmt"
      5. "github.com/gogf/gf/frame/g"
      6. )
      7. func main() {
      8. type Student struct {
      9. Id *g.Var
      10. Name *g.Var
      11. Scores *g.Var
      12. }
      13. Name: g.NewVar("john"),
      14. Scores: g.NewVar([]int{100, 99, 98}),
      15. }
      16. b, _ := json.Marshal(s)
      17. fmt.Println(string(b))
      18. }

      执行后,输出结果:

    2. Unmarshal

      1. package main
      2. import (
      3. "encoding/json"
      4. "fmt"
      5. "github.com/gogf/gf/frame/g"
      6. )
      7. func main() {
      8. b := []byte(`{"Id":1,"Name":"john","Scores":[100,99,98]}`)
      9. type Student struct {
      10. Id *g.Var
      11. Name *g.Var
      12. Scores *g.Var
      13. }
      14. s := Student{}
      15. json.Unmarshal(b, &s)
      16. }