これが初心者の質問である場合はお詫びしますが、これに対する解決策を見つけることができないようです。コンテキストに応じて、 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は文字列を受け入れるため、を渡そうとする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)
}
私はパーティーに少し遅れていますが、あなたも使うことができますfmt.Sprintf
:
import "fmt"
func ConvertToString(x interface{}) string {
return fmt.Sprintf("%v", x)
}
"%v"
Sprintfに渡すと、既知の最適な形式を使用してフォーマットするように指示されます。これは、基本的に「xを文字列に変換する」ことを意味します。ints
これは他のソリューションよりも短い(そしておそらく理解しやすい)が、またはではない入力を許可するという欠点があるstrings
。