You are viewing an old version of this page. View the current version.
Compare with Current View Page History
« Previous Version 3 Next »
通用动态变量,支持各种内置的数据类型转换,可以作为interface{}类型的替代数据类型,并且该类型支持并发安全开关。
通用动态变量
interface{}
Tips: 框架同时提供了g.Var的数据类型,其实也是gvar.Var数据类型的别名。
g.Var
gvar.Var
使用场景:
使用interface{}的场景,各种不固定数据类型格式,或者需要对变量进行频繁的数据类型转换的场景。
使用方式:
import "github.com/gogf/gf/container/gvar"
接口文档:
https://godoc.org/github.com/gogf/gf/container/gvar
package main import ( "github.com/gogf/gf/frame/g" "fmt" ) func main() { var v g.Var v.Set("123") fmt.Println(v.Val()) // 基本类型转换 fmt.Println(v.Int()) fmt.Println(v.Uint()) fmt.Println(v.Float64()) // slice转换 fmt.Println(v.Ints()) fmt.Println(v.Floats()) fmt.Println(v.Strings()) // struct转换 type Score struct { Value int } s := new(Score) v.Struct(s) fmt.Println(s) }
执行后,输出结果为:
123 123 123 123 [123] [123] [123] &{123}
JSON
gvar.Var容器实现了标准库json数据格式的序列化/反序列化接口。 1. Marshal “`go package main
json
Marshal
import ( "encoding/json" "fmt" "github.com/gogf/gf/frame/g" ) func main() { type Student struct { Id *g.Var Name *g.Var Scores *g.Var } s := Student{ Id: g.NewVar(1), Name: g.NewVar("john"), Scores: g.NewVar([]int{100, 99, 98}), } b, _ := json.Marshal(s) fmt.Println(string(b)) } ``` 执行后,输出结果: ``` {"Id":1,"Name":"john","Scores":[100,99,98]} ```
Unmarshal
package main import ( "encoding/json" "fmt" "github.com/gogf/gf/frame/g" ) func main() { b := []byte(`{"Id":1,"Name":"john","Scores":[100,99,98]}`) type Student struct { Id *g.Var Name *g.Var Scores *g.Var } s := Student{} json.Unmarshal(b, &s) fmt.Println(s) }
执行后,输出结果:
{1 john [100,99,98]}