从字符串转换为int(如果不成功则抛出错误)

时间:2012-10-04 23:18:25

标签: go

如果这是一个初学者问题我很抱歉,但我似乎无法找到任何解决方案。我试图采用可以是stringint的参数,具体取决于上下文,我需要确定哪种类型(然后将其转换为int if确实是那种类型。)

谢谢:)

3 个答案:

答案 0 :(得分:7)

例如,

package main

import (
    "errors"
    "fmt"
    "strconv"
)

func IntConv(arg interface{}) (int, error) {
    switch x := arg.(type) {
    case int:
        return x, nil
    case string:
        return strconv.Atoi(x)
    }
    return 0, errors.New("IntConv: invalid argument ")
}

func main() {
    fmt.Println(IntConv(7))
    fmt.Println(IntConv("42"))
}

答案 1 :(得分:3)

http://golang.org/pkg/strconv/#Atoi

func Atoi

func Atoi(s string) (i int, err error)
Atoi is shorthand for ParseInt(s, 10, 0).

这是一次更新。为了澄清,由于Atoi接受字符串,然后尝试传递int将导致编译时错误。如果你需要在运行时检查,那么你可以做这样的事情。

package main

import (
    "fmt"
    "strconv"
    "errors"
)

func toInt(data interface{}) (n int, err error) {
    switch t := data.(type) {
    case int:
        return t, nil
    case string:
        return strconv.Atoi(t)
    default:
        return 0, errors.New(fmt.Sprintf("Invalid type received: %T", t))
    }

    panic("unreachable!")
}

func main() {
    var (
        n int
        err error
    )

    n, _ = toInt("1")
    fmt.Println(n)

    n, _ = toInt(2)
    fmt.Println(n)

    n, err = toInt(32.3)
    fmt.Println(err)
}

答案 2 :(得分:0)

我参加派对有点晚了,但您也可以使用fmt.Sprintf

import "fmt"

func ConvertToString(x interface{}) string {
    return fmt.Sprintf("%v", x)
}

"%v"传递给Sprintf告诉它使用它知道的最佳格式对其进行格式化,这实际上只是意味着“将x转换为字符串”。这比其他解决方案更短(也许更容易理解),但缺点是它允许输入不是intsstrings