Go语言常用标准库

目录fmttimeflaglogioencoding/jsonstrconvmathtemplatenet/httpcryptosynccontextbytes数据格式反射osmodulestringpath/filepathcompress/gzipd

目录


fmt (Format)

fmt 包提供了格式化输入/输出函数,如打印到标准输出、读取用户输入等。

主要函数

  • Print: 打印多个值,不换行。
  • Println: 打印多个值并换行。
  • Printf: 格式化打印多个值。
  • Scan: 从标准输入读取一个或多个值。
  • Scanf: 按指定格式从标准输入读取一个或多个值。
  • Sprint: 将多个值转换为字符串。
  • Sprintf: 按指定格式将多个值转换为字符串。

示例代码

package main

import (
    "fmt"
)

func main() {
    fmt.Println("Hello, World!")
    var name string
    fmt.Print("请输入您的名字: ")
    fmt.Scan(&name)
    fmt.Printf("欢迎 %s 来到 Go 世界。\n", name)
}

time

time 包用于处理日期和时间。

主要函数

  • Now: 获取当前时间。
  • Parse: 解析指定格式的时间字符串。
  • Format: 将时间对象格式化为字符串。
  • Since: 计算两个时间点之间的时间差。
  • Sleep: 暂停执行一段时间。

示例代码

package main

import (
    "fmt"
    "time"
)

func main() {
    now := time.Now()
    fmt.Println("当前时间:", now.Format("2006-01-02 15:04:05"))
    t, _ := time.Parse("2006-01-02", "2023-09-01")
    fmt.Println("解析后的时间:", t)
}

flag

flag 包用于解析命令行参数。

主要函数

  • String: 创建一个字符串类型的命令行参数。
  • Int: 创建一个整数类型的命令行参数。
  • Bool: 创建一个布尔类型的命令行参数。
  • Parse: 解析命令行参数。

示例代码

package main

import (
    "flag"
    "fmt"
)

func main() {
    var name = flag.String("name", "World", "A name to greet.")
    flag.Parse()
    fmt.Printf("Hello, %s!\n", *name)
}

log

log 包提供基本的日志记录功能。

主要函数

  • Print: 打印日志信息。
  • Printf: 格式化打印日志信息。
  • Println: 打印日志信息并换行。
  • Fatal: 打印日志信息并退出程序。
  • Panic: 打印日志信息并触发 panic。

示例代码

package main

import (
    "log"
)

func main() {
    log.SetPrefix("[INFO] ")
    log.SetFlags(0)
    log.Println("程序开始运行")
}

io

io 包定义了一些接口,用于处理输入输出流。

主要函数

  • Copy: 复制数据流。
  • ReadAll: 读取所有数据。
  • WriteString: 写入字符串。

示例代码

package main

import (
    "io"
    "os"
)

func main() {
    _, err := io.Copy(os.Stdout, os.Stdin)
    if err != nil {
        panic(err)
    }
}

encoding/json

encoding/json 包实现了JSON数据格式的编码和解码。

主要函数

  • Marshal: 将结构体转换为 JSON 字符串。
  • Unmarshal: 将 JSON 字符串转换为结构体。
  • Encode: 将结构体编码为 JSON 并写入 Writer。
  • Decode: 从 Reader 中解码 JSON 数据并填充到结构体。

示例代码

package main

import (
    "encoding/json"
    "fmt"
)

type User struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}

func main() {
    user := User{Name: "Alice", Age: 30}
    data, _ := json.Marshal(user)
    fmt.Println(string(data))
}

strconv

strconv 包提供了字符串和基本类型之间的转换。

主要函数

  • Atoi: 将字符串转换为整数。
  • Itoa: 将整数转换为字符串。
  • ParseFloat: 将字符串转换为浮点数。
  • FormatFloat: 将浮点数转换为字符串。

示例代码

package main

import (
    "fmt"
    "strconv"
)

func main() {
    ageStr := "25"
    age, _ := strconv.Atoi(ageStr)
    fmt.Println("年龄:", age)
}

math

math 包提供了数学运算功能。

主要函数

  • Abs: 计算绝对值。
  • Sqrt: 计算平方根。
  • Pow: 计算幂。
  • Ceil: 向上取整。
  • Floor: 向下取整。
  • Round: 四舍五入。

示例代码

package main

import (
    "fmt"
    "math"
)

func main() {
    fmt.Println("圆周率:", math.Pi)
    fmt.Println("平方根:", math.Sqrt(16))
}

template

template 包用于模板处理,常用于Web应用中的页面渲染。

主要函数

  • New: 创建一个新的模板。
  • ParseFiles: 解析多个文件。
  • Execute: 执行模板并写入Writer。
  • ExecuteTemplate: 执行指定名称的模板。

