[日常] 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.通常一行对应一个结构体成员,成员的名字在前类型在后,不过如果相邻的成员类型如果相同的话可以被合并到一行 ...
随机推荐
- 【mock】后端不来过夜半,闲敲mock落灯花 (mockjs+Vuex+Vue实战)
mock的由来[假] 赵师秀:南宋时期的一位前端工程师 诗词背景:在一个梅雨纷纷的夜晚,正处于项目编码阶段,书童却带来消息:写后端的李秀才在几个时辰前就赶往临安度假去了,!此时手头仅有一个简单 ...
- TwoSum / Three Sum
Let's begin with a naive method. We first need to sort the array A[n]. And we want to solve the prob ...
- pcre库
pcre : perl compatible regular expressions , perl 兼容正则表达式 www.pcre.org 按装pcre是为了使Nginx支持具备URI重写功能的 ...
- 分布式管理GIT命令总结(转载)
GIT是个了不起但却复杂的源代码管理系统.它能支持复杂的任务,却因此经常被认为太过复杂而不适用于简单的日常工作.让我们诚实一记吧:Git是复杂的,我们不要装作它不是.但我仍然会试图教会你用(我的)基本 ...
- MyBatis全局配置文件标签详解
一.全局配置文件结构 configuration 配置 properties 属性:可以加载properties配置文件的信息 settings 设置:可以设置mybatis的全局属性 typeAli ...
- Spring Boot 中使用 Jedis 及 Lettuce的对比
首先,同样的程序,采用不同方式的Redis连接方式. defautl : 默认,0配置 ,也就是走的是 lettuce 单通道方式. 端口:8081 jedis : 使用Jedis 连接池. ...
- vue教程2-02 vue防止花括号{{}}闪烁,v-text和v-html、v-cloak
vue教程2-02 vue防止花括号{{}}闪烁,v-text和v-html.v-cloak 一.v-text和v-html <span>{{msg}}</span> --& ...
- 阿里Java开发规范&谷歌Java开发规范&华为Java开发规范&Tab键和空格比较&Eclipse的Tab键设置 总结
现在收集到如下有用的信息: 阿里巴巴公开的Java开发规范:https://yq.aliyun.com/articles/69327?utm_content=m_10088 google公开的Java ...
- 九、将cs文件快速的转换成可执行文件和响应文件(配置编译开关的文件)
1.将包含多个类型的源代码文件转换为可以部署的文件.有如下Program.cs的文件,代码如下: public sealed class Program { public static void Ma ...
- python 字符串操作。。
#字符串操作 以0开始,有负下标的使用0第一个元素,-1最后一个元素,-len第一个元 素,len-1最后一个元素 name= "qwe , erw, qwe "print(nam ...