Golang – 使用interface封装,灵活使用数据库写入数据【实战】

这视频讨论了在使用 for loop 监听 Kafka 读取消息时的一个常见问题。在 for loop内,每次将数据插入 MongoDB 数据库时,都会创建一个新的 MongoClient 实例。这种做法效率低下,因为每次都会建立一个新的连接,可能会显著降低程序的运行速度。

优化方案是:避免在循环内频繁创建 MongoClient 实例,而是提前创建一个 MongoClient 实例并在整个循环过程中重用该实例。这样可以减少不必要的连接开销,提高程序性能。

这视频的教程主要内容是传入一个Interface,然后使用这个Interface灵活地插入数据,从而能够使用各种不同的数据库来插入数据。

【以下是根据我吸收的知识内容来编写一个差不多一样功能的program】

  1. 封装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

Loading

Facebook评论