示例代码

package main

import (
    "html/template"
    "os"
)

type Person struct {
    Name string
    Age  int
}

func main() {
    tmpl := template.Must(template.New("test").Parse(`<h1>Hello, {{.Name}}!</h1> Age: {{.Age}}`))
    p := Person{Name: "Alice", Age: 30}
    err := tmpl.Execute(os.Stdout, p)
    if err != nil {
        panic(err)
    }
}

net/http

net/http 包提供了HTTP客户端和服务端的功能。

主要函数

  • ListenAndServe: 监听并服务HTTP请求。
  • ServeMux: 默认的请求多路复用器。
  • HandleFunc: 注册处理函数。
  • Request: 创建HTTP请求。
  • Do: 发送HTTP请求。
  • ResponseWriter: 响应写入器。

示例代码

package main

import (
    "fmt"
    "net/http"
)

func helloHandler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintf(w, "Hello, World!")
}

func main() {
    http.HandleFunc("/", helloHandler)
    err := http.ListenAndServe(":8080", nil)
    if err != nil {
        panic(err)
    }
}

crypto

crypto 包提供了多种加密算法的支持。

主要函数

  • MD5: MD5哈希算法。
  • SHA1: SHA1哈希算法。
  • AES: AES加密算法。
  • RSA: RSA加密算法。
  • HMAC: HMAC算法。

示例代码

package main

import (
    "crypto/md5"
    "fmt"
    "hash"
)

func main() {
    h := md5.New()
    _, _ = h.Write([]byte("Hello, World!"))
    result := h.Sum(nil)
    fmt.Printf("%x\n", result)
}

sync

sync 包提供了同步原语,如互斥锁、条件变量等。

主要函数

  • Mutex: 互斥锁。
  • RWMutex: 读写锁。
  • WaitGroup: 等待组。
  • Once: 仅执行一次。
  • Map: 线程安全的映射。

示例代码

package main

import (
    "fmt"
    "sync"
)

var count int
var mutex sync.Mutex

func increment() {
    mutex.Lock()
    count++
    mutex.Unlock()
}

func main() {
    var wg sync.WaitGroup
    for i := 0; i < 1000; i++ {
        wg.Add(1)
        go func() {
            defer wg.Done()
            increment()
        }()
    }
    wg.Wait()
    fmt.Println("Count:", count)
}

context

context 包提供了上下文管理功能,用于取消操作、传递配置等。

主要函数

  • Background: 创建一个空上下文。
  • WithCancel: 创建一个可取消的上下文。
  • WithValue: 创建一个带有值的上下文。
  • Deadline: 设置上下文的截止时间。

示例代码

package main

import (
    "context"
    "fmt"
    "time"
)

func doWork(ctx context.Context) {
    select {
    case <-ctx.Done():
        fmt.Println("工作被取消了")
    default:
        fmt.Println("正在做工作...")
        time.Sleep(2 * time.Second)
    }
}

func main() {
    ctx, cancel := context.WithTimeout(context.Background(), 1*time.Second)
    defer cancel()

    go doWork(ctx)
    time.Sleep(3 * time.Second)
}

bytes

bytes 包提供了基于内存的字节缓冲区。

主要函数

  • Buffer: 字节缓冲区。
  • NewBuffer: 创建一个新的字节缓冲区。
  • ReadFrom: 从Reader中读取数据。
  • WriteTo: 将数据写入Writer。
  • Write: 写入字节切片。

示例代码

package main

import (
    "bytes"
    "fmt"
)

func main() {
    buf := new(bytes.Buffer)
    buf.WriteString("Hello, ")
    buf.WriteString("World!")
    fmt.Println(buf.String())
}

reflect

reflect 包提供了反射功能,可以动态获取和操作类型。

主要函数

  • ValueOf: 获取变量的值。
  • TypeOf: 获取变量的类型。
  • New: 创建一个新的值。
  • Call: 调用函数或方法。
  • Set: 设置变量的值。

示例代码

package main

import (
    "fmt"
    "reflect"
)

func main() {
    var x int = 10
    v := reflect.ValueOf(x)
    fmt.Println("Type:", v.Type())
    fmt.Println("Value:", v.Int())

    // 动态调用函数
    funcToAdd := reflect.ValueOf(add).Interface().(func(int, int) int)
    result := funcToAdd(5, 3)
    fmt.Println("Result:", result)
}

func add(a int, b int) int {
    return a + b
}

os

os 包提供了操作系统相关的功能,如文件和目录操作、环境变量访问等。

