GOPATH
与GOROOT
环境变量pg
管理工具package main import ( "fmt" "net/http" ) func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { fmt.Fprintf(w, "访问成功!当前时间:%v", time.Now().Format("2006-01-02 15:04:05")) }) server := &http.Server{ Addr: ":8080", ReadTimeout: 10 * time.Second, WriteTimeout: 15 * time.Second, IdleTimeout: 60 * time.Second, } if err := server.ListenAndServe(); err != nil { panic(fmt.Sprintf("服务器启动失败: %v", err)) } }
此实现包含:
使用gorilla/mux
增强路由功能:
r := mux.NewRouter() r.HandleFunc("/products/{category}", productHandler).Methods("GET") r.HandleFunc("/users/{id:[0-9]+}", userHandler).Methods("GET") http.Handle("/", r)
fs := http.FileServer(http.Dir("./static")) r.PathPrefix("/static/").Handler(http.StripPrefix("/static/", fs))
创建认证中间件示例:
func authMiddleware(next http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { token := r.Header.Get("Authorization") if !validateToken(token) { http.Error(w, "未授权访问", http.StatusUnauthorized) return } next.ServeHTTP(w, r) }) }
PostgreSQL连接示例:
import ( "database/sql" _ "github.com/lib/pq" ) func initDB() *sql.DB { connStr := "user=webdb dbname=app_db sslmode=disable" db, err := sql.Open("postgres", connStr) if err != nil { panic(err) } db.SetMaxOpenConns(25) db.SetMaxIdleConns(5) db.SetConnMaxLifetime(5 * time.Minute) return db }
编译优化
GOOS=linux GOARCH=amd64 go build -ldflags="-s -w" -o server upx --best server
Nginx反向代理配置
upstream go_app { server 127.0.0.1:8080; keepalive 32; } server { listen 443 ssl http2; ssl_certificate /path/to/fullchain.pem; ssl_certificate_key /path/to/privkey.pem; location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_pass http://go_app; } }
系统服务管理
创建systemd服务单元:
[Unit] Description=Go Web Service After=network.target [Service] ExecStart=/opt/app/server Restart=always User=www-data Group=www-data [Install] WantedBy=multi-user.target
sync.Pool
对象池化本文参考技术文档:
Go官方文档 v1.21、PostgreSQL 15手册、Nginx配置指南、OWASP Web安全标准