为什么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
)。无论如何,无法直接将整数正确转换为字符串。