《Go语言编程》中calc修改后可在Windows执行的源码

wilsonzane · · 1022 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。



《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()
	}
}



有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:wilsonzane

查看原文:《Go语言编程》中calc修改后可在Windows执行的源码

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:701969077

1022 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传