溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

GoFrame通用類型變量gvar與interface如何使用

發(fā)布時間:2022-06-10 09:27:12 來源:億速云 閱讀:124 作者:zzz 欄目:開發(fā)技術(shù)

本篇內(nèi)容主要講解“GoFrame通用類型變量gvar與interface如何使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“GoFrame通用類型變量gvar與interface如何使用”吧!

    通用變量 gvar

    gvar 通用動態(tài)變量,支持各種內(nèi)置的數(shù)據(jù)類型轉(zhuǎn)換,可以作為interface{}類型的替代數(shù)據(jù)類型,并且該類型支持并發(fā)安全開關(guān)。

    使用場景

    所有需要使用interface{}類型的場景夠可以用gvar替代:

    • 各種不固定數(shù)據(jù)類型格式

    • 需要頻繁對變量進行數(shù)據(jù)類型轉(zhuǎn)換的場景。

    使用gvar代替interface{}很重要的一個原因是:gvar支持設(shè)置并發(fā)安全開關(guān)。

    看源碼學編程

    如何設(shè)置并發(fā)安全開關(guān)呢?

    在初始化的時候,使用New()方法或者Create()方法,第二個參數(shù)就是設(shè)置并發(fā)安全開關(guān)的,默認為false。

    如果使用goland開發(fā),是能看到參數(shù)含義提示的:

    GoFrame通用類型變量gvar與interface如何使用

    基本使用

    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ā)安全開關(guān)為false
    
       //設(shè)置并發(fā)安全開關(guān)為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
    
       //基本類型轉(zhuǎn)換
       fmt.Printf("v.Int()轉(zhuǎn)換后的類型:%T  值:%v \n", v.Int(), v.Int())
       fmt.Printf("v.Float64()轉(zhuǎn)換后的類型:%T  值:%v \n", v.Float64(), v.Float64())
       fmt.Printf("v.Uint()轉(zhuǎn)換后的類型:%T  值:%v \n", v.Uint(), v.Uint())
    
       //切片類型轉(zhuǎn)換
       fmt.Printf("v.Ints()轉(zhuǎn)換后的類型:%T  值:%v \n", v.Ints(), v.Ints())
       fmt.Printf("v.Strings()轉(zhuǎn)換后的類型:%T  值:%v \n", v.Strings(), v.Strings())
       fmt.Printf("v.Floats()轉(zhuǎn)換后的類型:%T  值:%v \n", v.Floats(), v.Floats())
    }

    打印結(jié)果

    GoFrame通用類型變量gvar與interface如何使用

    序列化示例

    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("序列化結(jié)果:", string(res)) //序列化結(jié)果:{"Name":"王中陽","Age":12,"Hobby":["吃飯","睡覺","打豆豆"]}
    
       //反序列化
       data := []byte(`{"Name":"王中陽","Age":12,"Hobby":["吃飯","睡覺","打豆豆"]}`)
       p1 := new(Person)
       _ = json.Unmarshal(data, &p1)
       fmt.Println("反序列化結(jié)果:", p1) //反序列化結(jié)果: &{王中陽 12 ["吃飯","睡覺","打豆豆"]}
    }

    打印結(jié)果

    GoFrame通用類型變量gvar與interface如何使用

    到此,相信大家對“GoFrame通用類型變量gvar與interface如何使用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學習!

    向AI問一下細節(jié)

    免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

    AI