GO语言标准库
fmt
fmt包实现了printf和scanf的格式化I/O 。主要分为向外输出内容和获取输入内容两大部分。
向外输出:
print 会将内容直接输出到系统的标准输出,printf在于支持格式化输出字符串,println会输出内容后自动换行。
Fprint
此系列函数会将内容输出到一个io.write接口类型的变量W中,我们通常用这个函数往文件中写入内容。
Sprint
此系列函数会将传入的数据生成并返回一个字符串。
Errorf
Error函数根据format参数生成格式化字符串病返回一个包含该字符串的错误。
格式化占位符
%v 值得默认格式表示
%+v 类似%v 但输出结构体时会添加字段名
%#v 值的Go语法表示
%T 打印值的类型
%% 百分号
%t true或false
%c 该值对应的unicode码值
%d 表示为十进制
%O 表示为八进制
%X 表示为十六进制 大小写对应的a-f 不一样
%u 表示为unicode 格式
%q 该值对应的单引号括起来的GO语法字符字面值 必要时会采用安全的转义表示
%b无小数部分
%e 科学计数法
%f 有小数部分但是没有指数部分
%g 根据实际情况采用%e 或%f格式
%s 直接输出字符串或者字符【】
%q 该值对应的双括号括起来的Go语法字符串的字面值
%x 每个字节用两字符十六进制数表示
%p 表示为十六进制 前面加上ox
获取输入
fmt.Scan
Scan从标准输入扫描文本,读取由空白符分隔的值保存到传递给本函数的参数中,换行符视为空白符。
fmt.Scanf
Scanf从标准输入扫描文本,根据format参数指定的格式去读取由空白符分隔的值保存到传递给本函数的参数中。
fmt.Scanln
Scanln类似Scan,它在遇到换行时才停止扫描。最后一个数据后面必须有换行或者到达结束位置。
TIME
time包
时间和日期是我们编程中经常会用到的,本文主要介绍了 Go 语言内置的 time 包的基本用法。time 包提供了一些关于时间显示和测量用的函数。time 包中日历的计算采用的是公历,不考虑润秒。
时间类型
now = time.Now()
用这个获取当前时间 now.Year() …
时间间隔
time.Duration
是time
包定义的一个类型,它代表两个时间点之间经过的时间,以纳秒为单位。time.Duration
表示一段时间间隔,可表示的最长时间段大约290年。
time.Duration
表示1纳秒,time.Second
表示1秒。
GO语言的时间对象提供的方法如下:
func (t time) Add(d Duration) Time
Add Sub Equal Before After
定时器
使用time.Tick (时间间隔)来设置定时器 定时器本质就是一个通道channel
时间格式化
time.Format 能够使一个时间对象格式化输出为一个指定布局的文本表示形式;
FLAG
Go语言内置的flag
包实现了命令行参数的解析,flag
包使得开发命令行工具更为简单。
os.Args
如果你只是简单的想要获取命令行参数,可以像下面的代码示例一样使用os.Args
来获取命令行参数。
flag.Type()
基本格式如下: flag.Type(flag默认名字,默认值,帮助信息)*Type
flag.TypeVar()
基本格式如下:flag.TypeVar(Type指针, flag名, 默认值, 帮助信息)
flag.Parse()
通过以上两种方法定义好命令行flag参数后,需要调用flag.Parse()来对命令行参数进行解析;
支持的命令行参数格式有以下几种:
-flag xxx
(使用空格,一个-
符号)
--flag xxx
(使用空格,两个-
符号)-flag=xxx
(使用等号,一个-
符号)--flag=xxx
(使用等号,两个-
符号)
flage其他函数
用的命令行参数个数
log
Go语言内置的 log 包实现了简单的日志服务。
使用logger
log.Println()这会打印时间 默认输出到系统的标准错误
GO语言文件的操作
计算机中的文件是存储在外部介质(通常是磁盘)上的数据集合,文件分为文本文件和二进制文件。
打开和关闭文件
os.open()函数能够打开一个文件,返回*File和err 对于得到的文件实例调用close()方法能够关闭文件
读取文件
Read方法定义如下:
func (f *File) Read(b []byte) (n int, err error)
ioutil读取整个文件 这个比较简单
file, err := ioutil.ReadFile("文件地址")
if err != nil{
fmt.Println("read file falid,err:",err)
return
}
fmt.Println(file)
GO语言内置包之strconv
Go语言中strconv包实现了基本数据类型和其字符串表示的相互转换
string 与 int
Atoi():转换为int
s := "100"
il, err := strconv.Atoi(s)
if err != nil{
fmt.Println("niasnfk")
}
else fmt.Println(il)
Itoa(): 转换为字符
li :=200
s := strconv.Itoa(li)
Parse
Parse类函数用于转换字符串为给定类型的值:ParseBool()、ParseFloat()、ParseInt()、ParseUint()。
Format系例函数
Format系列函数实现了将给定类型数据格式化为string类型数据的功能。
GO语言基础之net/http
Go语言内置的net/http包十分的优秀,提供了HTTP客户端和服务端的实现。
http
超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。
r, err := http.Get("http://example.com/")
程序使用完response后必须关闭回复主体
resp ,err := http/Get("地址")
if err != nil{
fmt....
return
}
defer resp.Body.Close()
body,err := ioutil.ReadAll(resp.Body)
GO标准库 Context
在Go http包的Server中,每一个请求在都有一个对应的 goroutine 去处理。请求处理函数通常会启动额外的 goroutine 用来访问后端服务,比如数据库和RPC服务。用来处理一个请求的 goroutine 通常需要访问一些与请求特定的数据,比如终端用户的身份认证信息、验证相关的token、请求的截止时间。 当一个请求被取消或超时时,所有用来处理该请求的 goroutine 都应该迅速退出,然后系统才能释放这些 goroutine 占用的资源。
Go1.7加入了一个新的标准库context,它定义了Context类型,专门用来简化 对于处理单个请求的多个 goroutine 之间与请求域的数据、取消信号、截止时间等相关操作,这些操作可能涉及多个 API 调用。
context接口
type Context interface {
Deadline() (deadline time.Time, ok bool)
Done() <-chan struct{}
Err() error
Value(key interface{}) interface{}
}
-
Deadline方法需要返回当前Context被取消的时间,也就是完成工作的截止时间(deadline);
-
Done方法需要返回一个Channel,这个Channel会在当前工作完成或者上下文被取消之后关闭,多次调用Done方法会返回同一个Channel;
-
Err方法会返回当前Context结束的原因,它只会在Done返回的Channel被关闭时才会返回非空的值;
如果当前Context被取消就会返回Canceled错误;
如果当前Context超时就会返回DeadlineExceeded错误;
-
Value方法会从Context中返回键对应的值,对于同一个上下文来说,多次调用Value并传入相同的Key会返回相同的结果,该方法仅用于传递跨API和进程间跟请求域的数据;