1. 文件操作:os
与io
使用场景:读写文件、目录遍历、权限控制
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| data, err := os.ReadFile("test.txt") if err != nil { log.Fatal(err) }
file, err := os.Open("large.log") defer file.Close() scanner := bufio.NewScanner(file) for scanner.Scan() { fmt.Println(scanner.Text()) }
err = os.WriteFile("output.txt", []byte("Hello"), 0644)
|
关键点:
- 使用
defer
确保文件描述符关闭
os.FileMode
控制Unix风格权限(如0755)
2. JSON处理:encoding/json
结构化数据编解码:
1 2 3 4 5 6 7 8 9 10 11 12
| type User struct { Name string `json:"name"` Age int `json:"age,omitempty"` }
user := User{Name: "Alice"} jsonData, _ := json.Marshal(user)
var u User json.Unmarshal([]byte(`{"name":"Bob"}`), &u)
|
高级技巧:
json.RawMessage
延迟解析部分JSON
- 自定义
MarshalJSON()
方法实现特殊序列化逻辑
- 使用
json.Encoder
/Decoder
处理流式JSON
go语言json序列化是通过反射获取结构体标签进行序列化
3. HTTP服务:net/http
快速启动Web服务器:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| func helloHandler(w http.ResponseWriter, r *http.Request) { if r.Method != "GET" { w.WriteHeader(http.StatusMethodNotAllowed) return } fmt.Fprintf(w, "Hello %s", r.URL.Query().Get("name")) }
http.HandleFunc("/hello", helloHandler)
log.Fatal(http.ListenAndServe(":8080", nil))
|
关键组件:
http.Request
:解析查询参数、Headers、Body
http.ResponseWriter
:设置状态码、写入响应
http.Client
:实现超时控制、连接池等客户端功能
1 2 3 4
| client := &http.Client{ Timeout: 5 * time.Second, } resp, err := client.Get("https://api.example.com")
|
4. 时间处理:time
包
时间点与时间段操作:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| now := time.Now() fmt.Println(now.Format("2006-01-02 15:04:05"))
t, _ := time.Parse(time.RFC3339, "2023-08-20T12:00:00Z")
duration := time.Since(t) fmt.Printf("已过去 %.0f 分钟", duration.Minutes())
timer := time.NewTimer(2 * time.Second) <-timer.C
|
注意事项:
- 时区处理务必显式指定
time.Location
- 高精度计时用
time.Now().UnixNano()
- 周期性任务推荐
time.Ticker
而非简单Sleep