开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第7天,点击查看活动详情
今天来简单学习下Go常用的标准库fmt、Time、Log、Strconv、IO操作
fmt
下列函数会将内容输出到系统的标准输出stdout
- Print函数直接输出内容
- Printf函数支持格式化输出字符串
- Println函数会在输出内容的结尾添加一个换行符。
func Print(a ...interface{}) (n int, err error)
func Printf(format string, a ...interface{}) (n int, err error)
func Println(a ...interface{}) (n int, err error)
func main() {
fmt.Print("Hello world")
name := "YYQQ"
fmt.Printf("我是:%s\n", name)
fmt.Println("Hello world!!")
}
Fprint
下列函数会将内容输出到一个满足io.Writer接口类型的变量w中,通常用这个函数往文件中写内容
func Fprint(w io.Writer, a ...interface{}) (n int, err error)
func Fprintf(w io.Writer, format string, a ...interface{}) (n int, err error)
func Fprintln(w io.Writer, a ...interface{}) (n int, err error)
// 向标准输出写入内容
fmt.Fprintln(os.Stdout, "命令行输出内容")
fileObj, err := os.OpenFile("./xx.txt", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0644)
if err != nil {
fmt.Println("打开文件出错,err:", err)
return
}
name := "YYQQ"
// 向打开的文件中写入内容
fmt.Fprintf(fileObj, "my name is:%s", name)
Sprint
下列函数会把传入的数据转换成字符串返回
func Sprint(a ...interface{}) string
func Sprintf(format string, a ...interface{}) string
func Sprintln(a ...interface{}) string
s1 := fmt.Sprint("YYQQ")
name := "YYQQ"
age := 18
s2 := fmt.Sprintf("name:%s,age:%d", name, age)
s3 := fmt.Sprintln("YYQQ")
fmt.Println(s1, s2, s3)
获取输入
上面是输出数据,那么使用Go中的fmt.Scan、fmt.Scanf、fmt.Scanln三个函数则可以从命令行中获取用户的输入
func Scan(a ...interface{}) (n int, err error)
func Scanf(format string, a ...interface{}) (n int, err error)
func Scanln(a ...interface{}) (n int, err error)
Time
time包提供了显示时间和计算时间的函数,日历计算采用的是公历
通过time.Now()函数获取当前时间的对象,然后通过时间对象获取相应的年月日时分秒等信息
func timeDemo() {
now := time.Now() //获取当前时间
fmt.Printf("current time:%#v\n", now)
year := now.Year() //年
month := now.Month() //月
day := now.Day() //日
hour := now.Hour() //小时
minute := now.Minute() //分钟
second := now.Second() //秒
fmt.Printf("%d-%02d-%02d %02d:%02d:%02d\n", year, month, day, hour, minute, second)
}
时间操作
Add()函数来计算一个时间加上一个时间间隔得到的时间:
func (t Time) Add(d Duration) Time
Sub()函数来计算两个时间之间的差值
func (t Time) Sub(u Time) Duration
想要计算当前时间之前的日期,间隔为d,可以使用time.Add(-d)
Equal()函数判断两个时间是否相同,会考虑时区的影响
func (t Time) Equal(u Time) bool
Before()函数如果t代表的时间点在u之前,返回真;否则返回假
func (t Time) Before(u Time) bool
After()函数如果t代表的时间点在u之后,返回真;否则返回假
func (t Time) After(u Time) bool
Log
log包定义了Logger类型,提供了一些格式化输出的方法
package main
import (
"log"
)
func main() {
log.Println("这是一个日志。")
v := "很普通的"
log.Printf("这是一条%s日志。\n", v)
}
默认情况下的logger只会提供日志的时间信息,我们可以使用SetFlags函数来添加一些文件名和行号
func Flags() int
func SetFlags(flag int)
Strconv
strconv包实现了基本数据类型与其字符串表示的转换,主要有以下常用函数: Atoi():(将字符串类型的整数转换为int类型)、 Itoa():(将int类型数据转换为对应的字符串)、parse系列、format系列、append系列等。
详细的使用方法可以查看官方文档
IO操作
打开和关闭文件
os.Open()函数能够打开一个文件,返回一个*File和一个err,使用close()方法可以关闭文件
package main
import (
"fmt"
"os"
)
func main() {
// 只读方式打开当前目录下的test.go文件
file, err := os.Open("./test.go")
if err != nil {
fmt.Println("open file failed!, err:", err)
return
}
// 关闭文件
file.Close()
}
写文件
package main
import (
"fmt"
"os"
)
func main() {
// 新建文件
file, err := os.Create("./xxx.txt")
if err != nil {
fmt.Println(err)
return
}
defer file.Close()
//写文件
file.WriteString("YYQQ\n")
}
读文件
文件读取可以用file.Read(),读到文件末尾会返回io.EOF的错误
package main
import (
"fmt"
"io"
"os"
)
func main() {
file, err := os.Open("./test.txt")
if err != nil {
fmt.Println("open file err:", err)
return
}
defer file.Close()
// 定义接收文件读取的字节数组
var buf [128]byte
content := make([]byte, 100)
for {
n, err := file.Read(buf[:])
//读到文件结尾
if err == io.EOF {
break
}
if err != nil {
fmt.Println("read file err,", err)
return
}
content = append(content, buf[:n]...)
}
fmt.Println(string(content))
}
输出结果如下:
总结
今天简单的学习了Go常用的标准库(一),还有很多细节的用法可以查看官方文档,对于刚入门go语言的我来说,还有许多地方需要学习,有错误的地方欢迎大家指出,共同进步!!