go监听程序关闭

1,go监听程序关闭

package main

import (
	"fmt"
	"os"
	"os/signal"
	"syscall"
	"time"
)

func main() {
	// 创建一个通道来接收信号
	sigCh := make(chan os.Signal, 1)
	// 监听指定的信号
	signal.Notify(sigCh, syscall.SIGINT, syscall.SIGTERM)

	// 启动一个 goroutine 来处理接收到的信号
	go func() {
		// 等待信号
		sig := <-sigCh
		fmt.Printf("接收到信号:%v\n", sig)

		// 在这里执行程序关闭前的清理操作
		// 在这里编写你的程序逻辑
		fmt.Printf("关闭程序")
		// 退出程序
		os.Exit(0)
	}()
	for {
		fmt.Println("执行中")
		time.Sleep(3 * time.Second) // 阻塞程序 3 秒
	}

	// 阻塞主 goroutine,保持程序运行
	//select {}
}

2,win下执行 go run xxx.go
Ctrl+C退出关闭程序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Go语言监听MongoDB数据库变化,可以使用MongoDB官方提供的驱动程序来实现。 具体步骤如下: 1. 使用go get 命令安装mongo-go-driver,这是MongoDB官方提供的Go语言驱动程序。 2. 在代码中导入该包。 3. 连接到MongoDB数据库。 4. 使用Collection.Watch()函数监听数据库的变化。 5. 在回调函数中处理变化事件。 以下是一个简单的示例代码: ``` package main import ( "context" "log" "time" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" ) func main() { // 连接到MongoDB client, err := mongo.Connect(context.TODO(), options.Client().ApplyURI("mongodb://localhost:27017")) if err != nil { log.Fatal(err) } // 监听 test 集合中的变化 coll := client.Database("mydb").Collection("test") ctx, _ := context.WithTimeout(context.Background(), 5*time.Second) cursor, err := coll.Watch(ctx, mongo.Pipeline{}) if err != nil { log.Fatal(err) } defer cursor.Close(ctx) for cursor.Next(ctx) { var doc bson.M if err := cursor.Decode(&doc); err != nil { log.Fatal(err) } log.Println(doc) } if err := cursor.Err(); err != nil { log.Fatal(err) } } ``` 请注意,仅在MongoDB 4.0及更高版本中支持监听数据库变化,如果您正在使用较低版本的MongoDB,则可能需要更新您的数据库或使用第三方库来实现相同的功能。 ### 回答2: Go语言可以使用MongoDB的Change Stream API来监听MongoDB数据库的变化。以下是一个简单的示例: 首先,我们需要使用Go语言的MongoDB驱动程序来连接到MongoDB数据库: ``` import ( "context" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" ) func main() { // 设置MongoDB连接选项 clientOptions := options.Client().ApplyURI("mongodb://localhost:27017") // 连接到MongoDB client, err := mongo.Connect(context.TODO(), clientOptions) if err != nil { log.Fatal(err) } // 检查连接是否成功 err = client.Ping(context.TODO(), nil) if err != nil { log.Fatal(err) } // 连接成功! fmt.Println("Connected to MongoDB") // 在这里添加监听逻辑... } ``` 一旦成功连接到MongoDB,我们可以创建一个Change Stream来监听数据库中的变化。以下是一个示例: ``` func main() { // ... // 订阅Change Stream pipeline := mongo.Pipeline{} changeStream, err := client.Database("mydb").Collection("mycollection").Watch(context.TODO(), pipeline) if err != nil { log.Fatal(err) } // 循环读取Change Stream中的事件 for changeStream.Next(context.TODO()) { var event struct { OperationType string `bson:"operationType"` FullDocument bson.RawValue `bson:"fullDocument"` } // 解码事件 err := changeStream.Decode(&event) if err != nil { log.Fatal(err) } // 处理事件 fmt.Printf("Operation Type: %s, Full Document: %s\n", event.OperationType, string(event.FullDocument.Raw)) } // 关闭Change Stream changeStream.Close(context.TODO()) // ... } ``` 您可以根据需要自定义Change Stream的pipeline来过滤您感兴趣的事件。注意,在上面的示例中,我们只是简单地打印出了收到的事件的操作类型和完整文档的内容。 以上就是使用Go语言监听MongoDB数据库变化的基本步骤和示例。希望对您有所帮助! ### 回答3: 要使用Golang监听MongoDB数据库的变化,可以通过MongoDB的Change Streams功能来实现。 首先,需要使用Go的MongoDB驱动程序来连接MongoDB数据库。可以选择使用官方的mongodb/mongo-go-driver,或者第三方的go.mongodb.org/mongo-driver。 接下来,需要使用Change Streams功能来监听数据库的变化。可以通过使用ChangeStream方法,传入一个或多个监视的collection和一个或多个选项来创建一个ChangeStream实例。 在ChangeStream实例中,可以使用游标的Next方法来监听并获取数据库的变化。每当有变化发生时,Next方法将返回相应的文档。可以根据需要处理这些文档,例如打印出变化的内容。 以下是一个简单的示例代码: ```go package main import ( "context" "fmt" "log" "time" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" ) func main() { // 连接MongoDB数据库 client, err := mongo.NewClient(options.Client().ApplyURI("mongodb://localhost:27017")) if err != nil { log.Fatal(err) } ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) defer cancel() err = client.Connect(ctx) if err != nil { log.Fatal(err) } // 选择要监听的数据库和集合 db := client.Database("mydb") collection := db.Collection("mycollection") // 创建ChangeStream实例 pipeline := []bson.M{{"$match": bson.M{"operationType": "insert"}}} // 监听插入操作 options := options.ChangeStream().SetFullDocument(options.UpdateLookup) changeStream, err := collection.Watch(ctx, pipeline, options) if err != nil { log.Fatal(err) } // 监听数据库变化 for changeStream.Next(ctx) { var document bson.M err := changeStream.Decode(&document) if err != nil { log.Fatal(err) } fmt.Println(document) } if err := changeStream.Err(); err != nil { log.Fatal(err) } } ``` 上述代码是一个简单的示例,可以监听指定数据库和集合的插入操作,并打印出插入的文档。具体的监听逻辑,如监听更新或删除操作,以及处理变化的方式,可以根据实际需要进行调整。 请注意,使用Change Streams功能需要MongoDB版本3.6或更高版本,并且需要正确安装和配置MongoDB服务器。另外,在处理ChangeStream实例时,需要注意错误的处理和资源的释放,以保证程序的稳定性和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值