主要函数

  • Open: 打开一个已存在的文件。
  • Create: 创建一个新文件。
  • Remove: 删除一个文件。
  • Rename: 重命名一个文件。
  • Stat: 获取文件的状态信息。
  • Chdir: 改变当前工作目录。
  • Getenv: 获取环境变量的值。
  • Setenv: 设置环境变量。

示例代码

package main

import (
    "os"
)

func main() {
    f, err := os.Open("example.txt")
    if err != nil {
        panic(err)
    }
    defer f.Close()

    info, err := f.Stat()
    if err != nil {
        panic(err)
    }
    fmt.Println("File size:", info.Size())
}

go mod (不是标准库的一部分)

go mod 是Go语言的模块管理系统,它不是标准库的一部分,但它是现代Go项目中不可或缺的部分。

主要命令

  • init: 初始化一个新的模块。
  • tidy: 清理并更新模块依赖。
  • vendor: 创建或更新vendor目录。
  • why: 查看为何某个模块被依赖。

示例命令

go mod init example.com/myproject
go mod tidy

strings

strings 包提供了字符串处理的函数。

主要函数

  • Contains: 检查一个字符串是否包含另一个字符串。
  • Join: 将字符串切片连接成一个字符串。
  • Split: 将一个字符串分割成切片。
  • ToLower: 转换字符串为小写。
  • ToUpper: 转换字符串为大写。
  • Trim: 移除字符串两端的空白字符。

示例代码

package main

import (
    "fmt"
    "strings"
)

func main() {
    s := " Hello, World! "
    fmt.Println(strings.TrimSpace(s)) // 输出: "Hello, World!"
}

path/filepath

path/filepath 包提供了跨平台的文件路径操作。

主要函数

  • Join: 将路径元素连接起来。
  • Split: 分割路径。
  • Dir: 返回路径中的目录部分。
  • Base: 返回路径中的文件名部分。
  • Clean: 清洗路径。

示例代码

package main

import (
    "fmt"
    "path/filepath"
)

func main() {
    path := "/a/b/c/d.txt"
    dir, file := filepath.Split(path)
    fmt.Println("Directory:", dir) // 输出: "/a/b/c"
    fmt.Println("File:", file)     // 输出: "d.txt"
}

compress/gzip

compress/gzip 包提供了GZIP压缩和解压的功能。

主要函数

  • NewWriter: 创建一个新的gzip Writer。
  • NewReader: 创建一个新的gzip Reader。
  • Writer: gzip Writer接口。
  • Reader: gzip Reader接口。

示例代码

package main

import (
    "compress/gzip"
    "io/ioutil"
    "os"
)

func main() {
    gz, err := gzip.NewWriterLevel(os.Stdout, gzip.BestCompression)
    if err != nil {
        panic(err)
    }
    _, err = gz.Write([]byte("Hello, World!"))
    if err != nil {
        panic(err)
    }
    err = gz.Close()
    if err != nil {
        panic(err)
    }
}

database/sql

database/sql 包提供了SQL数据库的通用接口。

主要函数

  • Open: 打开一个数据库连接。
  • Query: 执行查询语句。
  • Exec: 执行非查询语句。
  • Begin: 开始一个事务。
  • Commit: 提交一个事务。
  • Rollback: 回滚一个事务。

示例代码

package main

import (
    "database/sql"
    _ "github.com/go-sql-driver/mysql" // MySQL驱动
    "log"
)

func main() {
    db, err := sql.Open("mysql", "user:password@tcp(localhost:3306)/dbname")
    if err != nil {
        log.Fatal(err)
    }
    defer db.Close()

    rows, err := db.Query("SELECT id, name FROM users")
    if err != nil {
        log.Fatal(err)
    }
    defer rows.Close()

    for rows.Next() {
        var id int
        var name string
        err := rows.Scan(&id, &name)
        if err != nil {
            log.Fatal(err)
        }
        log.Println(id, name)
    }
}

html/template

html/template 包提供了HTML安全的模板处理。

主要函数

  • New: 创建一个新的模板。
  • ParseFiles: 解析多个文件。
  • Execute: 执行模板并写入Writer。
  • ExecuteTemplate: 执行指定名称的模板。

示例代码

package main

import (
    "html/template"
    "os"
)

type Person struct {
    Name string
    Age  int
}

func main() {
    tmpl := template.Must(template.New("test").Parse(`<h1>Hello, {{.Name | safeHTML}}!</h1> Age: {{.Age}}`))
    p := Person{Name: "<script>alert('XSS');</script>", Age: 30}
    err := tmpl.Execute(os.Stdout, p)
    if err != nil {
        panic(err)
    }
}
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
天涯学馆
天涯学馆
0x9d6d...50d5
资深大厂程序员,12年开发经验,致力于探索前沿技术!