《Go语言编程》【1.5 工程管理】calc.go的代码错误

最近看由人民邮电出版社许式伟 吕桂华等编著《Go语言编程》【第1章 初识Go语言】【1.5 工程管理】时,发现了示例代码calc.go有几处错误,args := os.Args数组变量args[0]代表程序自身,3个if语句len(args)条件判断右值也都小了1,按照书本编写代码运行时将会一直执行Usage()指向的匿名函数,显示如下

USAGE: calc command [arguments] ...

The commands are:
        add     Addition of two values.
        sqrt    Square root of a non-negative value.

正确的calc.go代码如下:

// calc.go
   package main
   
   import (
       "fmt"
       "os"
       "simplemath"
       "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
       if args == nil || len(args) < 3 {
           Usage()
           return
       }
   
       switch args[1] {
       case "add":
           if len(args) != 4 {
               fmt.Println("USAGE: calc add <integer1><integer2>")
               return
           }
           v1, err1 := strconv.Atoi(args[2])
           v2, err2 := strconv.Atoi(args[3])
           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 {
               fmt.Println("USAGE: cale 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()
       }
   }

本文出自 “松松” 博客,请务必保留此出处http://dongsong.blog.51cto.com/916653/1587144

时间: 2024-10-11 09:45:24

《Go语言编程》【1.5 工程管理】calc.go的代码错误的相关文章

《Go语言编程》【3.6 完整示例】代码错误和文件目录结构

1. 音乐结构体命名错误,不是Music,而是MusicEntry,如下: 2. 包名错误,不是library,而是mlib: 3. manager.go代码Remove函数删除中间元素有错,index-1应当改成index: 4. m0变量初始化错误,"Celion Dion", 为多余,MP3应当加上双引号: 5. manager_test.go代码错误,无Genre: 6. manager_test.go代码错误,err多余: 7. 少了wav.go代码,可以直接拷贝mp3.go

《Go语言编程》【2.7 完整示例】的错误

今天看<Go语言编程>再次发现了两处错误,一处是目录名称algorithms,根据上下文推测,目录名应当是没有最后一个字幕s的algorithm,因为最后main主程序import导入包时.调用排序函数时,以及编译环节时,都采用了algorithm这个名字,书中结构如下图: 同时按照书中所示的程序目录结构编译会报错: can't load package cannot find package 经过重新整理,修改成如下目录结构后编译不再报无法加载包和无法找到包的错误: 下图是修改成正确结构后编

《Go语言编程》[4.4 并发通信]代码thread.c和thread.go错误

thread.c程序pthread_create函数第三个参数为线程函数的起始地址,文中并无add函数,源代码如下: thread.c编译时会报未声明错误: 根据语境推测应该是count,替换如下: 重新编译,gcc编译时在最后加参数-lpthread,否则编译报对 pthread_create和pthread_join未定义的引用如下: 应当是行末最后加入-lpthread编译,正确编译命令: gcc -lpthread thread.c -o main thread.go程序无z变量,应当是

Go语言编程(旧读书笔记)

Go语言编程 目录 [隐藏] 1 前言 2 初识Go语言 3 顺序编程 4 OOP 5 并发编程 6 网络编程 7 安全编程 8 工程管理 9 开发工具 10 进阶话题 11 附录A [编辑]前言 协程? go run('test') Go强制了{ }的编写风格: if expression { 错误处理: defer?相当于finally?注意这里的作用域,defer之前似乎没有用{ }把整个(try)块括起来? defer相当于说推迟语句的执行,其内部实现会自动管理嵌套作用域的问题? Go允

《Go语言编程》calc.go的错误

最近看由人民邮电出版社许式伟 吕桂华等编著<Go语言编程>[第1章初识Go语言][1.5 工程管理]时,发现了示例代码calc.go有几处错误,args := os.Args数组变量args[0]代表程序自身,3个if语句len(args)条件判断右值也都小了1,按照书本编写代码运行时将会一直执行匿名函数Usage(),显示如下: USAGE: calc command [arguments] ... The commands are: add     Addition of two valu

Go语言编程

第1章 初识Go语言 1.1 语言简史 1.2 语言特性 1.2.1 自动垃圾回收 1.2.2 更丰富的内置类型 1.2.3 函数多返回值 1.2.4 错误处理 1.2.5 匿名函数和闭包 1.2.6 类型和接口 1.2.7 并发编程 package main import "fmt" func sum(values []int,resultChan chan int) { sum := 0 for _,value := range values { sum += value } re

华为C语言编程规范

DKBA华为技术有限公司内部技术规范DKBA 2826-2011.5C语言编程规范2011年5月9日发布 2011年5月9日实施华为技术有限公司Huawei Technologies Co., Ltd.版权所有 侵权必究All rights reserved密级:confidentiality levelDKBA 2826-2011.52011-06-02 华为机密,未经许可不得扩散 Huawei Confidential 第2页,共61页Page 2 , Total61修订声明Revision

Linux下C语言编程基础学习记录

VIM的基本使用  LINUX下C语言编程 用gcc命令编译运行C语言文件 预处理阶段:将*.c文件转化为*.i预处理过的C程序. 编译阶段:将*.i文件编译为汇编代码*.s文件. 汇编阶段:将*.s文件转化为*.o的二进制目标代码文件. 链接阶段:将*.o文件转化为可执行文件. 生成可执行文件:将*.o转换为可执行文件. 执行可执行C语言文件. gcc常用选项列表 -c      只编译不链接,生成目标文件“.o” -S      只编译不汇编,生成编码代码 -E      只进行预编译,不做

7款易上手C语言编程软件推荐

C语言是一门历史很长的编程语言,其编译器和开发工具也多种多样,其开发工具包括编译器,现举几个开发工具供大家选择,当然也要根据自己的操作系统来选择适合自己的开发工具. 好多刚开始接触c语言的朋友都想知道用上面软件开发c语言比较好,一般来说微软的东西肯定是最好的,更适合新手学习,等上手了就可以接触别的软件了. Microsoft Visual C++ .Microsoft Visual Studio. DEV C++.Code::Blocks.Borland C++.WaTCom C++.Borla