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

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

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

一、介紹

在沒有any類型之前,go語(yǔ)言中,我們經(jīng)常使用interface{},來表示一個(gè)類型是未知的,或者有好幾種其他基礎(chǔ)類型的情況。
從 Go1.18開始,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{}的別名,用來代替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

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

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

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

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

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

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

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

相關(guān)文章

  • Go 字符串格式化的實(shí)例代碼詳解

    Go 字符串格式化的實(shí)例代碼詳解

    這篇文章主要介紹了Go 字符串格式化的實(shí)例代碼詳解,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Go語(yǔ)言大揭秘:適用于哪些類型的項(xiàng)目開發(fā)?

    Go語(yǔ)言大揭秘:適用于哪些類型的項(xiàng)目開發(fā)?

    想知道Go編程語(yǔ)言適合開發(fā)哪些類型的項(xiàng)目嗎?無論是網(wǎng)絡(luò)服務(wù)、分布式系統(tǒng)還是嵌入式設(shè)備,Go都能輕松應(yīng)對(duì),本文將帶你了解Go在各種場(chǎng)景下的應(yīng)用,讓你更好地選擇和使用Go進(jìn)行開發(fā),需要的朋友可以參考下
    2024-01-01
  • 淺析Go中序列化與反序列化的基本使用

    淺析Go中序列化與反序列化的基本使用

    序列化是指將對(duì)象轉(zhuǎn)換成字節(jié)流,從而存儲(chǔ)對(duì)象或?qū)?duì)象傳輸?shù)絻?nèi)存、數(shù)據(jù)庫(kù)或文件的過程,反向過程稱為“反序列化”。本文主要介紹了Go中序列化與反序列化的基本使用,需要的可以參考一下
    2023-04-04
  • 線上golang grpc服務(wù)資源泄露問題排查

    線上golang grpc服務(wù)資源泄露問題排查

    這篇文章主要介紹了線上golang grpc服務(wù)資源泄露問題排查,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Go使用Google?Gemini?Pro?API創(chuàng)建簡(jiǎn)單聊天機(jī)器人

    Go使用Google?Gemini?Pro?API創(chuàng)建簡(jiǎn)單聊天機(jī)器人

    這篇文章主要為大家介紹了Go使用Google?Gemini?Pro?API創(chuàng)建簡(jiǎn)單聊天機(jī)器人實(shí)現(xiàn)過程詳解,本文將通過最新的gemini?go?sdk來實(shí)現(xiàn)命令行聊天機(jī)器人
    2023-12-12
  • Go 容器遍歷的實(shí)現(xiàn)示例

    Go 容器遍歷的實(shí)現(xiàn)示例

    Go 語(yǔ)言提供的基礎(chǔ)容器,免不了要查詢?nèi)萜髦械臄?shù)據(jù),那么是如何實(shí)現(xiàn)遍歷的呢?本文將會(huì)介紹幾種常用容易的遍歷及其使用。感興趣的可以了解一下
    2021-06-06
  • 深入剖析Go語(yǔ)言中數(shù)組和切片的區(qū)別

    深入剖析Go語(yǔ)言中數(shù)組和切片的區(qū)別

    本文將深入探討 Go 語(yǔ)言數(shù)組和切片的區(qū)別,包括它們的定義、內(nèi)存布局、長(zhǎng)度和容量、初始化和操作等方面。從而更好地在實(shí)際開發(fā)中選擇和使用合適的數(shù)據(jù)結(jié)構(gòu),提高代碼的效率和可維護(hù)性,需要的可以參考一下
    2023-05-05
  • Golang中sync.Mutex的源碼分析

    Golang中sync.Mutex的源碼分析

    這篇文章將帶大家從源碼分析一下Golang中sync.Mutex的使用,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Golang有一定的幫助,需要的可以參考一下
    2023-03-03
  • 在Go中實(shí)現(xiàn)高效可靠的鏈路追蹤系統(tǒng)

    在Go中實(shí)現(xiàn)高效可靠的鏈路追蹤系統(tǒng)

    在當(dāng)今互聯(lián)網(wǎng)應(yīng)用的架構(gòu)中,分布式系統(tǒng)已經(jīng)成為主流,分布式系統(tǒng)的優(yōu)勢(shì)在于能夠提供高可用性、高并發(fā)性和可擴(kuò)展性,本文將介紹鏈路追蹤的概念和原理,并重點(diǎn)介紹如何在Golang中實(shí)現(xiàn)高效可靠的鏈路追蹤系統(tǒng),需要的朋友可以參考下
    2023-10-10
  • 使用Go語(yǔ)言發(fā)送郵件的示例代碼

    使用Go語(yǔ)言發(fā)送郵件的示例代碼

    很多朋友想試試用Go語(yǔ)言發(fā)送郵件,所以接下來小編給大家介紹一下如何用Go語(yǔ)言發(fā)送郵件,文中通過代碼實(shí)例講解的非常詳細(xì),需要的朋友可以參考下
    2023-07-07

最新評(píng)論