介绍 Golang 尝使用的库函数。
介绍
- bytes
- bufio,可以对 os.File、io.Reader 等进行操作
- crypto:加解密相关工具包,如 md5/sha1/sha256/sha512/hmac
crypto.GenerateFromPassword
生产指定字符串的 bcrypt 哈希值
- 如果给定的成本小于 MinCost,则成本将设置为 DefaultCost
- 使用此包中定义的 CompareHashAndPassword 将返回的散列密码与其明文版本进行比较(相同的字符串,两次 GenerateFromPassword 是不同的)
- GenerateFromPassword 不接受超过 72 字节的密码,这是 bcrypt 将操作的最长密码
- golang.org/x/crypto/acme
- Package autocert provides automatic access to certificates from Let’s Encrypt and any other ACME-based CA
- encoding:编解码,如 base64/json
- flag:命令行获取参数
- path
- json
- log:日志模块
log.SetPrefix("gseo: ")
log.SetFlags(log.Flags | log.Llongfile) // 设置日志格式
log.Panicf("%s", "x") // panic 日志,之后退出
log.Fatalf("%s", "x") // fatal 日志,之后 os.Exit(1)
Stdin = NewFile(uintptr(syscall.Stdin), "/dev/stdin")
Stdout = NewFile(uintptr(syscall.Stdout), "/dev/stdout")
Stderr = NewFile(uintptr(syscall.Stderr), "/dev/stderr")
- net
- net.Conn 也实现了 io.Reader 和 io.Writer
- io
- os
- runtime
- runtime.Caller
func Caller(skip int) (pc uintptr, file string, line int, ok bool) {}
获取当前 go 程调用栈所执行函数的文件和行号信息,缺点:函数开销大
- 参数
skip=0
报告 Caller()的调用者的信息
skip=1
报告 Caller()的调用者的调用者的信息,依次类推
- sort
- strcov
- strings,下面的两个工具对内存数据操作:
- sync
- testing
- time:时间相关工具,
time.Sleep(time.Second * 3)
- 时间相关的格式,如 RFC3339 等,golang time 的实现参考
- golang.org/x/time/rate 限速器
- utf8
binary
: uint64
转换 byte
大端字节序列化/小端字节序列化
i := int64(-123456789)
fmt.Println(i)
b := make([]byte, 8)
binary.LittleEndian.PutUint64(b, uint64(i))
fmt.Println(b)
i = int64(binary.LittleEndian.Uint64(b))
fmt.Println(i)
uintptr
uintptr
是 Go
的内置类型,返回 无符号整数
,可用来存储内存地址,常用于 指针
运算
unsafe.Pointer
unsafe.Pointer
表示任意类型且可寻址的指针值,支持在不同指针类型之间进行转换,即任意可寻址的指针
任何类型的指针
可以转换为 Pointer
Pointer
可以转换为 任何类型的指针
uintptr
可以转换为 Pointer
Pointer
可以转换为 uintptr
- 其他方法
unsafe.Offsetof
返回成员变量在结构体中的偏移量,如 (*int64)(unsafe.Pointer(ptr + unsafe.Offsetof(n.j)))
package main
import (
"fmt"
"unsafe"
)
func main() {
num := 5
intPointer := &num
fPointer := (*float32)(unsafe.Pointer(intPointer))
fmt.Println(fPointer)
}