Go语言常用的标准库

本文介绍了Go语言的基础知识,包括日志打印、JSON序列化与反序列化、Base64编码、文件操作、目录操作、压缩解压以及时间处理。通过示例展示了如何使用标准输入、初始化函数以及数学库生成随机数。此外,还涵盖了时间函数的使用,如格式化日期和时间。
摘要由CSDN通过智能技术生成


打印日志

在这里插入图片描述

package main

import (
	"log"
	"os"
)

func logger() {
	log.Printf("%d\n", 5)//打印到控制台
	fout, err := os.OpenFile("my.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, os.ModePerm)//打开一个文件
	if err != nil {
		return
	}
	defer fout.Close()
	//输出一条日志信息到文件中
	logWriter := log.New(fout, "手动添加额外的信息", log.Ldate|log.Lmicroseconds)
	logWriter.Printf("%s\n", "这是一条测试信息")
}
func main() {
	logger()
}

在这里插入图片描述

系统调用命令

在这里插入图片描述

json的序列化和反序列化

在这里插入图片描述

type Student struct {
	Name string
	Age  int
}

func main() {
	stu := Student{"hjl", 18}
	bs, _ := json.Marshal(stu)
	fmt.Println(string(bs))
	bs, _ = sonic.Marshal(stu)
	fmt.Println(string(bs))
	var stu1 Student
	err := sonic.Unmarshal(bs, &stu1)
	if err != nil {
		fmt.Printf("错误\n")
		return
	}
	fmt.Println(stu1.Name)
}

在这里插入图片描述

base64

在这里插入图片描述


压缩和解压

在这里插入图片描述

func compressDemo() error {
	fin, err := os.Open("my.log")
	if err != nil {
		return err
	}
	defer fin.Close()
	stat, _ := fin.Stat()
	fmt.Printf("压缩前文件大小%d B\n", stat.Size())
	//创建一个压缩文件
	fout, err := os.OpenFile("my.zlib", os.O_CREATE|os.O_WRONLY, 0777)
	if err != nil {
		return err
	}
	defer fout.Close()
	bs := make([]byte, 1024)
	writer := zlib.NewWriter(fout)
	//将文件中的内容写到压缩文件中
	for {
		n, err := fin.Read(bs)
		if err == nil {
			writer.Write(bs[:n])
		} else {
			if err == io.EOF {
				break
			} else {
				fmt.Println(err)
				break
			}
		}
	}
	writer.Close()
	fin1, err := os.Open("my.zlib")
	if err != nil {
		return err
	}
	defer fin1.Close()
	stat1, _ := fin.Stat()
	fmt.Printf("压缩后文件大小%d B\n", stat1.Size())
	reader, err := zlib.NewReader(fin1)
	if err != nil {
		return err
	}
	io.Copy(os.Stdout, reader)
	reader.Close()

	return nil
}
func main() {
	compressDemo()
}

在这里插入图片描述


标准输入

在这里插入图片描述

文件操作

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

目录操作

在这里插入图片描述

在这里插入图片描述

func walk(path string) error {
	if subFiles, err := ioutil.ReadDir(path); err != nil {
		return err
	} else {
		for _, file := range subFiles {
			fmt.Println(file.Name())
			if file.IsDir() {
				if err := walk(filepath.Join(path, file.Name())); err != nil {
					return err
				}
			}
		}
	}
	return nil
}
func main() {
	walk(".")
}

在这里插入图片描述

init函数

只要引入了其他的包,就会在调用main函数之前自动调用这些包中的init函数。
所以init函数可以用来初始化这些包中的一些变量。
在这里插入图片描述

如果有多个包,其调用顺序如下:
在这里插入图片描述

在这里插入图片描述

包的可见性

在这里插入图片描述

在这里插入图片描述


数学库

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

生成随机数

在这里插入图片描述
在这里插入图片描述

如果想要生成真随机数,除了可以传入系统时间作为随机数种子以外:
rand.Seed(time.Now().Unix())
还可以使用 crypto/rand 包中的方法,这样生成的每次都是不同的随机数:

func main() {
	// 生成 10 个 [0, 128) 范围的真随机数。
	for i := 0; i < 10; i++ {
		result, _ := rand.Int(rand.Reader, big.NewInt(128))
		fmt.Println(result)
	}
}

在这里插入图片描述


时间函数

在这里插入图片描述

在这里插入图片描述

func main() {
	layout := "2006x01x02 15a04a05"
	now := time.Now()            //拿到当前的时间
	nowStr := now.Format(layout) //将当前的时间按照layout的格式转成字符串
	fmt.Println(nowStr)
	fmt.Println(now)
	fmt.Println(now.Year(), now.Month(), now.Day(), now.Hour(), now.Minute(), now.Second())
	<-time.After(3 * time.Second) //sleep三秒

	//将字符串再转回时间类
	loc, _ := time.LoadLocation("Asia/Shanghai")
	fmt.Println(loc)
	if t, err := time.ParseInLocation(layout, nowStr, loc); err == nil {
		fmt.Println(t.Year(), t.Month(), t.Day(), t.Hour(), t.Minute(), t.Second())
	} else {
		fmt.Println(err)
	}
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

今天也要写bug、

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值