《go语言圣经》练习答案--1.2. 命令行参数
练习 1.1: 修改echo
程序,使其能够打印os.Args[0]
,即被执行命令本身的名字。
package main
import (
"fmt"
"os"
)
func main() {
var s, sep string
for i := 0; i < len(os.Args); i++ {
s += sep + os.Args[i]
sep = " "
}
fmt.Println(s)
}
练习 1.2: 修改echo
程序,使其打印每个参数的索引和值,每个一行。
package main
import (
"fmt"
"os"
)
func main() {
for i := 0; i < len(os.Args); i++ {
fmt.Println(i, os.Args[i])
}
}
练习 1.3: 做实验测量潜在低效的版本和使用了strings.Join
的版本的运行时间差异。(1.6节讲解了部分time
包,11.4节展示了如何写标准测试程序,以得到系统性的性能评测。)
使用基准测试
test.go
package main
import (
"fmt"
"strings"
)
func stringJoin() string {
input := []string{"Welcome", "To", "China"}
result := strings.Join(input, " ")
return result
}
func stringPlus() string {
input := []string{"Welcome", "To", "China"}
var result, sep string
for _, j := range input {
result += sep + j
sep = " "
}
return result
}
func main() {
}
t_test.go
package main
import (
"testing"
)
func BenchmarkString2Join(b *testing.B) {
for i := 0; i < b.N; i++ {
stringJoin()
}
}
func BenchmarkString2Plus(b *testing.B) {
for i := 0; i < b.N; i++ {
stringPlus()
}
}
执行结果
goos: windows
goarch: amd64
pkg: hello
cpu: 11th Gen Intel(R) Core(TM) i7-11800H @ 2.30GHz
BenchmarkString2Join
BenchmarkString2Join-16 40078419 30.53 ns/op
BenchmarkString2Plus
BenchmarkString2Plus-16 17557642 66.40 ns/op
PASS
使用 time 包
package main
import (
"fmt"
"strings"
"time"
)
func timeCost() func() {
start := time.Now()
return func() {
tc := time.Since(start)
fmt.Printf("time cost = %v\n", tc)
}
}
func stringJoin() string {
defer timeCost()()
input := []string{"Welcome", "To", "China"}
result := strings.Join(input, " ")
return result
}
func stringPlus() string {
defer timeCost()()
input := []string{"Welcome", "To", "China"}
var result, sep string
for _, j := range input {
result += sep + j
sep = " "
}
return result
}
func main() {
stringJoin()
stringPlus()
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类