โครงสร้างโปรเจกต์
เปรียบเทียบโครงสร้าง
หัวข้อที่มีชื่อว่า “เปรียบเทียบโครงสร้าง”โปรเจกต์ TypeScript/Node มี package.json, build tool, โฟลเดอร์ dist/ และ node_modules ส่วนโปรเจกต์ Go เรียบง่ายกว่า: go.mod ประกาศ module และ dependency ไม่มีโฟลเดอร์ output แยกต่างหาก — go build สร้าง binary ไฟล์เดียว
// Express / NestJS project treemy-api/ package.json tsconfig.json src/ main.ts app.module.ts // NestJS root module books/ books.controller.ts books.service.ts books.dto.ts middleware/ logger.middleware.ts node_modules/// Echo project treebooks-api/ go.mod go.sum main.go // entry point; เชื่อมทุกอย่างที่นี่ internal/ handler/ books.go // HTTP handler (parse, validate, เรียก service) service/ books.go // business logic store/ books.go // database query model/ book.go // struct / domain type ที่ใช้ร่วมกันgo.mod — package.json ของ Go
หัวข้อที่มีชื่อว่า “go.mod — package.json ของ Go”go.mod ประกาศ module path (ใช้เป็น prefix ของ import) และ Go version ขั้นต่ำ go get เพิ่ม dependency และ go mod tidy ลบอันที่ไม่ได้ใช้
// package.json{ "name": "books-api", "version": "1.0.0", "dependencies": { "express": "^4.18.2" }, "devDependencies": { "typescript": "^5.0.0" }}// go.modmodule github.com/you/books-api
go 1.22
require ( github.com/labstack/echo/v4 v4.12.0)main.go — เชื่อมแอปพลิเคชัน
หัวข้อที่มีชื่อว่า “main.go — เชื่อมแอปพลิเคชัน”ใน NestJS main.ts เรียก NestFactory.create ส่วนใน Echo main.go เรียก echo.New() ลงทะเบียน middleware กับ route แล้วเรียก e.Start ทุกอย่างเป็น Go code ที่ชัดเจน — ไม่มี decorator ไม่มี DI container
// NestJS main.tsimport { NestFactory } from '@nestjs/core';import { AppModule } from './app.module';
async function bootstrap() { const app = await NestFactory.create(AppModule); app.setGlobalPrefix('api'); await app.listen(3000);}bootstrap();// main.gopackage main
import ( "net/http"
"github.com/labstack/echo/v4" "github.com/labstack/echo/v4/middleware"
"github.com/you/books-api/internal/handler" "github.com/you/books-api/internal/store")
func main() { e := echo.New()
// Middleware e.Use(middleware.Logger()) e.Use(middleware.Recover())
// Dependency wiring (manual, ไม่มี container) bookStore := store.NewBookStore() bookHandler := handler.NewBookHandler(bookStore)
// Route api := e.Group("/api") api.GET("/books", bookHandler.List) api.POST("/books", bookHandler.Create) api.GET("/books/:id", bookHandler.Get) api.PUT("/books/:id", bookHandler.Update) api.DELETE("/books/:id", bookHandler.Delete)
e.Logger.Fatal(e.Start(":1323"))}รันบนเครื่องของคุณ — ต้องการ Echo module และ network port จาก project root ของคุณ:
go run main.go