欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

GoFrame通用類型變量gvar與interface基本使用對比

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

前言摘要

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

通用變量 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)。

看源碼學(xué)編程

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

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

總結(jié)

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

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

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

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

相關(guān)文章

  • 淺析goland等待鎖問題

    淺析goland等待鎖問題

    這篇文章主要介紹了goland等待鎖問題,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2020-11-11
  • 一文帶你揭秘Go中new()和make()函數(shù)的區(qū)別和用途

    一文帶你揭秘Go中new()和make()函數(shù)的區(qū)別和用途

    Go(或 Golang)是一種現(xiàn)代、靜態(tài)類型、編譯型的編程語言,專為構(gòu)建可擴展、并發(fā)和高效的軟件而設(shè)計,它提供了各種內(nèi)置的函數(shù)和特性,幫助開發(fā)人員編寫簡潔高效的代碼,在本博客文章中,我們將探討 new() 和 make() 函數(shù)之間的區(qū)別,了解何時以及如何有效地使用它們
    2023-10-10
  • Gotify搭建你的消息推送系統(tǒng)

    Gotify搭建你的消息推送系統(tǒng)

    這篇文章主要介紹了Gotify搭建你的消息推送系統(tǒng),今天要分享的是 gotify,是一個用 go 編寫的消息服務(wù)端,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2024-01-01
  • Golang負載均衡和?;钤O(shè)計原理示例探究

    Golang負載均衡和保活設(shè)計原理示例探究

    這篇文章主要為大家介紹了Golang負載均衡和?;钤O(shè)計原理示例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01
  • golang抓取網(wǎng)頁并分析頁面包含的鏈接方法

    golang抓取網(wǎng)頁并分析頁面包含的鏈接方法

    今天小編就為大家分享一篇golang抓取網(wǎng)頁并分析頁面包含的鏈接方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-08-08
  • Go語言RPC Authorization進行簡單ip安全驗證的方法

    Go語言RPC Authorization進行簡單ip安全驗證的方法

    這篇文章主要介紹了Go語言RPC Authorization進行簡單ip安全驗證的方法,實例分析了Go語言進行ip驗證的技巧,需要的朋友可以參考下
    2015-03-03
  • 一文深入探討Go語言中的if-else語句

    一文深入探討Go語言中的if-else語句

    在Go語言中,條件語句的使用方式相對簡潔明了,所以本文將探討一下如何在Go程序中有效地進行條件判斷和邏輯控制,感興趣的小伙伴可以了解下
    2023-08-08
  • 詳解Go語言如何利用上下文進行并發(fā)計算

    詳解Go語言如何利用上下文進行并發(fā)計算

    在Go編程中,上下文(context)是一個非常重要的概念,它包含了與請求相關(guān)的信息,本文主要來和大家討論一下如何在并發(fā)計算中使用上下文,感興趣的可以了解下
    2024-02-02
  • Go語言實現(xiàn)字符串搜索算法Boyer-Moore

    Go語言實現(xiàn)字符串搜索算法Boyer-Moore

    Boyer-Moore?算法是一種非常高效的字符串搜索算法,被廣泛的應(yīng)用于多種字符串搜索場景,下面我們就來學(xué)習(xí)一下如何利用Go語言實現(xiàn)這一字符串搜索算法吧
    2023-11-11
  • 一文搞懂Golang文件操作增刪改查功能(基礎(chǔ)篇)

    一文搞懂Golang文件操作增刪改查功能(基礎(chǔ)篇)

    這篇文章主要介紹了一文搞懂Golang文件操作增刪改查功能(基礎(chǔ)篇),Golang 可以認為是服務(wù)器開發(fā)語言發(fā)展的趨勢之一,特別是在流媒體服務(wù)器開發(fā)中,已經(jīng)占有一席之地,今天我們不聊特別深奧的機制和內(nèi)容,就來聊一聊 Golang 對于文件的基本操作
    2021-04-04

最新評論