目录fmttimeflaglogioencoding/jsonstrconvmathtemplatenet/httpcryptosynccontextbytes数据格式反射osmodulestringpath/filepathcompress/gzipd
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
包用于处理日期和时间。
主要函数
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
包用于解析命令行参数。
主要函数
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
包提供基本的日志记录功能。
主要函数
Print
: 打印日志信息。Printf
: 格式化打印日志信息。Println
: 打印日志信息并换行。Fatal
: 打印日志信息并退出程序。Panic
: 打印日志信息并触发 panic。示例代码
package main
import (
"log"
)
func main() {
log.SetPrefix("[INFO] ")
log.SetFlags(0)
log.Println("程序开始运行")
}
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
包实现了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
包提供了字符串和基本类型之间的转换。
主要函数
Atoi
: 将字符串转换为整数。Itoa
: 将整数转换为字符串。ParseFloat
: 将字符串转换为浮点数。FormatFloat
: 将浮点数转换为字符串。示例代码
package main
import (
"fmt"
"strconv"
)
func main() {
ageStr := "25"
age, _ := strconv.Atoi(ageStr)
fmt.Println("年龄:", age)
}
math
包提供了数学运算功能。
主要函数
Abs
: 计算绝对值。Sqrt
: 计算平方根。Pow
: 计算幂。Ceil
: 向上取整。Floor
: 向下取整。Round
: 四舍五入。示例代码
package main
import (
"fmt"
"math"
)
func main() {
fmt.Println("圆周率:", math.Pi)
fmt.Println("平方根:", math.Sqrt(16))
}
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
包提供了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
包提供了多种加密算法的支持。
主要函数
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
包提供了同步原语,如互斥锁、条件变量等。
主要函数
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
包提供了上下文管理功能,用于取消操作、传递配置等。
主要函数
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
包提供了基于内存的字节缓冲区。
主要函数
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
包提供了反射功能,可以动态获取和操作类型。
主要函数
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
包提供了操作系统相关的功能,如文件和目录操作、环境变量访问等。
主要函数
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语言的模块管理系统,它不是标准库的一部分,但它是现代Go项目中不可或缺的部分。
主要命令
init
: 初始化一个新的模块。tidy
: 清理并更新模块依赖。vendor
: 创建或更新vendor目录。why
: 查看为何某个模块被依赖。示例命令
go mod init example.com/myproject
go mod tidy
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
包提供了跨平台的文件路径操作。
主要函数
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
包提供了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/sq
l 包提供了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安全的模板处理。
主要函数
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)
}
}
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!