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

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

Golang 中的接口變量轉(zhuǎn)換

Golang 中的接口變量轉(zhuǎn)換

Go
HUX布斯 2023-04-24 16:16:18
我有一個(gè)變量,其值可以是 string 或 int 取決于輸入。我使用interface{}作為類型。int如果輸入類似于"50"、"45"或任何 int 字符串,如何將該變量的值轉(zhuǎn)換為。package mainimport "fmt"import "log"import "strconv"func main() {  var limit interface{}  limit = "50"  page := 1  offset := 0  if limit != "ALL" {        log.Println("INSIDE")        offset = limit.(int)*page - limit.(int)    }    fmt.Println(offset)}上面的代碼得到:interface conversion: interface {} is string, not int如果我使用這個(gè):package mainimport "fmt"import "log"import "strconv"func main() {  var limit interface{}  limit = "50"  page := 1  offset := 0  if limit != "ALL" {        log.Println("INSIDE")        offset = strconv.Atoi(limit)*page - strconv.Atoi(limit)    }  fmt.Println(offset)}我懂了exit status 2 command-line-arguments./main.go:14:24: cannot use limit (type interface {}) as type string in argument to strconv.Atoi: need type assertion./main.go:14:24: multiple-value strconv.Atoi() in single-value context./main.go:14:51: cannot use limit (type interface {}) as type string in argument to strconv.Atoi: need type assertion./main.go:14:51: multiple-value strconv.Atoi() in single-value context如何將該變量的值轉(zhuǎn)換為 int?
查看完整描述

3 回答

?
一只名叫tom的貓

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

在 Go 中,與 Python/JavaScript/Perl 等語(yǔ)言相比,變量具有嚴(yán)格的類型和強(qiáng)邊界。您必須編寫顯式代碼才能將字符串從整數(shù)轉(zhuǎn)換為整數(shù)。這有助于編寫更安全、性能更高的程序。

此外,如果變量存儲(chǔ)在 an 中,interface{}則必須使用類型斷言(或類型開關(guān))才能進(jìn)一步使用具有特定類型的內(nèi)容。

這是您的固定代碼:

package main


import "fmt"

import "log"

import "strconv"


func main() {

? ? var limit interface{}

? ? limit = "50"

? ? page := 1

? ? offset := 3

? ? if limit != "ALL" {

? ? ? ? // Type assertion

? ? ? ? s, isString := limit.(string)

? ? ? ? if !isString {

? ? ? ? ? ? log.Fatalf("limit is not a string but %T", limit)

? ? ? ? }

? ? ? ? // Conversion from string to int, with error handling

? ? ? ? l, err := strconv.Atoi(s)

? ? ? ? if err != nil {

? ? ? ? ? ? log.Fatalf("%s: %v", limit, err)

? ? ? ? }

? ? ? ? offset = l*page - l

? ? }

? ? fmt.Println(offset)

}

但是,我建議您只使用string限制變量的類型。


查看完整回答
反對(duì) 回復(fù) 2023-04-24
?
慕勒3428872

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

據(jù)我了解你的問題,你的價(jià)值limit實(shí)際上總是字符串,但在一種情況下它是 value == ALL,否則它是整數(shù)值的字符串表示。


如果我是對(duì)的,那么我會(huì)提供以下解決方案:


import (

? ? "errors"

? ? "fmt"

? ? "strconv"

)


func getOffset(limit string, page int64) (int64, error) {

? ? lim, err := strconv.ParseInt(limit, 10, 64)

? ? if err != nil {

? ? ? ? if limit == "ALL" {

? ? ? ? ? ? return 0, nil

? ? ? ? }


? ? ? ? return 0, errors.New(fmt.Sprintf("string '%v' doesn't fit requirements, error: %v", limit, err))

? ? }


? ? offset := lim*page - lim

? ? return offset, nil

}

查看完整回答
反對(duì) 回復(fù) 2023-04-24
?
阿波羅的戰(zhàn)車

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

strconv 包可以用于這種轉(zhuǎn)換

package main


import (

    "fmt"

    "strconv"

)


func main() {

    var lim interface{}

    lim = "10"

    fmt.Printf("Type is: %T\nValue is: %s \n", lim, lim.(string))

    i, _ := strconv.Atoi(lim.(string))

    fmt.Printf("After conversion value is: %d", i)

}

上述代碼的輸出:


類型為:字符串,值為:10 轉(zhuǎn)換后值為:10


查看完整回答
反對(duì) 回復(fù) 2023-04-24
  • 3 回答
  • 0 關(guān)注
  • 241 瀏覽
慕課專欄
更多

添加回答

舉報(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)