《Go语言编程》中 第一个项目是calc,按照作者在书中的描述,在linux下运行没有问题。但经过实践,程序运行后不能打印出书中所描述的效果。
经过测试,发现windows命令行在执行calc add 2 3时,把calc也作为一个参数,这样使得真个程序中的参数数组下标与书中描述的有所不同。
现上传修改后的程序,供大家参考。
calc.go
package main import "os" import "fmt" import "simplemath" import "strconv" var Usage = func() { fmt.Println("USAGE: calc command [arguments] ...") fmt.Println("\nThe commands are:\n\tadd\tAddition of two values.\n\tsqrt\tSquare root of a non-negative value.") } func main() { args := os.Args fmt.Println("args: ", args) // print arguments, find some difference with it in the book if args == nil || len(args) < 2 { Usage() return } // arguments number is not same switch args[1] { case "add": if len(args) != 4 { // arguments number is not same fmt.Println("USAGE:calc add <integer1><integer2>") return } v1, err1 := strconv.Atoi(args[2])// arguments number is not same v2, err2 := strconv.Atoi(args[3])// arguments number is not same if err1 != nil || err2 != nil { fmt.Println("USAGE:calc add <integer1><integer2>") return } ret := simplemath.Add(v1, v2) fmt.Println("Result: ", ret) case "sqrt" : if len(args) != 3 { // arguments number is not same fmt.Println("USAGE:calc sqrt <integer>") return } v, err := strconv.Atoi(args[2]) if err != nil { fmt.Println("USAGE: calc sqrt <integer>") return } ret := simplemath.Sqrt(v) fmt.Println("Result: ", ret) default: Usage() } }
有疑问加站长微信联系(非本文作者)