Go中Sprintf处理js.Value时输出<number:19>而非19的问题求解
问题原因
value.Get("age") 返回的是 syscall/js 包定义的 js.Value 结构体类型,不是Go原生的整数类型:
- 用
%v格式化时,输出的是js.Value结构体的默认字符串表示,所以会出现<number: 19>的结果 - 用
%d格式化时,会尝试直接输出结构体内部的字段值,因此得到无关的长数字
解决方案
调用js.Value提供的类型转换方法,将其转为Go原生类型后再做格式化:
// 先调用Int()方法将js.Value转为Go的int类型 age := value.Get("Age").Int() data := fmt.Sprintf("Age: %d", age) fmt.Println(data)
注意事项
- JS对象属性名大小写敏感,如果你JS侧的对象键是首字母大写的
Age,Get方法参数也要对应写"Age",否则会取到undefined,类型转换会得到0 - 不同JS类型对应不同的转换方法:字符串用
String()、浮点数用Float()、布尔值用Bool()即可
内容的提问来源于stack exchange,提问作者Hasan A Yousef
相关产品推荐
相关产品推荐

