为什么golang json编号可以';t转换整型或字符串整型,如;“10”吗;?
我想将接口值转换为数字,但当接口是数字或数字字符串时,它将不起作用,我不知道为什么我们不能用这种方式转换为什么golang json编号可以';t转换整型或字符串整型,如;“10”吗;?,json,go,type-conversion,Json,Go,Type Conversion,我想将接口值转换为数字,但当接口是数字或数字字符串时,它将不起作用,我不知道为什么我们不能用这种方式转换 package main import ( "encoding/json" "fmt" "reflect" ) func main() { number := 10 strNumber := "10" test(number) test(strNumber) } func test(i interface{}) { str
package main
import (
"encoding/json"
"fmt"
"reflect"
)
func main() {
number := 10
strNumber := "10"
test(number)
test(strNumber)
}
func test(i interface{}) {
strNum, ok := i.(json.Number)
fmt.Println(strNum, ok, reflect.TypeOf(i))
}
它将产生如下结果:
false int
false string
以下是您在围棋中的示例:
package main
import (
"encoding/json"
"fmt"
"strconv"
)
func main() {
number := 10
strNumber := "10"
test(number)
test(strNumber)
}
func test(i interface{}) {
var strNum string
switch x := i.(type) {
case int:
strNum = strconv.Itoa(x)
case string:
if _, err := strconv.ParseInt(x, 10, 64); err == nil {
strNum = x
}
}
jsonNum := json.Number(strNum)
fmt.Printf("%[1]v %[1]T\n", jsonNum)
}
游乐场:
输出:
10 json.Number
10 json.Number
您混淆了类型断言和类型转换。类型断言仅在断言到实际的基础类型时成功。它无法将其转换为其他类型。断言包含在教程()和规范()中。更不用说
json.Number
基础类型是string
(查看type Number string
)。无论如何,无法直接将整数正确转换为字符串。