第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

在 go 中測(cè)試初始值的通用方法

在 go 中測(cè)試初始值的通用方法

Go
回首憶惘然 2021-11-22 10:39:47
有沒(méi)有一種通用的方法可以在 Go 中測(cè)試變量的初始值?鑒于這些測(cè)試:package mainimport "fmt"type FooStruct struct {    A string    B int}type BarStruct struct {    A string    B int    C map[int]string}func main() {    // string isinital test    var s string    fmt.Println(s == "")    // int isinital test    var i int    fmt.Println(i == 0)    // primitive struct isinital test    var fp FooStruct    fmt.Println(fp == FooStruct{})    // complex struct isinital test    // fail -> invalid operation: fc == BarStruct literal (struct containing map[int]string cannot be compared)    var fc BarStruct    fmt.Println(fc == BarStruct{})    // map isinital test    var m map[string]int    fmt.Println(len(m) == 0)    // map isinital test     // fail -> invalid operation: m == map[string]int literal (map can only be compared to nil)    fmt.Println(m == map[string]int{})}A: 什么是測(cè)試BarStruct初始的正確方法?B:有沒(méi)有一種通用的方法來(lái)測(cè)試任何 var 的初始值?
查看完整描述

1 回答

?
慕沐林林

TA貢獻(xiàn)2016條經(jīng)驗(yàn) 獲得超9個(gè)贊

您可以使用reflect.DeepEqual:


bs := BarStruct{}

fmt.Println(reflect.DeepEqual(bs, BarStruct{}))

// Output:

//   true

游樂(lè)場(chǎng):http : //play.golang.org/p/v11bkKUhXQ。


編輯:您還可以isZero像這樣定義一個(gè)輔助函數(shù):


func isZero(v interface{}) bool {

    zv := reflect.Zero(reflect.TypeOf(v)).Interface()

    return reflect.DeepEqual(v, zv)

}

這應(yīng)該適用于任何類型:


fmt.Println(isZero(0))

fmt.Println(isZero(""))

fmt.Println(isZero(bs))

fmt.Println(isZero(map[int]int(nil)))


查看完整回答
反對(duì) 回復(fù) 2021-11-22
  • 1 回答
  • 0 關(guān)注
  • 191 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)