Golang入门后,应该重点学习哪些实用包?
Golang入门后,应该重点学习哪些实用包? 在掌握了Go语言的基础知识后,有哪些内置包是我应该立即开始学习的,以及有哪些资源可以教授这些包?
3 回复
学习 net/http 并编写一些 HTTP 服务器和客户端,在不使用任何外部库的情况下实现有趣的功能——这样做你会学到很多东西,并且会为你打下坚实的基础。
想法
- 编写一个 HTTP 文件服务器,可以通过 HTTP 提供文件目录(带列表)。标准库在这方面会给你很多帮助。
- 为已发布的 API 编写一个 HTTP 客户端,例如 https://ip-api.com/docs/api:json
- 编写一个提供 JSON API 的 HTTP 服务器,用于将值保存到文件中并检索它们。
- 编写一个命令行客户端来读取和设置这些值。
- 编写一个提供 WebSocket 服务的 HTTP 服务器——实现一个聊天服务器。
对于Golang入门后的实用包学习,以下是我推荐的重点方向:
核心内置包
1. net/http - Web开发基础
package main
import (
"fmt"
"net/http"
)
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, %s!", r.URL.Path[1:])
}
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":8080", nil)
}
2. database/sql - 数据库操作
import (
"database/sql"
_ "github.com/go-sql-driver/mysql"
)
func main() {
db, err := sql.Open("mysql", "user:password@/dbname")
if err != nil {
panic(err)
}
defer db.Close()
rows, err := db.Query("SELECT id, name FROM users")
// 处理查询结果
}
3. encoding/json - JSON处理
import "encoding/json"
type User struct {
Name string `json:"name"`
Age int `json:"age"`
}
func main() {
// 序列化
user := User{Name: "Alice", Age: 30}
data, _ := json.Marshal(user)
// 反序列化
var newUser User
json.Unmarshal(data, &newUser)
}
4. sync - 并发控制
import "sync"
func main() {
var wg sync.WaitGroup
var mu sync.Mutex
var counter int
for i := 0; i < 10; i++ {
wg.Add(1)
go func() {
mu.Lock()
counter++
mu.Unlock()
wg.Done()
}()
}
wg.Wait()
fmt.Println(counter)
}
5. os 和 io - 文件系统操作
import (
"io"
"os"
)
func main() {
// 文件读取
file, _ := os.Open("test.txt")
defer file.Close()
// 文件写入
newFile, _ := os.Create("output.txt")
defer newFile.Close()
io.Copy(newFile, file)
}
重要第三方包
1. gorilla/mux - 路由管理
import "github.com/gorilla/mux"
func main() {
r := mux.NewRouter()
r.HandleFunc("/users/{id}", getUser).Methods("GET")
http.ListenAndServe(":8080", r)
}
2. gorm - ORM框架
import "gorm.io/gorm"
type Product struct {
gorm.Model
Code string
Price uint
}
func main() {
db, _ := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
db.AutoMigrate(&Product{})
}
3. testify - 测试框架
import "github.com/stretchr/testify/assert"
func TestAdd(t *testing.T) {
result := Add(2, 3)
assert.Equal(t, 5, result)
}
学习资源
- 官方文档:
go doc命令和 pkg.go.dev - Go by Example:实际代码示例
- 《Go语言圣经》:深入理解标准库
- GitHub Trending Go:查看流行项目源码
掌握这些包后,你将能够处理大多数Go开发任务,包括Web服务、数据库操作、并发编程和系统工具开发。

