如果这是一个初学者问题,我深表歉意,但我似乎无法找到任何解决方案。我正在尝试使用一个可以是 astring或 an的参数int,具体取决于上下文,并且我需要确定哪种类型(int如果确实是该类型,则将其转换为。)
谢谢 :)
如果这是一个初学者问题,我深表歉意,但我似乎无法找到任何解决方案。我正在尝试使用一个可以是 astring或 an的参数int,具体取决于上下文,并且我需要确定哪种类型(int如果确实是该类型,则将其转换为。)
谢谢 :)
例如,
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"))
}
    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 接受字符串,因此尝试传递 anint将导致编译时错误。如果您需要在运行时进行检查,那么您可以执行类似的操作。
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)
}
    我参加聚会有点晚了,但你也可以使用fmt.Sprintf:
import "fmt"
func ConvertToString(x interface{}) string {
    return fmt.Sprintf("%v", x)
}
传递"%v"给 Sprintf 告诉它使用它知道的最佳格式对其进行格式化,这实际上只是意味着“将 x 转换为字符串”。这比其他解决方案更短(也许更容易理解),但缺点是它允许输入不是ints或strings.