package main

import (
	"fmt"
	"github.com/gin-gonic/gin"
	"net/http"
)

func main() {
	router := gin.Default()
	/*
	   在 Gin 框架中，可以通过 *gin.Context 对象获取前置路由信息和客户端的 IP 地址。
	  获取前置路由信息： 在 Gin 中，可以使用 *gin.Context 对象的 FullPath() 方法来获取完整的请求路径，包括前置路由信息。
	  例如，c.FullPath() 将返回 "/users/123"，其中 "/users" 是前置路由。
	*/

	// 前置路由为 "/users"
	router.GET("/users/:id", func(c *gin.Context) {
		// 获取完整的请求路径
		fullPath := c.FullPath()
		c.JSON(http.StatusOK, gin.H{
			"fullPath": fullPath,
		})
	})

	/*
		2. 获取客户端的 IP 地址： 在 Gin 中，可以使用 *gin.Context 对象的 ClientIP() 方法获取客户端的 IP 地址。
		例如，c.ClientIP() 将返回客户端请求的 IP 地址。
	*/
	router.GET("/ip", func(c *gin.Context) {
		// 获取客户端的 IP 地址
		ip := c.ClientIP()
		fmt.Println(ip)
		clientIp := c.GetHeader("Host")
		fmt.Println(clientIp)
		c.String(http.StatusOK, "Your IP is %s", clientIp)

		/*c.JSON(http.StatusOK, gin.H{
			"ip": ip,
		})*/
		/*
		 获取整个请求头
		*/
		// 遍历并打印所有请求头
		for key, values := range c.Request.Header {
			// 请求头的值是一个字符串切片
			for _, value := range values {
				fmt.Printf("%s: %s\n", key, value)
			}
		}

		// 仅作为响应示例，实际情况可能需要不同的响应
		c.String(200, "Headers printed in server logs.")

	})

	router.Run(":8080")
}
