在下一个示例中,我使用 nodejs 来计算 1+1,我希望结果具有相同类型的值,而不是字符串
例子:
func main() {
cmd := exec.Command("/usr/bin/nodejs", "-p", "1+1")
var out bytes.Buffer
var stderr bytes.Buffer
cmd.Stdout = &out
cmd.Stderr = &stderr
err := cmd.Run()
if err != nil {
log.Println(err, stderr.String())
os.Exit(1)
}
fmt.Println(out.String())
}
有什么办法吗?
最佳答案
当执行一个命令时,你会得到一个字符串。您将需要反序列化它以获得正确的类型。如果您只希望 Node.js 命令打印数字,您可以使用 strconv.ParseFloat
:
func main() {
cmd := exec.Command("/usr/bin/nodejs", "-p", "1+1")
b, err := cmd.Output()
v, err := strconv.ParseFloat(string(b), 64)
fmt.Println(v) // v is of type float64
}
如果你想处理更复杂的类型,比如 javascript 对象和数组,我建议使用 JSON 序列化/反序列化节点的结果:
type Result struct {
Value float64
Args []float64
}
func main() {
var result Result
cmd := exec.Command("/usr/bin/nodejs", "-p", `JSON.stringify({"value": 1+1, "args": [1, 1]})`)
b, err := cmd.Output()
err = json.Unmarshal(b, &r)
fmt.Println(r.Value)
}
关于go - 我如何使用 exec.Command().Output() 返回相同类型的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45107967/