1.1、修改 echo 程序,使其能够打印 os.Args[0] ,即被执行命令本身的名字。

// echo1.go
package mainimport ("fmt""os"
)func main() {var s, sep stringfor i := 0; i < len(os.Args); i++ {s += sep + os.Args[i]sep = " "}fmt.Println(s)
}
输出结果:
$ ./test aa bb cc./test aa bb cc

1.2、修改 echo 程序,使其打印每个参数的索引和值,每个一行。

// echo2.go
package mainimport ("fmt""os"
)func main() {for line, arg := range os.Args[0:] {fmt.Println("num = ", line, ", arg = ", arg)}
}
输出结果:
$ ./test aa bb ccnum =  0 , arg =  ./testnum =  1 , arg =  aanum =  2 , arg =  bbnum =  3 , arg =  cc

1.3、做实验测量潜在低效的版本和使用了 strings.Join 的版本的运行时间差异。

// stringEffic_test.go
package mainimport ("strings""testing"
)func BenchmarkString2Join(b *testing.B) {for i := 0; i < b.N; i++ {input := []string{"Welcome", "To", "JiangSu"}result := strings.Join(input, " ")if result != "Welcome To JiangSu" {b.Error("Unexcepted result:" + result)}}
}func BenchmarkString2Plus(b *testing.B) {for i := 0; i < b.N; i++ {input := []string{"Welcome", "To", "JiangSu"}var s, sep stringfor j := 0; j < len(input); j++ {s += sep + input[j]sep = " "}if s != "Welcome To JiangSu" {b.Error("Unexcepted result" + s)}}
}
输出结果:
$ go test -bench=BenchmarkString2Plusgoos: darwingoarch: amd64BenchmarkString2Plus-4       20000000           115 ns/opPASSok      _/Users/Application/go/src/test 2.435s
$ go test -bench=BenchmarkString2Joingoos: darwingoarch: amd64BenchmarkString2Join-4       20000000            66.3 ns/opPASSok    _/Users/Application/go/src/test 1.399s

1.7、函数调用io.Copy(dst, src)会从src中读取内容,并将读到的结果写入到dst中,使用这个函数替代掉例子中的ioutil.ReadAll来拷贝响应结构体到os.Stdout,避免申请一个缓冲区( 例子中的b) 来存储。记得处理io.Copy返回结果中的错误。

// fetch_alter
package mainimport ("fmt""io""net/http""os"
)func main() {for _, url := range os.Args[1:] {resp, err := http.Get(url)if err != nil {fmt.Fprintf(os.Stderr, "fetch: %v\n", err)os.Exit(1)}nbytes, err := io.Copy(os.Stdout, resp.Body)resp.Body.Close()if err != nil {fmt.Fprintf(os.Stderr, "fetch: %v\n", err)os.Exit(1)}fmt.Printf("%s\n", nbytes)}
}

1.8、修改fetch这个范例,如果输入的url参数没有 http:// 前缀的话,为这个url加上该前缀。你可能会用到strings.HasPrefix这个函数。

// fetch_prefix.go
package mainimport ("fmt""io/ioutil""net/http""os""strings"
)func main() {for _, url := range os.Args[1:] {if !strings.HasPrefix(url, "http://") {url = strings.Join([]string{"http://", url}, "")}fmt.Printf("%s\n", url)resp, err := http.Get(url)if err != nil {fmt.Fprintf(os.Stderr, "fetch: %v\n", err)os.Exit(1)}b, err := ioutil.ReadAll(resp.Body)resp.Body.Close()if err != nil {fmt.Fprintf(os.Stderr, "fetch: %v\n", err)os.Exit(1)}fmt.Printf("%s\n", b)}
}

1.9、修改fetch打印出HTTP协议的状态码,可以从resp.Status变量得到该状态码。

// fetch_status.go
package mainimport ("fmt""net/http""os"
)func main() {for _, url := range os.Args[1:] {resp, err := http.Get(url)if err != nil {fmt.Fprintf(os.Stderr, "fetch: %v\n", err)os.Exit(1)}b := resp.Statusfmt.Printf("%s\n", b)}
}
输出结果:
$ ./test http://www.baidu.com
200 OK

