1.記錄一次切片引用錯誤,希望大家不要踩坑,用來驚醒自己!
修改之前:
import ( "context" "encoding/json" "feishu/global" "feishu/structure" "feishu/utils" "fmt" "github.com/gin-gonic/gin" larkim "github.com/larksuite/oapi-sdk-go/v3/service/im/v1" "log" ) func GetMessage(c *gin.Context) { // 建立 Client client := utils.GetSecret() // 初始化 PageToken var pageToken string // 迴圈獲取資料直到沒有更多資料 for { // 建立請求物件 req := larkim.NewListMessageReqBuilder(). ContainerIdType(`chat`). ContainerId(`oc_6731c834c3070d329fea76ac176f6076`). StartTime(`1711382400`). EndTime(`1712110005`). SortType(`ByCreateTimeAsc`). PageSize(50). PageToken(pageToken). // 更新請求中的 PageToken Build() // 發起請求 resp, err := client.Im.Message.List(context.Background(), req) // 處理錯誤 if err != nil { fmt.Println(err) return } // 服務端錯誤處理 if !resp.Success() { fmt.Println(resp.Code, resp.Msg, resp.RequestId()) return } // 業務處理 //fmt.Println(larkcore.Prettify(resp.Data)) marshal, _ := json.Marshal(resp.Data) err = json.Unmarshal(marshal, &global.MessageResponse) log.Println(err) global.SlsMessages = append(global.SlsMessages, global.MessageResponse) fmt.Println("列印陣列:", global.MessageResponse) // 更新 PageToken pageToken = *resp.Data.PageToken // 如果沒有更多資料,則退出迴圈 if !*resp.Data.HasMore { break } } //fmt.Println("列印資料:", global.SlsMessages) c.JSON(200, gin.H{ "code": 200, "data": global.SlsMessages, }) }
修改之後:
由於你每次都使用同一個全域性變數 global.SlsMessage
,所以在追加到 global.SlsMessages
切片中時,實際上是追加了同一個物件的引用,而不是它的副本。這意味著在追加後對 global.SlsMessage
所做的任何更改都會反映在 global.SlsMessages
的所有元素中。
package core import ( "context" "encoding/json" "feishu/global" "feishu/structure" "feishu/utils" "fmt" "github.com/gin-gonic/gin" larkim "github.com/larksuite/oapi-sdk-go/v3/service/im/v1" "log" ) func GetMessage(c *gin.Context) { // 建立 Client client := utils.GetSecret() // 初始化 PageToken var pageToken string // 迴圈獲取資料直到沒有更多資料 for { // 建立請求物件 req := larkim.NewListMessageReqBuilder(). ContainerIdType(`chat`). ContainerId(`oc_6731c834c3070d329fea76ac176f6076`). StartTime(`1711382400`). EndTime(`1712110005`). SortType(`ByCreateTimeAsc`). PageSize(50). PageToken(pageToken). // 更新請求中的 PageToken Build() // 發起請求 resp, err := client.Im.Message.List(context.Background(), req) // 處理錯誤 if err != nil { fmt.Println(err) return } // 服務端錯誤處理 if !resp.Success() { fmt.Println(resp.Code, resp.Msg, resp.RequestId()) return } // 業務處理 //fmt.Println(larkcore.Prettify(resp.Data)) marshal, _ := json.Marshal(resp.Data) var SlsMessage structure.MessageResponse err = json.Unmarshal(marshal, &SlsMessage) log.Println(err) global.SlsMessages = append(global.SlsMessages, SlsMessage) fmt.Println("列印陣列:", SlsMessage) // 更新 PageToken pageToken = *resp.Data.PageToken // 如果沒有更多資料,則退出迴圈 if !*resp.Data.HasMore { break } } //fmt.Println("列印資料:", global.SlsMessages) c.JSON(200, gin.H{ "code": 200, "data": global.SlsMessages, }) }
import ("context""encoding/json""feishu/global""feishu/structure""feishu/utils""fmt""github.com/gin-gonic/gin"larkim "github.com/larksuite/oapi-sdk-go/v3/service/im/v1""log")
func GetMessage(c *gin.Context) {// 建立 Clientclient := utils.GetSecret()// 初始化 PageTokenvar pageToken string// 迴圈獲取資料直到沒有更多資料
for {// 建立請求物件req := larkim.NewListMessageReqBuilder().ContainerIdType(`chat`).ContainerId(`oc_6731c834c3070d329fea76ac176f6076`).StartTime(`1711382400`).EndTime(`1712110005`).SortType(`ByCreateTimeAsc`).PageSize(50).PageToken(pageToken). // 更新請求中的 PageTokenBuild()
// 發起請求resp, err := client.Im.Message.List(context.Background(), req)
// 處理錯誤if err != nil {fmt.Println(err)return}
// 服務端錯誤處理if !resp.Success() {fmt.Println(resp.Code, resp.Msg, resp.RequestId())return}// 業務處理//fmt.Println(larkcore.Prettify(resp.Data))marshal, _ := json.Marshal(resp.Data)
err = json.Unmarshal(marshal, &global.MessageResponse)log.Println(err)global.SlsMessages = append(global.SlsMessages, global.MessageResponse)fmt.Println("列印陣列:", global.MessageResponse)// 更新 PageTokenpageToken = *resp.Data.PageToken// 如果沒有更多資料,則退出迴圈if !*resp.Data.HasMore {break}}//fmt.Println("列印資料:", global.SlsMessages)c.JSON(200, gin.H{"code": 200,"data": global.SlsMessages,})}