<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
這篇文章將介紹 GoFrame 通用型別變數gvar的概念,對比 interface{}的特點;以及如何設定gvar的並行安全開關等基礎使用;介紹序列化範例程式碼。
gvar 通用動態變數,支援各種內建的資料型別轉換,可以作為interface{}
型別的替代資料型別,並且該型別支援並行安全開關。
所有需要使用interface{}型別的場景夠可以用gvar替代:
使用gvar代替interface{}很重要的一個原因是:gvar支援設定並行安全開關。
在初始化的時候,使用New()方法或者Create()方法,第二個引數就是設定並行安全開關的,預設為false。
如果使用goland開發,是能看到引數含義提示的:
package main import ( "fmt" "github.com/gogf/gf/container/gvar" "github.com/gogf/gf/frame/g" ) func main() { var v g.Var v.Set("123") fmt.Printf("v的型別:%T 值:%v n", v, v) //v的型別:gvar.Var 值:{123 false} 其中false指的是並行安全開關為false //設定並行安全開關為true var vSafe = gvar.New("123", true) fmt.Printf("vSafe的型別:%T 值:%v n", vSafe, vSafe) //vSafe的型別:*gvar.Var 值:123 fmt.Println("獲取gvar的值:", v.Val()) //123 //基本型別轉換 fmt.Printf("v.Int()轉換後的型別:%T 值:%v n", v.Int(), v.Int()) fmt.Printf("v.Float64()轉換後的型別:%T 值:%v n", v.Float64(), v.Float64()) fmt.Printf("v.Uint()轉換後的型別:%T 值:%v n", v.Uint(), v.Uint()) //切片型別轉換 fmt.Printf("v.Ints()轉換後的型別:%T 值:%v n", v.Ints(), v.Ints()) fmt.Printf("v.Strings()轉換後的型別:%T 值:%v n", v.Strings(), v.Strings()) fmt.Printf("v.Floats()轉換後的型別:%T 值:%v n", v.Floats(), v.Floats()) }
gvar 實現了標準庫json的序列化和反序列化介面
package main import ( "encoding/json" "fmt" "github.com/gogf/gf/frame/g" ) func main() { type Person struct { Name *g.Var Age *g.Var Hobby *g.Var } p := Person{ Name: g.NewVar("王中陽"), Age: g.NewVar(12), Hobby: g.NewVar(g.Slice{"吃飯", "睡覺", "打豆豆"}), } res, _ := json.Marshal(p) fmt.Println("序列化結果:", string(res)) //序列化結果:{"Name":"王中陽","Age":12,"Hobby":["吃飯","睡覺","打豆豆"]} //反序列化 data := []byte(`{"Name":"王中陽","Age":12,"Hobby":["吃飯","睡覺","打豆豆"]}`) p1 := new(Person) _ = json.Unmarshal(data, &p1) fmt.Println("反序列化結果:", p1) //反序列化結果: &{王中陽 12 ["吃飯","睡覺","打豆豆"]} }
通過這篇文章我們瞭解到GoFrame提供的gvar的概念:gvar是通用的動態變數,就像go原生提供的interface{}一樣。
適用於資料型別不確定的場景,以及需要對變數型別進行頻繁轉換的場景。
gvar相比於go原生提供的interface{}型別特點是:gvar支援設定並行安全的開關。
以上就是GoFrame通用型別變數gvar與interface基本使用對比的詳細內容,更多關於GoFrame變數gvar對比interface的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45