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

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

Go:在類(lèi)型 switch 中將任何 int 值轉(zhuǎn)換為 int64

Go:在類(lèi)型 switch 中將任何 int 值轉(zhuǎn)換為 int64

Go
慕村225694 2021-06-18 18:15:08
我經(jīng)常遇到這樣的情況,我期望一個(gè)int(任何類(lèi)型的int/int8/16/32/64)并使用類(lèi)型開(kāi)關(guān)檢查它switch t := v.(type) {  case int, int8, int16, int32, int64:    // cast to int64  case uint, uint8, uint16, uint32, uint64:    // cast to uint64}現(xiàn)在我不能使用直接轉(zhuǎn)換,因?yàn)閠在這種情況下將是interface{}. case對(duì)于每種整數(shù)類(lèi)型,我真的必須將其拆分為s 嗎?我知道我可以通過(guò)反射使用 來(lái)做到這一點(diǎn)reflect.ValueOf(v).Int(),但不應(yīng)該有更好的(不那么冗長(zhǎng))的方式來(lái)做到這一點(diǎn)嗎?更新:提出了一個(gè)問(wèn)題,Rob 建議只reflect在這種情況下使用。
查看完整描述

3 回答

?
阿波羅的戰(zhàn)車(chē)

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

在沒(méi)有更多上下文的情況下很難給您意見(jiàn),但看起來(lái)您試圖使您的實(shí)現(xiàn)過(guò)于通用,這對(duì)于主要使用更動(dòng)態(tài)語(yǔ)言或具有通用支持的人來(lái)說(shuō)很常見(jiàn)。

學(xué)習(xí)圍棋過(guò)程的一部分是學(xué)習(xí)接受它的類(lèi)型系統(tǒng),這取決于你來(lái)自哪里,它可能具有挑戰(zhàn)性。

通常,在 Go 中,您希望支持一種可以容納您需要處理的所有可能值的類(lèi)型。在您的情況下,它可能是 int64。

例如,看看 math 包。它僅適用于 int64,并希望任何使用它的人都能正確地對(duì)其進(jìn)行類(lèi)型轉(zhuǎn)換,而不是嘗試轉(zhuǎn)換所有內(nèi)容。

另一種選擇是使用類(lèi)型不可知的接口,就像 sort 包一樣。基本上,任何特定于類(lèi)型的方法都將在您的包之外實(shí)現(xiàn),并且您希望定義某些方法。

學(xué)習(xí)和接受這些屬性需要一段時(shí)間,但總的來(lái)說(shuō),最終證明它在可維護(hù)性和健壯性方面是好的。接口確保您具有正交性,強(qiáng)類(lèi)型確保您可以控制類(lèi)型轉(zhuǎn)換,這最終會(huì)導(dǎo)致錯(cuò)誤以及內(nèi)存中不必要的副本。

干杯


查看完整回答
反對(duì) 回復(fù) 2021-06-21
?
神不在的星期二

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

你想解決什么問(wèn)題?您描述的完整解決方案如下所示:


func Num64(n interface{}) interface{} {

    switch n := n.(type) {

    case int:

        return int64(n)

    case int8:

        return int64(n)

    case int16:

        return int64(n)

    case int32:

        return int64(n)

    case int64:

        return int64(n)

    case uint:

        return uint64(n)

    case uintptr:

        return uint64(n)

    case uint8:

        return uint64(n)

    case uint16:

        return uint64(n)

    case uint32:

        return uint64(n)

    case uint64:

        return uint64(n)

    }

    return nil

}


func DoNum64Things(x interface{}) {

    switch Num64(x).(type) {

    case int64:

        // do int things

    case uint64:

        // do uint things

    default:

        // do other things

    }

}


查看完整回答
反對(duì) 回復(fù) 2021-06-21
  • 3 回答
  • 0 關(guān)注
  • 269 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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