วิธีการเชื่อมต่อ Golang กับ MongoDB

By KDBEER | Last updated Apr 29, 2021
วิธีการเชื่อมต่อ-Golang-กับ-MongoDB-608a2d9c0a6c9eda9aa46f5f

Golang กับ MongoDB เป็นอีกหนึ่ง stack ที่มีนักพัฒนานิยมนำมาใช้ในการพัฒนาซอฟต์แวร์อย่างแพร่หลาย เนื่องจากใช้งานได้ฟรี และมีชุมชน (developer comunity) ที่คอยแบ่งปันความรู้ และมี webboard ที่จะคอยช่วยตอบคำถามเวลาที่ developer เกิดปัญหาครับ 

บทความนี้ ผมจะอธิบายถึงวิธีการสร้างโปรเจกด้วย golang และเชื่อมต่อไปหา mongodb โดยใช้ library ที่ชื่อว่า mongo driver ซึ่งเป็น library ของทาง mongodb ที่ออกมาเพื่อ support golang โดยตรงครับ

Table of Contents

  • Prerequisite
  • สร้าง Golang Project
  • ติดตั้ง mongo-driver
  • เขียนโปรแกรมเชื่อมต่อ MongoDB
  • สรุป
  • Reference

Prerequisite

ผมได้เขียนบทความการติดตั้ง Golang และการใช้งาน MongoDB เบื้องต้นไว้แล้ว ถ้าสนใจอ่านเพิ่มเติม สามารถคลิกที่ลิงก์ด้านล่างนี้ได้เลยครับ

สร้าง Golang Project

เริ่มจากสร้างโฟลเดอร์เก็บ source code 

# สร้าง project
mkdir go-mongo
cd go-mongo

# สร้างไฟล์ main.go เพื่อที่เราจะใช้เขียนโค๊ดลงไปครับ
touch main.go

จากนั้นเปิดไฟล์ main.go ด้วย editor ที่เราชื่นชอบ แล้วแก้ไขไฟล์ดังนี้ครับ

package main

func main() { }

จากตัวอย่างข้างต้น เราทำการสร้างฟังก์ชัน main() และฟังก์ชันนี้แหละครับ ที่เป็นจุด start ของการรันโปรแกรม จากนั้น เราจะสร้างไฟล์ go.mod เพื่อใช้จัดการ dependency ของโปรเจเราครับ โดยให้เรานั้น เปิด termimal และ cd เข้าไปในจุดที่โปรเจเราอยู่ และรันคำสั่งต่อไปนี้ครับ

# ต้องเข้าไปในโปรเจคก่อน
cd <path_to_project>/go-mongo

# รันคำสั่งเพื่อสร้างไฟล์ go.mod
go mod init go-mongo

ผลลัพธ์

go: creating new go.mod: module go-mongo
go: to add module requirements and sums:
	go mod tidy

จะเห็นได้ว่ามันได้สร้าง go.mod ขึ้นมาให้แล้ว ทีนี้ เราก็สามารถ install library ของ mongo-driver ได้แล้ว โดยใช้คำสั่งต่อไปนี้ครับ

ติดตั้ง mongo-driver

# ต้องเข้าไปในโปรเจคก่อน
cd <path_to_project>/go-mongo

# install library mongo-driver
go get go.mongodb.org/mongo-driver

ผลลัพธ์

go: downloading go.mongodb.org/mongo-driver v1.5.1
go get: added go.mongodb.org/mongo-driver v1.5.1

เขียนโปรแกรมเชื่อมต่อ MongoDB

หลังจาก install mongo-driver เรียบร้อย ต่อไป ก็เข้าสู่ขั้นตอนการเขียนโค๊ดเพื่อเชื่อมต่อกับ mongodb กันครับ แต่ก่อนอื่นเราต้องแน่ใจก่อนนะครับ ว่าเรามี mongodb ติดตั้งบนเครื่องอยู่แล้ว ถ้ามั่นใจแล้ว ก็เปิดไฟล์ main.go แล้วแก้ไขโปรแกรมที่ฟังก์ชัน main() ดังนี้ครับ

func main() {
	// connectionURI := "mongodb://<host_ip>:<host_port>"
	connectionURI := "mongodb://127.0.0.1:27017"
	client, err := mongo.NewClient(options.Client().ApplyURI(connectionURI))
	if err != nil {
		log.Fatal(err)
	}

	ctx, _ := context.WithTimeout(context.Background(), 10*time.Second)
	err = client.Connect(ctx)
	if err != nil {
		log.Fatal(err)
	}
	defer client.Disconnect(ctx)

	err = client.Ping(ctx, readpref.Primary())
	if err != nil {
		log.Fatal(err)
	}

	fmt.Println("Connected")
}

จากโค๊ดด้านบน อธิบายได้ดังนี้ครับ

  1. เราสร้าง connection uri เพื่อบอกกับโปรแกรมว่าต้องไปเชื่อมต่อกับ mongodb ที่เครื่องไหน port ไหน จะเห็นได้ว่า mongodb มีรูปแบบการสร้าง connection string ที่เฉพาะคือ mongodb://<host_ip>:<host_port> ซึ่งสามารถอ่านวิธี config เพิ่มเติมได้ที่ลิงก์นี้ครับ Standard Connection String Format
  2. จากนั้นเราเรียกฟังก์ชัน ApplyURL() เพื่อสร้าง client connection ครับ
  3. โปรแกรมเรียกใช้ client.Connect(ctx) เพื่อเชื่อมต่อ ถ้าเชื่อมต่อไม่ได้ มันก็จะ log error ออกมา
  4. เรียกใช้ defer client.Disconnect(ctx) ให้ disconnect ทุกครั้ง ถ้าโปรแกรมกำลังจะหยุดทำงาน
  5. เพื่อทดสอบว่าสามารถเชื่อมต่อไปหา mongodb จริงๆ หรือเปล่า โปรแกรมเรียกใช้ client.Ping(ctx, readpref.Primary()) เพื่อทดสอบว่า mongodb server จะตอบกลับมาหรือเปล่า

เอาละครับ ทีนี้มาลองรันโปรแกรม ด้วยการเปิด terminal และใช้คำสั่งต่อไปนี้ครับ

go run main.go

# ผลลัพธ์
Connected

สรุป

บทความนี้ ผมได้อธิบายวิธีเขียน golang แบบง่ายๆ เพื่อเชื่อมต่อ กับ mongodb แต่ว่าผู้อ่านต้องติดตั้ง golang และ mongodb บนเครื่องตัวเองอยู่ก่อนแล้ว ถึงจะทำตามบทความนี้ได้อย่างราบรื่นครับ หวังว่าบทความนี้ จะเป็นประโยชน์ต่อทุกท่านที่แวะมาอ่านนะครับ

Reference