【go语言圣经】第一章--课后习题相关推荐

  1. 《计算机网络技术》第一章课后习题答案(全)

    <计算机网络技术>第一章课后习题答案(全) 1.请从资源共享的角度给出计算机网络的定义. 答:计算机网络,是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在 ...

  2. 机器学习 周志华 第一章课后习题

    机器学习 周志华 第一章课后习题 1.1 1.2 1.3 1.4 1.5 1.1 在下面这张图片中若只包含编号为1和4的两个样例,试给出相应的版本空间. 书上实例: 1.表 1.1 对应的假设空间如下 ...

  3. 计算机课第一章答案,计算机应用基础第一章课后习题参考答案答案

    计算机应用基础第一章课后习题参考答案答案 第1章 课后习题 一.简答题: 1.电子计算机的发展大致可分哪几代?请说出各个时代电子计算机的特点. 1. 第一代电子计算机 第一代电子计算机是电子管计算机, ...

  4. 《工程伦理》网课第一章课后习题答案

    工程伦理1-13章汇总: <工程伦理>网课第一章课后习题答案_u011895157的博客-CSDN博客 <工程伦理>网课第二章课后习题答案_u011895157的博客-CSDN ...

  5. c语言定义int 输出4386,大学C语言第五章课后习题参考程序

    考试,二级C语言备考 第五章课后习题参考程序 5.1 编写程序,求100-2000之间所有3的倍数之和,当和大于1000时结束. (参考答案:900) #include int main() { in ...

  6. 工程伦理(2021春)第一章课后习题答案

    工程伦理(2021春)第二章课后习题答案 工程伦理(2021春)第三章课后习题答案 工程伦理(2021春)第四章课后习题答案 工程伦理(2021春)第五章课后习题答案 工程伦理(2021春)第六章课后 ...

  7. 《Python语言程序设计》王恺 机械工业出版社 第一章课后习题答案

    第一章 初识Python 1.6 课后习题 (1)高级语言翻译为机器语言的方式有两种:一种是编译,一种是解释.Python属于解释型语言 (2)Python程序支持两种运行方式:交互式和脚本式 (3) ...

  8. C语言程序设计教程(第三版)李凤霞 第一章课后习题答案

    第一章:程序设计基础知识 一. 单项选择题 1.面向过程的程序设计语言是________. A)机器语言 B)汇编语言 C)高级语言 D)第四代语言 2.程序设计一般包含以下四个步骤,其中其中首先应该 ...

  9. 数据库系统概念原书第六版黑皮书第一章课后习题作业答案

    文章目录 1.8列出文件处理系统和DBMS之间的四个显著区别. 1.9 解释物理数据独立性的概念,以及它在数据库系统中的重要性. 1.10 列出数据库管理系统的五个职责.对每个职责,说明当它不能被履行 ...

  10. 第一章课后习题及答案

    第一章习题及答案 转载于:https://www.cnblogs.com/hhdn/archive/2007/02/28/659587.html

最新文章

  1. 使用nodejs搭建HTTPS server
  2. VS2015调试时没有启动IIS Express Web服务器 或者停止调试时 IIS Express 跟着关闭
  3. 批处理——服务器的web文件备份
  4. “==“和equals的区别是什么(史上最全总结、最靠谱)
  5. .NET Core项目从xproj+project.json向csproj迁移简介
  6. python replace替换多个字符_关于python:使用string.replace(x,y)替换所有
  7. getter 和 setter方法
  8. 用终端访问路由器设置端口开发_网络故障排查最全总结!ONU、机顶盒、路由器常见网络问题及处理方法...
  9. opencv配置中常见问题
  10. java webcms系统源码_java轻量级的CMS系统-天梯
  11. 基于springboot的鲜花商城系统
  12. 190506每日一句
  13. java单元测试方法的使用
  14. python输出时间差_利用python计算时间差(返回天数)
  15. HTML5——meta标签总结
  16. 图像处理公共数据库下载地址集锦
  17. 29岁,从绝望崩溃到年入50万:这个技能,决定你5年后的人生!
  18. WorldFirst公布本地化品牌名称,跨境收款万里汇!
  19. 无线路由dns服务器地址,无线路由器更换DHCP地址段、DNS地址设置
  20. 【读论文-笔记】——1.沐神读Alexnet

热门文章

  1. 文本编辑器常用快捷键
  2. 由浅入深——晶体管放大电路基础
  3. 怎么用URLOS自建CDN给网站静态内容加速
  4. 【测试沉思录】2. 如何保障需求质量(下):你应该做到的
  5. 剥opgw光缆工具_DIY必备!皮线光缆专用,让光纤入户简单,开剥光缆快速更不伤光纤...
  6. 自然语言处理(三)文章高频词提取
  7. uniapp,map地图组件打包原生APP
  8. 聚合供应链,整合了京东、阿里、天猫、苏宁这些平台的优质货源,在赋能输出给中小微企业平台。
  9. win10闪讯用户网络图标消失
  10. 云计算与大数据的联系