Golang เชื่อมกับ DB Postgres
2 min readJul 31, 2019
ในที่เราจะใช้
สร้างฟังก์ชันที่ต่อกับ Database
- สร้างไฟล์ database.go ที่มีฟังก์ชันชื่อ Open ที่จะ connect กับ postgre และ retrun connection กลับไป
- สร้าง struct Config ที่มี field ต่างๆ
User => user สำหรับที่จะ login Database
Password => รหัสผ่านของการ login
Host => ตำแหน่งที่รัน database เช่น localhost, IP ของเครื่องที่รัน Database
Port => ตัว Database ของเรารันอยู่ที่ port อะไร
Name => ชื่อของฐานข้อมูลที่เราจะต่อด้วย
DisbleTLS => เป็นตัวที่เราจะตั้งว่าให้มีการ connect ฐานข้อมูลนี้ผ่าน remote หรือไม่ - สร้างตัวแปร dataSoruce เพื่อเก็บ string ที่จะเชื่อมต่อกับ Database
- ใช่ Library sqlx ช่วยในการ connect ด้วย Method Connect โดย parameter ตัวแรกเป็น database driver และตัวที่สองเป็น dataSoruce
สร้างฟังก์ชันที่ทำงานกับ Database (CRUD)
- สร้างไฟล์ postgres.go ที่มีฟังก์ชันบันทึกสินค้าใหม่และดึงข้อมูลสินค้าตาม ID
- สร้าง struct PostgresDB ที่มี field DB เก็บ connection
- สร้าง Method CreateNewProduct
บรรทัด 14 — 21 เป็นการเตรียมข้อมูลสินค้าที่จะเก็บลง Database
บรรทัด 23 เป็นการสร้างคำสั่งของ SQL
บรรทัด 24 เป็นการเตรียมสำหรับสร้าง transaction ใน Database
บรรทัด 25 เป็นการรวมระหว่าง query และ ค่าที่เราจะบันทึก
บรรทัด 26 จะทำการบันทึกข้อมูลลง Database และเช็คว่ามี error อะไรหรือเปล่าถ้ามีก็จะ retrun product ว่างๆ และ error ที่เกิดขึ้น
สร้าง main ของโปรแกรม
- สร้างไฟล์ main ของโปรแกรมในที่ใช้ Library Gin สำหรับจัดการ http
- เพิ่มตัวรับ flag จาก command line สำหรับ config ตัว service ในบรรทัดที่ 14 ถึง 23
- นำ config จาก flag มาใส่ใน struct config จากนั้นทำการ connect กับ Database ในบรรทัดที่ 39
- สร้าง API จาก Gin โดยมี endpoint ในบรรทัด 43 ถึง 48
[POST] /api/v1/product
[GET] /api/v1/:id
สร้าง Handler ของ API
มาใช้งาน service กัน
- รัน postgres
$ docker run --name postgresDB -e POSTGRES_PASSWORD=example -e POSTGRES_USER=smalldoc -d postgres:11.1-alpine
2. รัน service
$ go run cmd/sales-api/main.go
3. สร้าง Table ใน database
$ docker exec -it postgresDB sh
$ psql -h localhost -p 5432 -U smalldoc
$ CREATE TABLE products (
id TEXT,
name TEXT,
price DECIMAL,
amount INT,
date_created TIMESTAMP,
date_updated TIMESTAMP,
PRIMARY KEY (id)
);
เสร็จเรียบร้อยเราสามารถใช้งาน API ที่เราสร้างไว้ได้เลย
ที่อยู่โปรเจค https://github.com/smalldog124/service_demo