Gorilla WebSocket 提供了 WebSocket 协议的实现,用于实现实时通信。
代码语言:javascript复制goCopy codepackage main
import (
"log"
"net/http"
"github.com/gorilla/websocket"
)
var upgrader = websocket.Upgrader{
CheckOrigin: func(r *http.Request) bool {
return true
},
}
func handler(w http.ResponseWriter, r *http.Request) {
conn, err := upgrader.Upgrade(w, r, nil)
if err != nil {
log.Print(err)
return
}
defer conn.Close()
for {
messageType, p, err := conn.ReadMessage()
if err != nil {
return
}
if err := conn.WriteMessage(messageType, p); err != nil {
return
}
}
}
func main() {
http.HandleFunc("/ws", handler)
http.ListenAndServe(":8080", nil)
}
31. github.com/gin-contrib/cors - CORS 中间件
Gin CORS Middleware 是一个用于 Gin 框架的 CORS(跨域资源共享)中间件。
代码语言:javascript复制goCopy codepackage main
import (
"github.com/gin-contrib/cors"
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
r.Use(cors.Default())
r.GET("/hello", func(c *gin.Context) {
c.JSON(200, gin.H{"message": "Hello, CORS!"})
})
r.Run(":8080")
}
32. github.com/nats-io/nats.go - NATS 消息系统客户端
NATS 是一个轻量级、高性能的消息系统,提供了 Go 语言客户端。
代码语言:javascript复制goCopy codepackage main
import (
"log"
"time"
"github.com/nats-io/nats.go"
)
func main() {
nc, _ := nats.Connect(nats.DefaultURL)
defer nc.Close()
sub, _ := nc.SubscribeSync("subject")
msg, err := sub.NextMsg(time.Second * 5)
if err == nil {
log.Printf("Received message: %s", msg.Data)
} else {
log.Println("No message received")
}
}
33. github.com/go-redis/redis/v8 - Redis 客户端
前面已经提到过,这里再强调一下 Go Redis 客户端的一些基本用法。
代码语言:javascript复制goCopy codepackage main
import (
"context"
"fmt"
"github.com/go-redis/redis/v8"
)
func main() {
ctx := context.Background()
client := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "",
DB: 0,
})
err := client.Set(ctx, "key", "value", 0).Err()
if err != nil {
panic(err)
}
val, err := client.Get(ctx, "key").Result()
if err != nil {
panic(err)
}
fmt.Println("key:", val)
}
34. github.com/pkg/errors - 错误处理库
pkg/errors 提供了更强大的错误处理能力,包含堆栈信息,适用于更复杂的错误追踪。
代码语言:javascript复制goCopy codepackage main
import (
"fmt"
"github.com/pkg/errors"
)
func foo() error {
return errors.New("error in foo")
}
func bar() error {
err := foo()
if err != nil {
return errors.Wrap(err, "error in bar")
}
return nil
}
func main() {
err := bar()
if err != nil {
fmt.Printf("% vn", err)
}
}
这些是另一批基础常用的 Go 语言库及其用法,包括 WebSocket 库、CORS 中间件、NATS 消息系统客户端、Redis 客户端和错误处理库等方面。根据项目的具体需求,你可以选择适用的库来进行开发。