使用Golang进行自动化的20个库("20个最佳Golang库:助你轻松实现自动化")
原创
1. go-colly:强盛的网页爬虫库
go-colly 是一个功能强盛的网页爬虫库,拥护异步操作、自定义请求头、正则表达式匹配等多种功能。
package main
import (
"github.com/gocolly/colly"
)
func main() {
c := colly.NewCollector()
c.OnHTML("div#mydiv", func(e *colly.HTMLElement) {
e.Text = "some text"
})
c.Visit("https://example.com")
}
2. go-redis:高性能的Redis客户端库
go-redis 是一个高性能的 Redis 客户端库,拥护各种 Redis 数据结构和命令。
package main
import (
"github.com/go-redis/redis/v8"
"context"
)
func main() {
rdb := redis.NewClient(&redis.Options{
Addr: "localhost:6379",
Password: "", // no password set
DB: 0, // use default DB
})
ctx := context.Background()
val, err := rdb.Get(ctx, "mykey").Result()
if err != nil {
panic(err)
}
println(val)
}
3. go-selenium:自动化Web浏览器操作
go-selenium 是一个用于自动化 Web 浏览器操作的库,拥护多种浏览器。
package main
import (
"github.com/tebeka/selenium"
"golang.org/x/net/html"
)
func main() {
caps := selenium.Capabilities{
"browserName": "chrome",
}
driver, err := selenium.NewRemote(caps, "")
if err != nil {
panic(err)
}
defer driver.Quit()
err = driver.Get("https://example.com")
if err != nil {
panic(err)
}
// Do something with the driver...
}
4. go-httpmock:模拟HTTP请求和响应
go-httpmock 是一个用于模拟 HTTP 请求和响应的库,便于测试。
package main
import (
"github.com/jarcoal/httpmock"
"net/http"
)
func main() {
httpmock.Activate()
defer httpmock.DeactivateAndReset()
httpmock.RegisterResponder("GET", "https://example.com",
httpmock.NewStringResponder("some text"))
resp, err := http.Get("https://example.com")
if err != nil {
panic(err)
}
defer resp.Body.Close()
// Do something with the response...
}
5. go-ssh:SSH客户端库
go-ssh 是一个用于 SSH 连接和操作的库,拥护多种加密算法。
package main
import (
"golang.org/x/crypto/ssh"
)
func main() {
config := &ssh.ClientConfig{
User: "username",
Auth: []ssh.AuthMethod{
ssh.Password("password"),
},
HostKeyCallback: ssh.InsecureIgnoreHostKey(),
}
client, err := ssh.Dial("tcp", "localhost:22", config)
if err != nil {
panic(err)
}
defer client.Close()
session, err := client.NewSession()
if err != nil {
panic(err)
}
defer session.Close()
session.Run("ls")
}
6. go-mock:Mock测试库
go-mock 是一个用于生成 Mock 对象的库,便于单元测试。
package main
import (
"github.com/stretchr/testify/mock"
)
type MyMock struct {
mock.Mock
}
func (m *MyMock) DoSomething() string {
args := m.Called()
return args.String(0)
}
func main() {
mock := new(MyMock)
mock.On("DoSomething").Return("mocked result")
result := mock.DoSomething()
println(result) // Output: mocked result
}
7. go-micro:微服务框架
go-micro 是一个简洁、轻量级的微服务框架,拥护多种通信协议。
package main
import (
"github.com/micro/go-micro"
"github.com/micro/go-micro/registry"
"github.com/micro/go-micro/registry/etcd"
)
func main() {
r := etcd.NewRegistry(registry.Addrs("localhost:2379"))
service := micro.NewService(
micro.Name("greeter"),
micro.Registry(r),
)
service.Init()
// Do something with the service...
}
8. go-kit:微服务工具包
go-kit 是一个用于构建微服务的工具包,提供了各种中间件、端点、编码器等。
package main
import (
"github.com/go-kit/kit/log"
"github.com/go-kit/kit/sd"
"github.com/go-kit/kit/sd/consul"
)
func main() {
logger := log.NewLogfmtLogger(os.Stderr)
consulClient, err := consul.NewClient(&consul.Config{
Address: "localhost:8500",
})
if err != nil {
panic(err)
}
registrar := consul.NewRegistrar(
consulClient,
&consul.Registration{
ID: "my-service",
Name: "MyService",
Port: 8080,
Tags: []string{"api"},
Service: &consul.Service{
Tags: []string{"api"},
},
},
logger,
)
registrar.Register()
defer registrar.Deregister()
// Do something with the registrar...
}
9. go-pg:PostgreSQL数据库连接库
go-pg 是一个用于连接和操作 PostgreSQL 数据库的库,拥护多种查询优化。
package main
import (
"github.com/go-pg/pg/v10"
"github.com/go-pg/pg/v10/orm"
)
type User struct {
ID int
Name string
}
func main() {
db := pg.Connect(&pg.Options{
User: "username",
Password: "password",
Database: "dbname",
Host: "localhost",
Port: 5439,
})
defer db.Close()
err := db.Model((*User)(nil)).Select()
if err != nil {
panic(err)
}
// Do something with the users...
}
10. go-mysql:MySQL数据库连接库
go-mysql 是一个用于连接和操作 MySQL 数据库的库,拥护多种查询优化。
package main
import (
"github.com/go-sql-driver/mysql"
"database/sql"
)
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")
if err != nil {
panic(err)
}
defer rows.Close()
for rows.Next() {
var id int
var name string
err := rows.Scan(&id, &name)
if err != nil {
panic(err)
}
// Do something with the user...
}
}
11. go-mongodb:MongoDB数据库连接库
go-mongodb 是一个用于连接和操作 MongoDB 数据库的库,拥护多种查询优化。
package main
import (
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
)
func main() {
client, err := mongo.Connect(context.TODO(), options.Client().ApplyURI("mongodb://localhost:27017"))
if err != nil {
panic(err)
}
defer client.Disconnect(context.TODO())
collection := client.Database("dbname").Collection("collection")
// Do something with the collection...
}
12. go-nsq:NSQ消息队列客户端库
go-nsq 是一个用于连接和操作 NSQ 消息队列的客户端库。
package main
import (
"github.com/nsqio/go-nsq"
)
func main() {
consumer, err := nsq.NewConsumer("my_topic", "my_channel", nsq.NewConfig())
if err != nil {
panic(err)
}
consumer.AddHandler(nsq.HandlerFunc(func(message *nsq.Message) error {
// Do something with the message...
return nil
}))
err = consumer.ConnectToNSQD("localhost:4150")
if err != nil {
panic(err)
}
// Do something with the consumer...
}
13. go-rabbitmq:RabbitMQ消息队列客户端库
go-rabbitmq 是一个用于连接和操作 RabbitMQ 消息队列的客户端库。
package main
import (
"github.com/streadway/amqp"
)
func main() {
conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/")
if err != nil {
panic(err)
}
defer conn.Close()
ch, err := conn.Channel()
if err != nil {
panic(err)
}
defer ch.Close()
q, err := ch.QueueDeclare(
"my_queue", // name
false, // durable
false, // delete when unused
false, // exclusive
false, // no-wait
nil, // arguments
)
// Do something with the queue...
}
14. go-kafka:Kafka消息队列客户端库
go-kafka 是一个用于连接和操作 Kafka 消息队列的客户端库。
package main
import (
"github.com/Shopify/sarama"
)
func main() {
config := sarama.NewConfig()
config.Consumer.Return.Errors = true
consumer, err := sarama.NewConsumer([]string{"localhost:9092"}, config)
if err != nil {
panic(err)
}
defer consumer.Close()
topics := []string{"my_topic"}
partitionConsumer, err := consumer.ConsumePartition(topics[0], 0, sarama.OffsetNewest)
if err != nil {
panic(err)
}
for msg := range partitionConsumer.Messages() {
// Do something with the message...
}
}
15. go-grpc:gRPC客户端和服务器库
go-grpc 是一个用于构建高性能、分布式的客户端和服务器应用程序的库。
package main
import (
"context"
"log"
"net"
"google.golang.org/grpc"
pb "path/to/your/protobuf/package"
)
func main() {
lis, err := net.Listen("tcp", ":50051")
if err != nil {
log.Fatalf("failed to listen: %v", err)
}
s := grpc.NewServer()
pb.RegisterYourServiceServer(s, &server{})
if err := s.Serve(lis); err != nil {
log.Fatalf("failed to serve: %v", err)
}
}
16. go-websocket:WebSocket客户端和服务器库
go-websocket 是一个用于构建 WebSocket 客户端和服务器应用程序的库。
package main
import (
"github.com/gorilla/websocket"
)
func main() {
c, _, err := websocket.DefaultDialer.Dial("ws://localhost:8080/socket", nil)
if err != nil {
panic(err)
}
defer c.Close()
// Do something with the connection...
}
17. go-socketio:Socket.IO客户端和服务器库
go-socketio 是一个用于构建 Socket.IO 客户端和服务器应用程序的库。
package main
import (
"github.com/googollee/go-socket.io"
)
func main() {
server, err := socketio.NewServer(nil)
if err != nil {
panic(err)
}
server.On("connection", func(so socketio.Socket) {
so.On("chat message", func(msg string) {
so.Emit("message", msg)
})
})
server.ListenAndServe(":8080")
}
18. go-redis-cluster:Redis集群客户端库
go-redis-cluster 是一个用于连接和操作 Redis 集群的客户端库。
package main
import (
"github.com/go-redis/redis/v8"
"context"
)
func main() {
cluster := redis.NewCluster(&redis.ClusterOptions{
Addrs: []string{"localhost:7000", "localhost:7001", "localhost:7002"},
})
ctx := context.Background()
val, err := cluster.Get(ctx, "mykey").Result()
if err != nil {
panic(err)
}
println(val)
}
19. go-ethereum:以太坊客户端库
go-ethereum 是一个用于连接和操作以太坊区块链的客户端库。
package main
import (
"github.com/ethereum/go-ethereum/ethclient"
)
func main() {
client, err := ethclient.Dial("https://mainnet.infura.io/v3/YOUR_PROJECT_ID")
if err != nil {
panic(err)
}
defer client.Close()
// Do something with the client...
}
20. go-binance:Binance API客户端库
go-binance 是一个用于连接和操作 Binance 交易所 API 的客户端库。
package main
import (
"github.com/binance-exchange/binance-api-go"
)
func main() {
client := binance.NewClient(nil)
// Do something with the client...
}