[日常] 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语言圣经--包和文件-导入包习题的更多相关文章
- [日常] go语言圣经-声明,变量,赋值,类型,包和文件习题
go语言圣经-声明1.四种类型的声明语句:var.const.type和func,分别对应变量.常量.类型和函数实体对象的声明2.包一级声明语句声明的名字可在整个包对应的每个源文件中访问,局部声明的名 ...
- [日常] Go语言圣经-示例: 并发的目录遍历习题
练习 8.9: 编写一个du工具,每隔一段时间将root目录下的目录大小计算并显示出来. package main import ( // "filepath" "fla ...
- [日常] Go语言圣经--示例: 并发的Clock服务习题
练习 8.1: 修改clock2来支持传入参数作为端口号,然后写一个clockwall的程序,这个程序可以同时与多个clock服务器通信,从多服务器中读取时间,并且在一个表格中一次显示所有服务传回的结 ...
- [日常] Go语言圣经-错误,函数值习题
Go语言圣经-错误 1.panic异常.panic是来自被调函数的信号,表示发生了某个已知的bug 2.任何进行I/O操作的函数都会面临出现错误的可能 3.错误是软件包API和应用程序用户界面的一个重 ...
- [日常] GO语言圣经-并发获取多个URL
go语言圣经-并发获取多个URL 1.GO最新奇的特性就是对并发编程的支持,goroutine和channel 2.goroutine是一种函数的并发执行方式,而channel是用来在goroutin ...
- go语言,第三方包相对路径导入包引起的问题及解决方案(goquery)
对go语言而言,跟踪init很显然包有且仅有一次被导入的可能. 但是重复引用了goquery包,后编译出现问题 项目涉及相关目录 ├── main.go└── parse └── parse.g ...
- [日常] Go语言圣经-Panic异常,Recover捕获异常习题
Go语言圣经-Panic异常1.当panic异常发生时,程序会中断运行,并立即执行在该goroutine中被延迟的函数(defer 机制)2.不是所有的panic异常都来自运行时,直接调用内置的pan ...
- [日常] Go语言圣经-匿名函数习题
Go语言圣经-匿名函数1.拥有函数名的函数只能在包级语法块中被声明,通过函数字面量(function literal),我们可绕过这一限制,在任何表达式中表示一个函数值2.通过这种方式定义的函数可以访 ...
- [日常] Go语言圣经--结构体,JSON习题
Go语言圣经-结构体 1.结构体是一种聚合的数据类型,是由零个或多个任意类型的值聚合成的实体 2.通常一行对应一个结构体成员,成员的名字在前类型在后,不过如果相邻的成员类型如果相同的话可以被合并到一行 ...
随机推荐
- 什么是PAGELATCH和PAGEIOLATCH
在分析SQL server 性能的时候你可能经常看到 PAGELATCH和PAGEIOLATCH.比方说 Select * from sys.dm_os_wait_stats 的输出里面就有Latch ...
- ASP.NET判断是否为手机登录
protected void Page_Load(object sender, EventArgs e) { MobileHandle(); } 页面加载时候判断是否为手机登录 protected v ...
- 关于GridControl--gridview的下拉框列(下拉列表列)
1.Run Designer→Columns→需要设置的列→Columns properties→ColumnsEdit→New→选择(repositoryItemComboBox1) 2.给下拉框列 ...
- Winform生成安装程序时配置自启动
1.右击安装编辑程序,在“视图”菜单中,选择“注册表”. 2.创建“键”:HKCU\Software\Microsoft\Windows\CurrentVersion\Run 3.右键Run,新建“字 ...
- [leetcode.com]算法题目 - Pascal's Triangle
Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows = 5,Retur ...
- [Vuejs] webpack+vue-cli打包如何引用相对路径
默认情况下通过webpack+vuec-li打包的css.js等资源,路径都是绝对的,即static在根目录下,假如部署到带有文件夹目录的项目中,资源路径就会出错,如何解决. 1.修改资源引用相对路径 ...
- POJ 2538
#include<string> //#include #include<stdio.h> #include<iostream> using namespace s ...
- 剑指offer八之跳台阶
一.题目 一只青蛙一次可以跳上1级台阶,也可以跳上2级.求该青蛙跳上一个n级的台阶总共有多少种跳法. 二.思路 a.如果两种跳法,1阶或者2阶,那么假定第一次跳的是一阶,那么剩下的是n-1个台阶,跳法 ...
- JavaScript -- Window-Confirm
-----032-Window-Confirm.html----- <!DOCTYPE html> <html> <head> <meta http-equi ...
- 05 - JavaSE之数组
一维数组 java中的数组是引用类型,分配在堆空间上. 一维数组的声明方式: type var[]; type[] var; java中声明数组时不能指定其长度,如下,因为java中的数组是分配在堆空 ...