标签

Honeymoon - Thomas Ng

归档

近期文章

Golang笔记flipped-aurora/gin-vue-admin

本文环境 flipped-aurora/gin-vue-admin

不懂的可以评论或联系我邮箱:owen@owenzhang.com

著作权归OwenZhang所有。商业转载请联系OwenZhang获得授权,非商业转载请注明出处。


RESTful API 文章介绍

https://www.ruanyifeng.com/blog/2018/10/restful-api-best-practices.html

Mysql

// 创建成功后返回ID
func (exa *TagService) CreateExaTagByID(e example.ExaTag) (err error, tagID uint) {
    // 插入数据
    err = global.GVA_DB.Create(&e).Error
    if err != nil {
        return err, 0
    }
    // 返回插入后的 tagID
    return nil, e.ID
}

Redis

要开启use-redis: true才可以使用Redis

//打印 global.GVA_CONFIG.Redis 的配置,检查是否和手动创建的配置一致:
    global.GVA_LOG.Info("Redis 客户端类型", zap.String("Type", fmt.Sprintf("%T", global.GVA_REDIS)))
    global.GVA_LOG.Info("Redis 配置", zap.String("Addr", global.GVA_CONFIG.Redis.Addr), zap.String("Password", global.GVA_CONFIG.Redis.Password))
    // 将 tagName 保存到 Redis 中,不能写入,报错
    a = "标签12"
    err = global.GVA_REDIS.Set(context.TODO(), "tagNameKey", a, 3600*time.Second).Err()
    if err != nil {
        // 添加更多上下文信息到日志
        global.GVA_LOG.Error("Redis 写入失败", zap.String("tagName", a), zap.Error(err))
        response.FailWithMessage("Redis 写入失败", c)
        return
    }
    //创建一个新的 Redis 客户端实例,可以正常写入
    client := redis.NewClient(&redis.Options{
        Addr:     "localhost:6379", // Redis 服务地址
        Password: "",               // Redis 密码,如果没有设置密码,可以留空
        DB:       0,                // 使用的数据库,默认是 DB 0
    })
    // 将 tagName 存储到 Redis 中
    err = client.Set(context.Background(), "tagNameKey", a, 3600*time.Second).Err()
    if err != nil {
        // Redis 写入失败,记录日志并返回错误信息
        global.GVA_LOG.Error("Redis 写入失败", zap.String("tagName", a), zap.Error(err))
        response.FailWithMessage("Redis 写入失败", c)
        return
    }
    response.FailWithMessage("tag test GetExaTag", c)
    return

POST

// 获取 tagName 参数并将其赋值给变量 a
    a := tag.TagName
    // 检查 tagName 是否为空
    if a == "" {
        global.GVA_LOG.Error("tagName is empty", zap.String("tagName", a))
        response.FailWithMessage("tagName is empty", c)
        return
    }
    // 重新post的参数tagName赋值为 222
    tag.TagName = "222"

    //或者
    // 获取表单数据中的 tagName 参数
    tagName := c.PostForm("tagName")

    // 如果 tagName 为空,返回空响应
    if tagName == "" {
        fmt.Println("tagName is empty")
        c.JSON(http.StatusOK, gin.H{"tagName": ""})
        return
    }

    // 打印 tagName
    fmt.Println("Received tagName:", tagName) // 这里打印 tagName

    // 返回成功响应
    c.JSON(http.StatusOK, gin.H{
        "message": "success",
        "tagName": tagName,
    })

HTTP GET/POST请求别人接口

func (e *TagApi) httpGet(c *gin.Context) {
    // 发起 GET 请求
    getURL := "https://ip.cn/api/index?ip=&type=0"
    resp, err := http.Get(getURL)
    if err != nil {
        fmt.Println("GET request error:", err)
        return
    }
    defer resp.Body.Close()
    // 读取 GET 请求的响应
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        fmt.Println("Read GET response error:", err)
        return
    }
    //GET Response: {"rs":1,"code":0,"address":"美国  加利福尼亚 旧金山 ","ip":"172.70.90.122","isDomain":0}
    fmt.Println("GET Response:", string(body))

    // 将 JSON 数据解析为 map 类型
    var data map[string]interface{}
    if err := json.Unmarshal(body, &data); err != nil {
        c.JSON(http.StatusInternalServerError, gin.H{"error": "JSON unmarshal failed"})
        return
    }

    //{
    //    "code": 0,
    //    "data": {
    //        "address": "美国  加利福尼亚 旧金山 ",
    //        "code": 0,
    //        "ip": "172.70.85.97",
    //        "isDomain": 0,
    //        "rs": 1
    //    },
    //    "msg": "获取成功"
    //}
    response.OkWithDetailed(data, "获取成功", c)
    //response.FailWithMessage("创建失败1", c)
}
func (e *TagApi) httpPost(c *gin.Context) {
    // 设置目标 API URL
    postURL := "https://api.juejin.cn/interact_api/v2/comment/list?aid=2608&uuid=7431027474634638886&spider=0"

    // 创建 POST 请求的数据(例如:发送 JSON 数据)
    requestData := map[string]interface{}{
        "item_id":   "7202153645440925751",
        "item_type": 2,
        "limit":     3,
    }

    // 将请求数据编码为 JSON
    jsonData, err := json.Marshal(requestData)
    if err != nil {
        c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to encode JSON"})
        return
    }

    // 发起 POST 请求
    resp, err := http.Post(postURL, "application/json", bytes.NewBuffer(jsonData))
    if err != nil {
        c.JSON(http.StatusInternalServerError, gin.H{"error": "POST request failed"})
        return
    }
    defer resp.Body.Close()

    // 读取响应体
    body, err := ioutil.ReadAll(resp.Body)
    if err != nil {
        c.JSON(http.StatusInternalServerError, gin.H{"error": "Failed to read response"})
        return
    }

    // 将响应的 JSON 数据打印出来
    fmt.Println("POST Response:", string(body))

    // 将 JSON 数据解析为 map 类型
    var data map[string]interface{}
    if err := json.Unmarshal(body, &data); err != nil {
        c.JSON(http.StatusInternalServerError, gin.H{"error": "JSON unmarshal failed"})
        return
    }

    response.OkWithDetailed(data, "获取成功", c)
}

