โครงสร้างข้อมูล struct
แม้ภาษา Go จะไม่มีคลาส แต่มี structs ที่สามารถนิยามโครงสร้างของข้อมูลขึ้นมาเองได้ การใช้โครงสร้างข้อมูล (struct) ในภาษา Go เป็นโครงสร้างของการเก็บกลุ่มข้อมูลลงในฟิลด์ โดยประโยชน์ของการใช้ Struct นี้ จะทำให้เราเก็บข้อมูลแยกตามหมวดหมู่ได้ เช่น เราต้องการจะสร้าง ก้อนข้อมูล ของ “ลูกค้า” เราจะต้องประกอบไปด้วยอะไรบ้าง ก็จะมี ชื่อ, นามสกุล, อีเมล, รหัสผ่าน เป็นต้น
ข้อกำหนดเบื้องต้น
ข้อกำหนดสำหรับบทความนี้คือ คุณควรได้ทำตามบทความ Go Admin – การสร้างแพ็คเกจ มาก่อน
เปิดโปรเจค go-admin
ลบไฟล์ otherController.go ออก แล้วเปิดไฟล์ authController.go แก้ไขโค้ดดังนี้
package controllers
import (
"go-admin/models"
"github.com/gofiber/fiber/v2"
)
func Register(c *fiber.Ctx) error {
user := models.User{
FirsName: "John",
}
user.LastName = "Doe"
user.Email = "example@gmail.com"
return c.JSON(user)
}
เปิดไฟล์ routes.go แก้ไขโค้ดดังนี้
package routes
import (
"go-admin/controllers"
"github.com/gofiber/fiber/v2"
)
func Setup(app *fiber.App) {
app.Post("/api/register", controllers.Register)
}
สร้างแพ็คเกจ models โดยสร้างโฟลเดอร์ models แล้วสร้างไฟล์ user.go เขียนโค้ดดังนี้
package models
type User struct {
Id int
FirsName string
LastName string
Email string
Password string
}
ทดสอบการทำงาน:
go run main.go
ติดตั้ง Postman
Postman โพสต์แมนเป็น Platform ที่ถูกพัฒนาขึ้นเพื่อใช้สำหรับการทดสอบการทำงานของ API ( Application Programing Interface ) เหมาะสำหรับนักพัฒนาที่กำลังพัฒนา API หรือผู้ใช้งานทั่วไปที่กำลังจะใช้งาน API ของที่ใดที่หนึ่ง แล้วต้องการทดสอบการทำงานของระบบ สามารถจำลอง Data, header รวมถึงบันทึก Collection ที่ใช้ในการทดสอบเก็บใว้ทำให้สามารถเรียกใช้ request ที่บันทึกใว้ได้จากทุกที่
ไปที่ https://www.postman.com/downloads/
ย้าย Postman ไปที่ Application
เปิด Postman แล้วคลิกที่ My Workspace
ด้านขวามือ คลิกที่ Requests -> Create New
ด้านหน้าเปลี่ยนจาก GET เป็น POST แล้วใส่ http://localhost:8000/api/register -> คลิก Send
ที่ด้านล่างแสดง Structs ในรูปแบบของ JSON แสดงว่าขั้นตอนนี้สำเร็จแล้ว
{
"Id": 0,
"FirsName": "John",
"LastName": "Doe",
"Email": "example@gmail.com",
"Password": ""
}
Migrations
เปิดไฟล์ connect.go แก้ไขโค้ดดังนี้
package database
import (
"go-admin/models"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
func Connect() {
dsn := "root:12345678@tcp(localhost:3306)/go_admin?charset=utf8&parseTime=True"
database, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
panic(err)
}
database.AutoMigrate(&models.User{})
}
เปิดไฟล์ user.go แก้ไขโค้ดดังนี้
package models
type User struct {
Id int
FirsName string
LastName string
Email string `gorm:"unique"`
Password string
}
ทดสอบการทำงาน
ที่ MYSQL คลิกขวาที่ไฟล์ go_admin -> Refresh จะพบตาราง user และคอลัมน์ ต่างๆเพิ่มเข้ามา
Request Data
ไฟล์ authController.go แก้ไขโค้ดดังนี้
package controllers
import (
"go-admin/models"
"github.com/gofiber/fiber/v2"
)
func Register(c *fiber.Ctx) error {
var data map[string]string
if err := c.BodyParser(&data); err != nil {
return err
}
if data["password"] != data["password_confirm"] {
c.Status(400)
return c.JSON(fiber.Map{
"massage": "password do not match",
})
}
user := models.User{
FirsName: data["first_name"],
LastName: data["last_name"],
Email: data["email"],
Password: data["password"],
}
return c.JSON(user)
}
ทดสอบการทำงาน
ที่ Postman เลือกเป็น Body -> Raw -> JSON แล้วเขียนโค้ดดังนี้
{
"first_name": "John",
"last_name": "Doe",
"email": "joth@doe.com",
"password": "1",
"password_confirm": "2"
}
คลิก Send ช่องด้านล่าง จะแสดงข้อความ “massage”: “password do not match” เพราะรหัสผ่าน ไม่ตรงกัน
แก้ไข password_confirm จาก 2 เป็น 1 แล้วคลิก Send ด้านล่างจะแสดงข้อความ จากข้อมูลด้านบน