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

go語(yǔ)法入門(mén)any類(lèi)型的使用場(chǎng)景示例詳解

 更新時(shí)間:2023年09月06日 09:23:52   作者:海生  
這篇文章主要為大家介紹了go語(yǔ)法入門(mén)any類(lèi)型的使用場(chǎng)景示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

一、介紹

在沒(méi)有any類(lèi)型之前,go語(yǔ)言中,我們經(jīng)常使用interface{},來(lái)表示一個(gè)類(lèi)型是未知的,或者有好幾種其他基礎(chǔ)類(lèi)型的情況。
從 Go1.18開(kāi)始,go官方定義了一個(gè)預(yù)聲明標(biāo)識(shí)符(Predeclared identifiers):any。

// any is an alias for interface{} and is equivalent to interface{} in all ways.
// any 是一個(gè) interface{}的 別名,并且在任何情況下和interface{}相同。
type any = interface{}

官方的定義,告訴了我們any就是interface{}的別名,用來(lái)代替interface{}的。
go源碼中現(xiàn)在也大量的使用any比如:

func Print(a ...any) (n int, err error) 
func Println(a ...any) (n int, err error)
type Pointer[T any] struct
var expunged = new(any)
dirty map[any]*entry 
func Marshal(v any) ([]byte, error) 
......

太多地方用到了,基本上go官方,用any代替了任何interface{}出現(xiàn)的地方。

二、any的最佳實(shí)踐

2.1 在map的情況下,map更適合做key

我們先來(lái)看一個(gè)下面兩個(gè)時(shí)間,大家比較一下,哪一個(gè)比較好。

func TestAny(t *testing.T) {
    m1 := make(map[any]string, 0)
    m1["1"] = "1"
    m1[2] = "2"
    var v1 string = m1["1"]
    var v2 string = m1[2]
    t.Log(v1, v2)
    m2 := make(map[string]any, 0)
    m2["1"] = "1"
    m2["2"] = 2
    var v3 string = m2["1"].(string)
    var v4 int = m2["2"].(int)
    t.Log(v3, v4)
}

結(jié)論是 m1這種方式好。為什么,因?yàn)橛米鰇ey的話,這樣我們無(wú)論做為保存,還是讀取,都無(wú)需多做什么操作。
m2這種方式,我們需要拿到數(shù)據(jù)后,進(jìn)行類(lèi)型的轉(zhuǎn)換。這一步還的和之前保存的一樣,就很復(fù)雜。

2.2 函數(shù)的參數(shù)和返回值,any更適合做參數(shù)

在官方的json解析包里面。無(wú)論是編碼還是解碼,any都只是作為參數(shù)。

func Marshal(v any) ([]byte, error)
func Unmarshal(data []byte, v any) error

如果是返回值的話,我們調(diào)用這個(gè)函數(shù),還得進(jìn)行返回值的類(lèi)型轉(zhuǎn)換,這對(duì)于調(diào)用方,無(wú)疑是巨大負(fù)擔(dān)。

但作為參數(shù),對(duì)于調(diào)用方,是巨大的便利,他可以傳入各種類(lèi)型。

以上就是go語(yǔ)法入門(mén)any類(lèi)型的使用場(chǎng)景示例詳解的詳細(xì)內(nèi)容,更多關(guān)于go語(yǔ)法入門(mén)any類(lèi)型使用的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

您可能感興趣的文章:

相關(guān)文章

  • Go語(yǔ)言集成開(kāi)發(fā)環(huán)境之VS Code安裝使用

    Go語(yǔ)言集成開(kāi)發(fā)環(huán)境之VS Code安裝使用

    VS Code是微軟開(kāi)源的一款編輯器,插件系統(tǒng)十分的豐富,下面介紹如何用VS Code搭建go語(yǔ)言開(kāi)發(fā)環(huán)境,需要的朋友可以參考下
    2021-10-10
  • golang時(shí)間字符串和時(shí)間戳轉(zhuǎn)換的案例

    golang時(shí)間字符串和時(shí)間戳轉(zhuǎn)換的案例

    這篇文章主要介紹了golang時(shí)間字符串和時(shí)間戳轉(zhuǎn)換的案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-12-12
  • Golang中時(shí)間相關(guān)操作合集

    Golang中時(shí)間相關(guān)操作合集

    這篇文章主要為大家介紹了Golang中的各種時(shí)間相關(guān)操作,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-09-09
  • Golang?統(tǒng)計(jì)字符串中數(shù)字字母數(shù)量的實(shí)現(xiàn)方法

    Golang?統(tǒng)計(jì)字符串中數(shù)字字母數(shù)量的實(shí)現(xiàn)方法

    這篇文章主要介紹了Golang?統(tǒng)計(jì)字符串中數(shù)字字母數(shù)量,本文給出了兩種從字符串獲取數(shù)字與字母數(shù)量的方法,分別是ASCII 碼值和正則表達(dá)式,需要的朋友可以參考下
    2022-06-06
  • Golang程序中使用Prometheus的client_golang庫(kù)

    Golang程序中使用Prometheus的client_golang庫(kù)

    這篇文章主要介紹了Golang程序中使用Prometheus的client_golang庫(kù),Prometheus 是一個(gè)開(kāi)源的監(jiān)控和警報(bào)工具包,用于收集和處理應(yīng)用程序和系統(tǒng)的指標(biāo)數(shù)據(jù)。Prometheus 提供了多種客戶端庫(kù),可以輕松地集成到各種編程語(yǔ)言中
    2023-04-04
  • Golang token的生成和解析詳解

    Golang token的生成和解析詳解

    這篇文章主要給大家介紹了Golang token的生成和解析,文中通過(guò)代碼示例給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-02-02
  • 揭秘Go Json.Unmarshal精度丟失之謎

    揭秘Go Json.Unmarshal精度丟失之謎

    我們知道在json反序列化時(shí)是沒(méi)有整型和浮點(diǎn)型的區(qū)別,數(shù)字都使用同一種類(lèi)型,在go語(yǔ)言的類(lèi)型中這種共同類(lèi)型就是float64,下面我們就來(lái)探討一下Json.Unmarshal精度丟失之謎吧
    2023-08-08
  • 詳解如何在golang鏡像中設(shè)置指定時(shí)區(qū)

    詳解如何在golang鏡像中設(shè)置指定時(shí)區(qū)

    這篇文章主要為大家詳細(xì)介紹了如何在golang鏡像中設(shè)置指定時(shí)區(qū),文中的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,感興趣的可以了解一下
    2023-04-04
  • Go Web后臺(tái)管理系統(tǒng)項(xiàng)目實(shí)現(xiàn)

    Go Web后臺(tái)管理系統(tǒng)項(xiàng)目實(shí)現(xiàn)

    本文主要介紹了Go Web后臺(tái)管理系統(tǒng)項(xiàng)目實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-05-05
  • golang實(shí)現(xiàn)協(xié)程池的方法示例

    golang實(shí)現(xiàn)協(xié)程池的方法示例

    本文主要介紹了golang實(shí)現(xiàn)協(xié)程池的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2025-02-02

最新評(píng)論