golang使用Golang构建Web应用程序电子书教程插件Build web application with Golang

使用Golang构建Web应用程序电子书教程

多语言版本

这本《使用Golang构建Web应用程序》电子书提供了多种语言版本:

  • 简体中文
  • 正體中文
  • English
  • Deutsch
  • Español
  • Français
  • Português - Brasil
  • Русский
  • Türkçe
  • বাংলা
  • 日本語
  • پارسی
  • ภาษาไทย

简单Web应用示例

以下是一个使用Golang构建Web应用程序的基本示例:

package main

import (
	"fmt"
	"net/http"
)

// 处理主页请求
func homeHandler(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintf(w, "欢迎来到Golang Web应用!")
}

// 处理关于页面请求
func aboutHandler(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintf(w, "这是一个关于页面")
}

func main() {
	// 设置路由
	http.HandleFunc("/", homeHandler)
	http.HandleFunc("/about", aboutHandler)
	
	// 启动服务器
	fmt.Println("服务器正在运行,访问地址: http://localhost:8080")
	http.ListenAndServe(":8080", nil)
}

更完整的Web应用示例

下面是一个更完整的Golang Web应用示例,包括HTML模板渲染:

package main

import (
	"html/template"
	"log"
	"net/http"
)

// 定义数据结构
type PageData struct {
	Title   string
	Content string
}

func main() {
	// 设置路由
	http.HandleFunc("/", homeHandler)
	http.HandleFunc("/about", aboutHandler)
	
	// 启动服务器
	log.Println("服务器正在运行,访问地址: http://localhost:8080")
	log.Fatal(http.ListenAndServe(":8080", nil))
}

func homeHandler(w http.ResponseWriter, r *http.Request) {
	// 解析模板
	tmpl, err := template.ParseFiles("templates/home.html")
	if err != nil {
		http.Error(w, err.Error(), http.StatusInternalServerError)
		return
	}
	
	// 准备数据
	data := PageData{
		Title:   "首页",
		Content: "欢迎来到Golang Web应用主页",
	}
	
	// 渲染模板
	err = tmpl.Execute(w, data)
	if err != nil {
		http.Error(w, err.Error(), http.StatusInternalServerError)
	}
}

func aboutHandler(w http.ResponseWriter, r *http.Request) {
	tmpl, err := template.ParseFiles("templates/about.html")
	if err != nil {
		http.Error(w, err.Error(), http.StatusInternalServerError)
		return
	}
	
	data := PageData{
		Title:   "关于我们",
		Content: "这是一个关于我们的页面",
	}
	
	err = tmpl.Execute(w, data)
	if err != nil {
		http.Error(w, err.Error(), http.StatusInternalServerError)
	}
}

社区

如果您在使用Golang构建Web应用时遇到问题,可以加入以下社区获取帮助:

  • QQ群:148647580
  • BBS论坛

贡献者

本书由众多贡献者共同完成,完整贡献者列表请查看贡献者页面。

许可证

  • 书籍许可证:CC BY-SA 3.0 License
  • 代码许可证:BSD 3-Clause License

更多关于golang使用Golang构建Web应用程序电子书教程插件Build web application with Golang的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang使用Golang构建Web应用程序电子书教程插件Build web application with Golang的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


使用Golang构建Web应用程序教程

Go语言(Golang)因其高性能、简洁语法和强大的并发特性,成为构建Web应用程序的优秀选择。下面我将介绍如何使用Golang开发Web应用,并提供相关示例代码。

1. 基础Web服务器

首先,让我们创建一个最简单的HTTP服务器:

package main

import (
	"fmt"
	"net/http"
)

func main() {
	http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
		fmt.Fprintf(w, "欢迎访问Go Web应用!")
	})

	fmt.Println("服务器启动,监听端口8080...")
	http.ListenAndServe(":8080", nil)
}

2. 使用Gin框架

Gin是Go中最流行的Web框架之一,提供了路由、中间件等高级功能:

package main

import (
	"github.com/gin-gonic/gin"
)

func main() {
	r := gin.Default()

	// 定义路由
	r.GET("/", func(c *gin.Context) {
		c.JSON(200, gin.H{
			"message": "欢迎使用Gin框架",
		})
	})

	// 带参数的路由
	r.GET("/user/:name", func(c *gin.Context) {
		name := c.Param("name")
		c.String(200, "你好, %s", name)
	})

	// 启动服务器
	r.Run(":8080")
}

3. 数据库集成

与PostgreSQL数据库集成的示例:

package main

import (
	"database/sql"
	"fmt"
	"log"
	"net/http"

	"github.com/gin-gonic/gin"
	_ "github.com/lib/pq"
)

