go語言的web開發-相關整理

 Go(Golang)是一種高效且易於佈署的語言,特別適合用來開發 Web 應用程式,因為它內建了 net/http 標準庫,不需要額外的 Web 伺服器(例如 Nginx、Apache)即可直接處理 HTTP 請求。


本指南會介紹 如何使用 Go 進行 Web 開發,涵蓋基礎與進階內容,包括:

  • 基礎 HTTP 伺服器
  • 使用路由框架(如 Gin)
  • 連接資料庫
  • 前後端 API 整合
  • Go + Docker 部署


 1. 建立最簡單的 Web 伺服器

Go 內建的 net/http 就能處理 HTTP 請求,這是最基本的 Web 伺服器:



package main import ( "fmt" "net/http" ) // 處理首頁請求 func homeHandler(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "Hello, Go Web!") } func main() { http.HandleFunc("/", homeHandler) // 設定路由 fmt.Println("伺服器運行在 http://localhost:8080") http.ListenAndServe(":8080", nil) // 啟動伺服器 }

如何運行?



go run main.go

然後開啟 **http://localhost:8080**,就能看到 Hello, Go Web! 🎉

🔹 優點:無需額外框架,標準庫內建功能
🔹 缺點:手動管理路由,對大型專案不夠靈活


2. 使用 Gin 框架(推薦)

net/http 很簡單但缺乏彈性,因此推薦使用 Gin,它是一個輕量且高效的 Web 框架。

🔹 安裝 Gin

go get -u github.com/gin-gonic/gin

 

🔹 建立 API 伺服器


package main
import (
"github.com/gin-gonic/gin"
)
func main() {
r := gin.Default()
// 定義 GET API
r.GET("/hello", func(c *gin.Context) {
c.JSON(200, gin.H{"message": "Hello, Gin!"})
})
// 啟動伺服器
r.Run(":8080")
}

 

開啟瀏覽器:
http://localhost:8080/hello

你會看到:

{"message": "Hello, Gin!"}


 3. 連接 MySQL / PostgreSQL

如果你要開發一個完整的 Web 應用,通常會需要資料庫,這裡示範如何使用 GORM 連接 MySQL。

🔹 安裝 GORM 與 MySQL 驅動

go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql

🔹 連接 MySQL

package main
import (
"fmt"
"log"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
// 定義 User 模型
type User struct {
ID uint `json:"id" gorm:"primaryKey"`
Name string `json:"name"`
Age int `json:"age"`
}
func main() {
// 連接 MySQL
dsn := "root:password@tcp(127.0.0.1:3306)/testdb?charset=utf8mb4&parseTime=True&loc=Local"
db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
log.Fatal("無法連接資料庫:", err)
}
// 自動創建表格
db.AutoMigrate(&User{})
// 新增資料
user := User{Name: "Alice", Age: 25}
db.Create(&user)
// 查詢資料
var users []User
db.Find(&users)
fmt.Println(users)
}

 

🔹 優點

GORM 提供 ORM 功能,簡化資料庫操作

AutoMigrate 可自動創建表格

支援多種資料庫(MySQL、PostgreSQL、SQLite)


4. RESTful API(CRUD 操作)

建立一個完整的 REST API,包含:

    • GET /users - 獲取所有使用者
    • POST /users - 新增使用者
    • GET /users/:id - 獲取特定使用者
    • PUT /users/:id - 更新使用者
    • DELETE /users/:id - 刪除使用者

package main
import (
"log"
"net/http"
"github.com/gin-gonic/gin"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
// 定義 User 模型
type User struct {
ID uint `json:"id" gorm:"primaryKey"`
Name string `json:"name"`
Age int `json:"age"`
}
var db *gorm.DB
func main() {
// 連接 MySQL
var err error
dsn := "root:password@tcp(127.0.0.1:3306)/testdb?charset=utf8mb4&parseTime=True&loc=Local"
db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
log.Fatal("無法連接資料庫:", err)
}
// 自動創建表格
db.AutoMigrate(&User{})
// 設定 Gin 路由
r := gin.Default()
// 獲取所有使用者
r.GET("/users", func(c *gin.Context) {
var users []User
db.Find(&users)
c.JSON(http.StatusOK, users)
})
// 新增使用者
r.POST("/users", func(c *gin.Context) {
var user User
if err := c.ShouldBindJSON(&user); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
db.Create(&user)
c.JSON(http.StatusOK, user)
})
// 啟動伺服器
r.Run(":8080")
}


測試 API(使用 cURL 或 Postman):


# 取得所有使用者 curl -X GET http://localhost:8080/users # 新增使用者 curl -X POST http://localhost:8080/users -H "Content-Type: application/json" -d '{"name": "Bob", "age": 30}'


5. 使用 Docker 部署 Go Web 應用

建立 Dockerfile

FROM golang:1.21-alpine
WORKDIR /app
COPY . .
RUN go mod tidy
RUN go build -o main .
CMD ["/app/main"]


建置與執行:

docker build -t go-web-app .
docker run -p 8080:8080 go-web-app


總結

技術說明
net/http   Go 內建 HTTP 伺服器
Gin    高效能 Web 框架(推薦)
GORM   ORM 資料庫操作(支援 MySQL, PostgreSQL)
Docker   容器化部署

這樣,你就可以用 Go 開發 Web 應用程式,包含 API、資料庫、部署




留言

這個網誌中的熱門文章

[Kotlin]如何學習Kotlin

[golang]如何使用 gorm 高效執行批量插入 (可以透過 Create()、CreateInBatches(),或者 原生 SQL 語句 來提升效率)

[Kotlin]Kotlin Multiplatform (KMP) 如何安裝使用和部署