因此,在向mongoDB中插入模型时,我遇到了一些意想不到的行为。当我通过Postman将空正文发送到服务器并将其插入数据库时,返回给Postman的结果将name和number默认为它们的预期默认值0和"",但对于data,它不是默认为空数组,而是默认为null,尽管在Go控制台插入之前和之后打印出来的值不是零,而是空数组。插入前将data字段分配为空[]int{}解决了这个问题,手动从Postman发送空数组作为数据字段也是如此,但我很好奇是否有其他方法可以保证数组字段默认为[],而不是null。
这是我的模型:
type Test struct{
Name string `json:"name" bson:"name"`
Number int `json:"number" bson:"number"`
Data []int `json:"data" bson:"data"`
}发布于 2022-06-28 06:35:30
实现bson.Marshaler,在保存值时将调用MarshalBSON()函数
package main
import (
"log"
"go.mongodb.org/mongo-driver/bson"
)
type Test struct {
Data []int `json:"data" bson:"data"`
}
func (t *Test) MarshalBSON() ([]byte, error) {
if t.Data == nil {
log.Println("t.Data is nil")
t.Data = make([]int, 0)
}
type my Test
return bson.Marshal((*my)(t))
}
func main() {
h := Test{}
data, _ := bson.Marshal(&h)
log.Print(bson.Raw(data))
}
// output:
// 2009/11/10 23:00:00 t.Data is nil
// 2009/11/10 23:00:00 {"data": []}演示go游乐场链接:https://go.dev/play/p/1WlO_44hnco
此外,您还可以检查以下链接:Autofill created_at and updated_at in golang struct while pushing into mongodb
https://stackoverflow.com/questions/72724175
复制相似问题