GoFrame通用類型變量gvar與interface基本使用對比
前言摘要
這篇文章將介紹 GoFrame 通用類型變量gvar的概念,對比 interface{}的特點;以及如何設置gvar的并發(fā)安全開關等基礎使用;介紹序列化示例代碼。
通用變量 gvar
gvar 通用動態(tài)變量,支持各種內置的數(shù)據(jù)類型轉換,可以作為interface{}類型的替代數(shù)據(jù)類型,并且該類型支持并發(fā)安全開關。
使用場景
所有需要使用interface{}類型的場景夠可以用gvar替代:
- 各種不固定數(shù)據(jù)類型格式
- 需要頻繁對變量進行數(shù)據(jù)類型轉換的場景。
使用gvar代替interface{}很重要的一個原因是:gvar支持設置并發(fā)安全開關。
看源碼學編程
如何設置并發(fā)安全開關呢?
在初始化的時候,使用New()方法或者Create()方法,第二個參數(shù)就是設置并發(fā)安全開關的,默認為false。
如果使用goland開發(fā),是能看到參數(shù)含義提示的:

基本使用
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指的是并發(fā)安全開關為false
//設置并發(fā)安全開關為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 實現(xiàn)了標準庫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是通用的動態(tài)變量,就像go原生提供的interface{}一樣。
適用于數(shù)據(jù)類型不確定的場景,以及需要對變量類型進行頻繁轉換的場景。
gvar相比于go原生提供的interface{}類型特點是:gvar支持設置并發(fā)安全的開關。
以上就是GoFrame通用類型變量gvar與interface基本使用對比的詳細內容,更多關于GoFrame變量gvar對比interface的資料請關注腳本之家其它相關文章!
相關文章
一文帶你揭秘Go中new()和make()函數(shù)的區(qū)別和用途
Go(或 Golang)是一種現(xiàn)代、靜態(tài)類型、編譯型的編程語言,專為構建可擴展、并發(fā)和高效的軟件而設計,它提供了各種內置的函數(shù)和特性,幫助開發(fā)人員編寫簡潔高效的代碼,在本博客文章中,我們將探討 new() 和 make() 函數(shù)之間的區(qū)別,了解何時以及如何有效地使用它們2023-10-10
Go語言RPC Authorization進行簡單ip安全驗證的方法
這篇文章主要介紹了Go語言RPC Authorization進行簡單ip安全驗證的方法,實例分析了Go語言進行ip驗證的技巧,需要的朋友可以參考下2015-03-03
Go語言實現(xiàn)字符串搜索算法Boyer-Moore
Boyer-Moore?算法是一種非常高效的字符串搜索算法,被廣泛的應用于多種字符串搜索場景,下面我們就來學習一下如何利用Go語言實現(xiàn)這一字符串搜索算法吧2023-11-11

