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安裝使用
VS Code是微軟開源的一款編輯器,插件系統(tǒng)十分的豐富,下面介紹如何用VS Code搭建go語言開發(fā)環(huán)境,需要的朋友可以參考下2021-10-10
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庫,Prometheus 是一個開源的監(jiān)控和警報工具包,用于收集和處理應用程序和系統(tǒng)的指標數(shù)據(jù)。Prometheus 提供了多種客戶端庫,可以輕松地集成到各種編程語言中2023-04-04

