在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
1.每个包都有一个全局唯一的导入路径 2.按照惯例,一个包的名字和包的导入路径的最后一个字段相同 练习 2.2: 写一个通用的单位转换程序,用类似cf程序的方式从命令行读取参数,如果缺省的话则是从标准输入读取参数,然后做类似Celsius和Fahrenheit的单位转换,长度单位可以对应英尺和米,重量单位可以对应磅和公斤等。
1.创建目录mkdir /home/ubuntu/gobook/src/unitconv/ 2.目录下创建包源文件unitconv.go 包文件unitconv.go package unitconv import( "fmt" ) //定义类型 type Foot float64 type Meter float64 /* 米转换成英尺 */ func MtoF(m Meter) Foot{ m = m/0.3048 return Foot(m) } /* 英尺转换成米 */ func FtoM(f Foot) Meter{ f *= 0.3048 return Meter(f) } /* 类型的String方法 */ func (f Foot)String() string{ return fmt.Sprintf("%gft",f) } /* 类型的String方法 */ func (m Meter)String() string{ return fmt.Sprintf("%gm",m) }
主程序unit.go package main import( "unitconv" "fmt" "strconv" "os" "bufio" ) func main(){ //练习 2.2: 写一个通用的单位转换程序,用类似cf程序的方式从命令行读取参数,如果缺省的话则是从标准输入读取参数,然后做类似Celsius和Fahrenheit的单位转换,长度> 单位可以对应英尺和米,重量单位可以对应磅和公斤等。 flag := 0//定义一个标志位 for _,v := range os.Args[1:]{ if v!=""{ flag=1//标志位 } conv(v) //fmt.Println(v) } //判断是否有命令行传参 if flag!=0{ return } //从标准输入读 fmt.Print("请输入数字:") input := bufio.NewScanner(os.Stdin) input.Scan() unitStr := input.Text() conv(unitStr) } /* 转换函数 */ func conv(pa string) { p,_ := strconv.ParseFloat(pa,64) //显式类型转换 pMeter := unitconv.Meter(p) pFoot := unitconv.Foot(p) a := unitconv.MtoF(pMeter) b := unitconv.FtoM(pFoot) fmt.Printf("%s = %s ; %s = %s \n",pMeter,a,pFoot,b) }
|
请发表评论