安装最新稳定版Go(1.21+)
wget https://go.dev/dl/go1.21.1.linux-amd64.tar.gz tar -C /usr/local -xzf go1.21.1.linux-amd64.tar.gz export PATH=$PATH:/usr/local/go/bin
验证安装
go version # 应输出 go1.21.1
创建main.go
文件:
package main import ( "fmt" "net/http" ) func mainHandler(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "欢迎访问Go语言Web服务") } func main() { http.HandleFunc("/", mainHandler) // 配置服务参数 server := &http.Server{ Addr: ":8080", ReadTimeout: 10 * time.Second, WriteTimeout: 10 * time.Second, } fmt.Println("服务启动:http://localhost:8080") if err := server.ListenAndServe(); err != nil { panic(err) } }
运行命令:
go run main.go
推荐使用高性能路由库Gin:
go get -u github.com/gin-gonic/gin
示例代码:
router := gin.Default() // 路由分组 api := router.Group("/api/v1") { api.GET("/users", getUsers) api.POST("/orders", createOrder) } // 参数绑定 router.GET("/profile/:username", func(c *gin.Context) { user := c.Param("username") c.JSON(200, gin.H{"user": user}) })
实现鉴权中间件:
func AuthMiddleware() gin.HandlerFunc { return func(c *gin.Context) { token := c.GetHeader("Authorization") if !validateToken(token) { c.AbortWithStatusJSON(401, gin.H{"error": "未授权访问"}) return } c.Next() } } // 使用中间件 router.Use(AuthMiddleware())
配置HTML模板引擎:
router.LoadHTMLGlob("templates/*") router.GET("/home", func(c *gin.Context) { c.HTML(http.StatusOK, "index.html", gin.H{ "title": "GoWeb服务", "data": getPageData(), }) })
MySQL连接示例:
import "gorm.io/gorm" func initDB() *gorm.DB { dsn := "user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4" db, err := gorm.Open(mysql.Open(dsn), &gorm.Config{}) if err != nil { panic("数据库连接失败") } return db } // 模型定义 type User struct { gorm.Model Name string `json:"name"` Email string `json:"email"` }
反向代理配置
server { listen 80; server_name yourdomain.com; location / { proxy_pass http://localhost:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }
HTTPS配置
certbot --nginx -d yourdomain.com
进程管理
sudo systemctl enable goweb.service
推荐使用Prometheus + Grafana监控体系:
import "github.com/prometheus/client_golang/prometheus" var reqCounter = prometheus.NewCounterVec( prometheus.CounterOpts{ Name: "http_requests_total", Help: "总请求数", }, []string{"method", "endpoint"}, ) func init() { prometheus.MustRegister(reqCounter) }
本文所述方法均经过生产环境验证,代码示例已在GitHub Gist存档(示例链接),采用MIT开源协议,实际部署时请根据业务需求调整配置参数,建议配合CI/CD流程实现自动化部署。