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



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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

威赞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值