type User struct {
	ID    int    `json:"id"`
	Name  string `json:"name"`
	Email string `json:"email"`
}

func main() {
	// 连接数据库
	db, err := sql.Open("postgres", "user=postgres dbname=testdb sslmode=disable")
	if err != nil {
		log.Fatal(err)
	}
	defer db.Close()

	// 初始化Gin
	r := gin.Default()

	// 获取所有用户
	r.GET("/users", func(c *gin.Context) {
		rows, err := db.Query("SELECT id, name, email FROM users")
		if err != nil {
			c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
			return
		}
		defer rows.Close()

		var users []User
		for rows.Next() {
			var u User
			if err := rows.Scan(&u.ID, &u.Name, &u.Email); err != nil {
				c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
				return
			}
			users = append(users, u)
		}

		c.JSON(http.StatusOK, users)
	})

	// 启动服务器
	r.Run(":8080")
}

4. RESTful API示例

创建一个完整的CRUD API:

package main

import (
	"net/http"

	"github.com/gin-gonic/gin"
)

var users = []User{
	{ID: 1, Name: "张三", Email: "zhangsan@example.com"},
	{ID: 2, Name: "李四", Email: "lisi@example.com"},
}

type User struct {
	ID    int    `json:"id"`
	Name  string `json:"name"`
	Email string `json:"email"`
}

func main() {
	r := gin.Default()

	// 获取所有用户
	r.GET("/users", getUsers)

	// 创建用户
	r.POST("/users", createUser)

	// 获取单个用户
	r.GET("/users/:id", getUserByID)

	// 更新用户
	r.PUT("/users/:id", updateUser)

	// 删除用户
	r.DELETE("/users/:id", deleteUser)

	r.Run(":8080")
}

func getUsers(c *gin.Context) {
	c.JSON(http.StatusOK, users)
}

func createUser(c *gin.Context) {
	var newUser User
	if err := c.ShouldBindJSON(&newUser); err != nil {
		c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
		return
	}

	// 生成ID (实际项目中应该使用数据库自增ID)
	newUser.ID = len(users) + 1
	users = append(users, newUser)

	c.JSON(http.StatusCreated, newUser)
}

func getUserByID(c *gin.Context) {
	id := c.Param("id")
	// 这里简化处理,实际应该转换id为int并查询
	for _, user := range users {
		if fmt.Sprintf("%d", user.ID) == id {
			c.JSON(http.StatusOK, user)
			return
		}
	}
	c.JSON(http.StatusNotFound, gin.H{"message": "用户未找到"})
}

// 其他CRUD操作类似...

5. 中间件使用

Gin中间件示例:

package main

import (
	"fmt"
	"time"

	"github.com/gin-gonic/gin"
)

func Logger() gin.HandlerFunc {
	return func(c *gin.Context) {
		// 请求前
		start := time.Now()
		path := c.Request.URL.Path

		// 处理请求
		c.Next()

		// 请求后
		latency := time.Since(start)
		fmt.Printf("[%s] %s %s %v\n",
			c.Request.Method,
			path,
			c.ClientIP(),
			latency,
		)
	}
}

func main() {
	r := gin.New()

	// 使用自定义中间件
	r.Use(Logger())

	r.GET("/", func(c *gin.Context) {
		c.String(200, "Hello, World!")
	})

	r.Run(":8080")
}

6. 项目结构建议

对于大型项目,推荐的组织结构:

/myapp
├── cmd/
│   └── server/
│       └── main.go
├── internal/
│   ├── controllers/
│   ├── models/
│   ├── repositories/
│   ├── services/
│   └── middleware/
├── pkg/
├── configs/
├── migrations/
├── static/
├── templates/
├── go.mod
└── go.sum

7. 部署选项

Go Web应用可以轻松部署:

  1. 直接运行二进制文件
  2. 使用Docker容器
  3. 部署到云平台(AWS, GCP, Azure等)

Dockerfile示例:

FROM golang:1.19-alpine AS builder

WORKDIR /app
COPY . .
RUN go mod download
RUN go build -o main .

FROM alpine:latest
WORKDIR /app
COPY --from=builder /app/main .
COPY --from=builder /app/configs ./configs

EXPOSE 8080
CMD ["./main"]

学习资源推荐

  1. 官方文档: https://golang.org/doc/
  2. Gin框架文档: https://gin-gonic.com/docs/
  3. Go Web编程: https://gowebexamples.com/
  4. 电子书《Go Web编程》

Go语言构建Web应用具有高性能、低内存占用和快速开发的优势。通过合理利用Go的并发特性和丰富的生态系统,你可以构建出高效、可靠的Web服务和API。

回到顶部