dave-wind / blog

native javascript blog
0 stars 0 forks source link

go- gin框架如何返回 /url?name=123&age=20&demo=1,2,3,4 所有query参数;以及 make讲解 (2023-12月) #26

Open dave-wind opened 8 months ago

dave-wind commented 8 months ago

Go map


# 首先  query是url.Values类型  ==  map[string][]string 
query := c.Request.URL.Query() 

// range 对象和切片 循环区别 

1. 当我们for循环 一个 map 会获取 key 和 item;
2. 当我们for循环 一个 slice 会获取 index 和 item;

标准答案


type GoObject map[string]interface{}

func main() {

R := gin.Default()

R.GET("/url", func(c *gin.Context) {

    query := c.Request.URL.Query()

    fmt.Println("query-------", query)                  // map[age:[20] demo:[1,2,3,4] name:[123]]
    fmt.Println("Encode------", query.Encode())         // age=20&demo=1%2C2%2C3%2C4&name=123
    fmt.Println("RawQuery----", c.Request.URL.RawQuery) // name=123&age=20&demo=1,2,3,4

    /*
    *   query like
    *       originalMap := map[string][]string {
    *           "key1": {"value1", "value2"},
    *            key2": {"value3", "value4"},
    *       }
     */

             // 方式1 字面量声明在创建 会自动分配大小
             // 这里 response 还是 一个指针对象;使用值的时候需要 反引用
    var response = &GoObject{
        "message": "pong",
    }
    // 方式 make创建 一个 空对象 然后后续可以动态添加key 
    var response2 = make(GoObject)

    for key, value := range query {
            // 反引用获取值 在取key 赋值
        (*response)[key] = value[0]
    }

    c.JSON(200, response)
})

R.Run(":8083")

}


> make 知识点
```go
make 函数主要 定义 引用类型;make([]T, length, capacity T)
1.对象 对象的大小会自动分配 与数组不同
2.定义slice切片 

T 是切片中元素的类型。
length 是切片的初始长度,即切片中包含的元素数量。
capacity 是切片的初始容量,即底层数组可以容纳的元素数量。容量总是大于或等于长度

       var arr = make([]string, 3)
       arr = []string{"key1", "value1", "value2"}

3.定义 通道: