Golang – 使用interface封装,灵活使用数据库写入数据【实战】
这视频讨论了在使用 for
loop 监听 Kafka 读取消息时的一个常见问题。在 for
loop内,每次将数据插入 MongoDB 数据库时,都会创建一个新的 MongoClient
实例。这种做法效率低下,因为每次都会建立一个新的连接,可能会显著降低程序的运行速度。
优化方案是:避免在循环内频繁创建 MongoClient
实例,而是提前创建一个 MongoClient
实例并在整个循环过程中重用该实例。这样可以减少不必要的连接开销,提高程序性能。
这视频的教程主要内容是传入一个Interface,然后使用这个Interface灵活地插入数据,从而能够使用各种不同的数据库来插入数据。
【以下是根据我吸收的知识内容来编写一个差不多一样功能的program】
- 封装kafka service 使用interface 来传入parameter
type InsertDb interface {
insert(string)
}
type KafkaService struct {
name string
db InsertDb
}
func NewKafkaService(name string, insertDbInterface InsertDb) *KafkaService {
return &KafkaService{
name: name,
db: insertDbInterface,
}
}
func (this *KafkaService) Start() {
loop := []int{1, 2, 3, 4, 5}
for i := 0; i < len(loop); i++ {
this.db.insert(this.name + strconv.Itoa(loop[i]))
}
}
2. 封装输入数据库的model
type MySQL struct {
Host string
}
func (this *MySQL) insert(looptime string) {
fmt.Println("MySQL Host:", this.Host, ", InsertData:"+looptime)
}
3. 使用方法
func main() {
kafka := NewKafkaService("NewKafa", &MySQL{
Host: "localhost",
})
kafka.Start()
}
4. 导出结果
MySQL Host: localhost , InsertData:NewKafa1
MySQL Host: localhost , InsertData:NewKafa2
MySQL Host: localhost , InsertData:NewKafa3
MySQL Host: localhost , InsertData:NewKafa4
MySQL Host: localhost , InsertData:NewKafa5
Facebook评论