最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

GoFrame通用類型變量gvar與interface基本使用對(duì)比

 更新時(shí)間:2022年06月09日 16:59:45   作者:王中陽Go  
這篇文章主要為大家介紹了GoFrame通用類型變量gvar與interface基本使用對(duì)比,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前言摘要

這篇文章將介紹 GoFrame 通用類型變量gvar的概念,對(duì)比 interface{}的特點(diǎn);以及如何設(shè)置gvar的并發(fā)安全開關(guān)等基礎(chǔ)使用;介紹序列化示例代碼。

通用變量 gvar

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

使用場景

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

  • 各種不固定數(shù)據(jù)類型格式
  • 需要頻繁對(duì)變量進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換的場景。

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

看源碼學(xué)編程

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

在初始化的時(shí)候,使用New()方法或者Create()方法,第二個(gè)參數(shù)就是設(shè)置并發(fā)安全開關(guān)的,默認(rèn)為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ā)安全開關(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é)果

序列化示例

gvar 實(shí)現(xiàn)了標(biāo)準(zhǔ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é)果

總結(jié)

通過這篇文章我們了解到GoFrame提供的gvar的概念:gvar是通用的動(dòng)態(tài)變量,就像go原生提供的interface{}一樣。

適用于數(shù)據(jù)類型不確定的場景,以及需要對(duì)變量類型進(jìn)行頻繁轉(zhuǎn)換的場景。

gvar相比于go原生提供的interface{}類型特點(diǎn)是:gvar支持設(shè)置并發(fā)安全的開關(guān)。

以上就是GoFrame通用類型變量gvar與interface基本使用對(duì)比的詳細(xì)內(nèi)容,更多關(guān)于GoFrame變量gvar對(duì)比interface的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Golang收支記賬程序詳細(xì)編寫過程

    Golang收支記賬程序詳細(xì)編寫過程

    這篇文章主要介紹了Golang實(shí)現(xiàn)收支記賬程序流程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-12-12
  • go語言處理JSON和XML數(shù)據(jù)示例解析

    go語言處理JSON和XML數(shù)據(jù)示例解析

    這篇文章主要介紹了go語言處理JSON和XML數(shù)據(jù)的示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-08-08
  • 最新版Golang?pprof使用詳解(引入、抓取、分析,圖文結(jié)合)

    最新版Golang?pprof使用詳解(引入、抓取、分析,圖文結(jié)合)

    這篇文章主要介紹了最新版Golang?pprof使用詳解包括引入、抓取、分析,圖文結(jié)合,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-08-08
  • Golang實(shí)現(xiàn)Trie(前綴樹)的示例

    Golang實(shí)現(xiàn)Trie(前綴樹)的示例

    本文主要介紹了Golang實(shí)現(xiàn)Trie(前綴樹)的示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • 通過源碼分析Golang?cron的實(shí)現(xiàn)原理

    通過源碼分析Golang?cron的實(shí)現(xiàn)原理

    golang實(shí)現(xiàn)定時(shí)任務(wù)很簡單,只須要簡單幾步代碼即可以完成,最近在做了幾個(gè)定時(shí)任務(wù),想研究一下它內(nèi)部是怎么實(shí)現(xiàn)的,所以將源碼過了一遍,記錄和分享在此。需要的朋友可以參考以下內(nèi)容,希望對(duì)大家有幫助
    2022-10-10
  • Go語言并發(fā)爬蟲的具體實(shí)現(xiàn)

    Go語言并發(fā)爬蟲的具體實(shí)現(xiàn)

    本文主要介紹了Go語言并發(fā)爬蟲的具體實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • Go 語言入門學(xué)習(xí)之正則表達(dá)式

    Go 語言入門學(xué)習(xí)之正則表達(dá)式

    這篇文章主要介紹了Go 語言入門學(xué)習(xí)之正則表達(dá)式,文章基于GO語言的相關(guān)資料展開詳細(xì)內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-04-04
  • Go高級(jí)特性探究之信號(hào)處理詳解

    Go高級(jí)特性探究之信號(hào)處理詳解

    信號(hào)是在Unix和類Unix操作系統(tǒng)中用于通知進(jìn)程發(fā)生了事件或異常的通信機(jī)制,本文主要來介紹一下Go中的信號(hào)處理的方法,需要的可以參考一下
    2023-06-06
  • Go操作Kafka和Etcd方法詳解

    Go操作Kafka和Etcd方法詳解

    這篇文章主要為大家介紹了Go操作Kafka和Etcd方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • Go語言開發(fā)快速學(xué)習(xí)CGO編程

    Go語言開發(fā)快速學(xué)習(xí)CGO編程

    這篇文章主要為大家介紹了Go語言開發(fā)之快速學(xué)習(xí)CGO編程,看了本文你就會(huì)發(fā)現(xiàn)CGO編程其實(shí)沒有想象的那么難,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04

最新評(píng)論

卓尼县| 潮州市| 辉县市| 曲松县| 习水县| 辉南县| 谢通门县| 临西县| 宜州市| 蓝田县| 晋州市| 响水县| 万山特区| 平罗县| 仁布县| 郴州市| 东阳市| 霸州市| 遂昌县| 凉山| 吉林省| 永胜县| 上犹县| 乌拉特前旗| 若羌县| 重庆市| 海阳市| 二手房| 县级市| 北安市| 广东省| 逊克县| 临沭县| 米泉市| 旅游| 厦门市| 宁强县| 托里县| 西城区| 西和县| 延边|