在下一个例子中,我使用 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())
}
有办法吗?
答案 0 :(得分:1)
执行命令时,会返回一个字符串。您需要对其进行反序列化以获得正确的类型。如果您只希望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)
}