浅谈Go的常用标准库(一)

116 阅读4分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第7天,点击查看活动详情

今天来简单学习下Go常用的标准库fmt、Time、Log、Strconv、IO操作

fmt

Print

下列函数会将内容输出到系统的标准输出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!!")
} 

image.png

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

image.png

时间操作

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

输出结果如下: image.png

image.png

总结

今天简单的学习了Go常用的标准库(一),还有很多细节的用法可以查看官方文档,对于刚入门go语言的我来说,还有许多地方需要学习,有错误的地方欢迎大家指出,共同进步!!