[日常] Go语言圣经--包和文件-导入包习题
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) }
十年开发经验程序员,离职全心创业中,历时三年开发出的产品《唯一客服系统》
一款基于Golang+Vue开发的在线客服系统,软件著作权编号:2021SR1462600。一套可私有化部署的网站在线客服系统,编译后的二进制文件可直接使用无需搭开发环境,下载zip解压即可,仅依赖MySQL数据库,是一个开箱即用的全渠道在线客服系统,致力于帮助广大开发者/公司快速部署整合私有化客服功能。
开源地址:唯一客服(开源学习版)
官网地址:唯一客服官网