获取数据中某值data.comments[1].user_info.user_id

package main

import (
    "encoding/json"
    "fmt"
)

func main() {
    // 假设 JSON 数据如下
    jsonData := `{
        "data": {
            "count": 455,
            "has_more": true,
            "sort": 1,
            "comments": [
                {
                    "comment_id": "7214670740640564029",
                    "is_author": false,
                    "user_info": {
                        "account_amount": 0,
                        "annual_info": [],
                        "user_id": "2643639612747277"
                    }
                },
                {
                    "comment_id": "7214670740640564029",
                    "is_author": false,
                    "user_info": {
                        "account_amount": 0,
                        "annual_info": [],
                        "user_id": "2643639612747278"
                    }
                }
            ]
        }
    }`

    // 定义一个结构体来接收数据
    var result map[string]interface{}

    // 解析 JSON 数据
    if err := json.Unmarshal([]byte(jsonData), &result); err != nil {
        fmt.Println("Error parsing JSON:", err)
        return
    }

    // 获取 comments 数组
    comments := result["data"].(map[string]interface{})["comments"].([]interface{})

    // 获取第二个 comment 中的 user_id
    if len(comments) > 1 {
        // 获取第二个 comment 中的 user_info -> user_id
        userID := comments[1].(map[string]interface{})["user_info"].(map[string]interface{})["user_id"].(string)
        fmt.Println("Second comment's user_id:", userID)
    } else {
        fmt.Println("No second comment found.")
    }
}

Other

    // 打印POST请求的tagName参数
    fmt.Println("Received tagName:", tag.TagName)
    fmt.Println(1)
    //终端程序
    os.Exit(0)
    //接口返回json
    response.FailWithMessage("tag test GetExaTag", c)
    return

数据类型


package main

import "fmt"

func main() {
    // 1. 布尔类型
    var b bool = true
    fmt.Println("Boolean:", b) // 输出: Boolean: true

    // 2. 数字类型
    // 整型
    var i int = 42
    fmt.Println("Integer:", i) // 输出: Integer: 42

    // 无符号整型
    var u uint = 99
    fmt.Println("Unsigned Integer:", u) // 输出: Unsigned Integer: 99

    // 浮点型
    var f float64 = 3.14
    fmt.Println("Float:", f) // 输出: Float: 3.14

    // 复数类型
    var c complex128 = 1 + 2i
    fmt.Println("Complex:", c) // 输出: Complex: (1+2i)

    // 3. 字符类型 (rune)
    var r rune = 'A'
    fmt.Println("Rune (Character):", r) // 输出: Rune (Character): 65

    // 4. 字节类型 (byte)
    var b1 byte = 'B'
    fmt.Println("Byte:", b1) // 输出: Byte: 66

    // 5. 数组类型
    var arr [3]int = [3]int{1, 2, 3}
    fmt.Println("Array:", arr) // 输出: Array: [1 2 3]

    // 6. 切片类型
    var slice []int = []int{4, 5, 6}
    fmt.Println("Slice:", slice) // 输出: Slice: [4 5 6]

    // 7. 映射类型
    var m map[string]int = map[string]int{"a": 1, "b": 2}
    fmt.Println("Map:", m) // 输出: Map: map[a:1 b:2]

    // 8. 结构体类型
    type Person struct {
        Name string
        Age  int
    }

    var p Person = Person{Name: "Alice", Age: 30}
    fmt.Println("Struct:", p) // 输出: Struct: {Alice 30}

    // 9. 接口类型
    var i1 interface{} = "Hello"
    fmt.Println("Interface:", i1) // 输出: Interface: Hello

    // 10. 指针类型
    var ptr *int = &i
    fmt.Println("Pointer:", ptr) // 输出: Pointer: 0xc0000180a0

    // 11. 函数类型
    var add func(int, int) int = func(x, y int) int {
        return x + y
    }
    fmt.Println("Function result:", add(1, 2)) // 输出: Function result: 3

    // 12. 常量类型
    const pi float64 = 3.14159
    fmt.Println("Constant:", pi) // 输出: Constant: 3.14159
}

Buy me a cup of coffee 🙂

觉得对你有帮助,就给我打赏吧,谢谢!

微信赞赏码链接,点击跳转:

Golang笔记flipped-aurora/gin-vue-admin插图
Tags: