Golang中Sprintf显示<number: 19>而不是9的问题

Golang中Sprintf显示<number: 19>而不是9的问题 在我的代码中,我获取了一个 js.Value,它是一个简单的对象 {"Age":19}

为了显示它,我使用了:

data := fmt.Sprintf("Age: %v", value.Get("age"))
fmt.Println(data)

但输出结果是:

Age: <number: 19>

期望的输出是:

Age: 19

当我将 %v 替换为 %d,改为:

data := fmt.Sprintf("Age: %d", value.Get("age"))
fmt.Println(data)

我得到了:

Age: {[] 4626041242239631360 0}

更多关于Golang中Sprintf显示<number: 19>而不是9的问题的实战教程也可以访问 https://www.itying.com/category-94-b0.html

3 回复

Get 仍然返回一个 Value

如果你确定它是一个数字,你可能需要对其调用 Int

更多关于Golang中Sprintf显示<number: 19>而不是9的问题的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


value.Get("age") 的返回类型是什么? 你可能需要先将该类型序列化为结构体。

js.Value 类型需要显式转换为 Go 的基本类型才能正确格式化。使用 Int() 方法获取整数值:

package main

import (
    "fmt"
    "syscall/js"
)

func main() {
    // 模拟 js.Value 对象
    obj := js.ValueOf(map[string]interface{}{"Age": 19})
    ageValue := obj.Get("Age")
    
    // 正确转换并格式化
    data := fmt.Sprintf("Age: %d", ageValue.Int())
    fmt.Println(data) // 输出: Age: 19
}

如果值可能是浮点数,使用 Float() 方法:

data := fmt.Sprintf("Age: %.0f", ageValue.Float())

对于字符串值:

data := fmt.Sprintf("Name: %s", nameValue.String())

检查值类型后再转换:

switch ageValue.Type() {
case js.TypeNumber:
    data := fmt.Sprintf("Age: %d", ageValue.Int())
    fmt.Println(data)
case js.TypeString:
    data := fmt.Sprintf("Age: %s", ageValue.String())
    fmt.Println(data)
}
回到顶部