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

go語法入門any類型的使用場景示例詳解

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

一、介紹

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

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

官方的定義,告訴了我們any就是interface{}的別名,用來代替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的最佳實踐

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

我們先來看一個下面兩個時間,大家比較一下,哪一個比較好。

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這種方式好。為什么,因為用做key的話,這樣我們無論做為保存,還是讀取,都無需多做什么操作。
m2這種方式,我們需要拿到數(shù)據(jù)后,進行類型的轉(zhuǎn)換。這一步還的和之前保存的一樣,就很復雜。

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

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

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

如果是返回值的話,我們調(diào)用這個函數(shù),還得進行返回值的類型轉(zhuǎn)換,這對于調(diào)用方,無疑是巨大負擔。

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

以上就是go語法入門any類型的使用場景示例詳解的詳細內(nèi)容,更多關于go語法入門any類型使用的資料請關注腳本之家其它相關文章!

您可能感興趣的文章:

相關文章

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

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

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

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

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

    Golang中時間相關操作合集

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

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

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

    Golang程序中使用Prometheus的client_golang庫

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

    Golang token的生成和解析詳解

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

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

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

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

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

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

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

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

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

最新評論