โครงสร้างข้อมูล 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 ด้านล่างจะแสดงข้อความ จากข้อมูลด้านบน

Leave a Reply

Your email address will not be published. Required fields are marked *