5

これが初心者の質問である場合はお詫びしますが、これに対する解決策を見つけることができないようです。コンテキストに応じて、 astringまたはanのいずれかになり得る引数を取得しようとしています。どのタイプかを判別する必要があります(次に、それが実際にそのタイプであるかどうかに変換します)。intint

ありがとうございました :)

4

3 に答える 3

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"))
}
于 2012-10-04T23:46:34.770 に答える
4

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)
}
于 2012-10-04T23:36:48.040 に答える
0

私はパーティーに少し遅れていますが、あなたも使うことができますfmt.Sprintf

import "fmt"

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

"%v"Sprintfに渡すと、既知の最適な形式を使用してフォーマットするように指示されます。これは、基本的に「xを文字列に変換する」ことを意味します。intsこれは他のソリューションよりも短い(そしておそらく理解しやすい)が、またはではない入力を許可するという欠点があるstrings

于 2012-10-06T10:01:40.197 に答える