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) }
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/12555.html