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) 
 
} 

Go语言圣经--包和文件-导入包习题详解编程语言  

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/12555.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论