Javascript 有没有可能让GORM用一个空切片来填充nil值,而不是仅仅为nil?

Javascript 有没有可能让GORM用一个空切片来填充nil值,而不是仅仅为nil?,javascript,go,go-gorm,Javascript,Go,Go Gorm,我目前正在做一个项目,现在我有一些基本的Javascript blah.map(函数(lBlah){}) blah是从对数据库的ajax请求生成的,该数据库返回一个对象数组(如果愿意,也可以是切片) 唯一的问题是我得到了一个JS错误:无法读取null的属性“map”这是因为如果我的一对多关联当时没有关联值,它只会使该字段nil而不是空片,因此当我json.Marshal时,它会发送一个null值,而不是一个空的[]这将修复我的所有错误,当前必须覆盖从数据库返回的每个结构,并检查零值,然后生成([

我目前正在做一个项目,现在我有一些基本的Javascript

blah.map(函数(lBlah){})

blah
是从对数据库的ajax请求生成的,该数据库返回一个对象数组(如果愿意,也可以是切片)

唯一的问题是我得到了一个JS错误:
无法读取null的属性“map”
这是因为如果我的
一对多
关联当时没有关联值,它只会使该字段
nil
而不是空片,因此当我
json.Marshal
时,它会发送一个null值,而不是一个空的
[]
这将修复我的所有错误,当前必须覆盖从数据库返回的每个
结构
,并检查零值,然后
生成([]blah,0)
,这很烦人,看起来很混乱。有没有更简单的方法来实现这一点?是否可以设置默认值
json:“default:[]”
或其他什么

// ForumContainer is a table in the database
type ForumContainer struct {
    gorm.Model
    ContainerName string `sql:"not null;unique"`
    AccessLevel   int    `sql:"not null;default:0"`
    MainThreads   []ForumMainThreads
}

// ForumMainThreads is the table in the database
type ForumMainThreads struct {
    gorm.Model
    ForumContainerID int    `sql:"index"`
    ThreadName       string `sql:"not null;unique"`
    Threads          int    `sql:"not null;default:0"`
    Replies          int    `sql:"not null;default:0"`
    AccessLevel      int    `sql:"not null;default:0"`
    Posts            []ForumMainThreadsPosts
}

// ForumMainThreadsPosts is a table in the database
type ForumMainThreadsPosts struct {
    gorm.Model
    UserID             int    `sql:"index"`
    ForumMainThreadsID int    `sql:"index"`
    Title              string `sql:"not null;unique"`
    Body               string `sql:"type:text;not null"`
    Sticky             bool   `sql:"not null;default:0"`
    Views              int    `sql:"not null;default:0"`
    ReplyCount         int    `sql:"not null;default:0"`
    Replies            []ForumMainPostsReplies
}

// ForumMainPostsReplies is a table in the database
type ForumMainPostsReplies struct {
    gorm.Model
    ForumMainThreadsPostsID int `sql:"index"`
    UserID                  int `sql:"index"`
    Body                    string
}
查询通过以下方式完成:


db.Preload(“MainThreads”).Find(&forumContainers)

您可以修改整个列表以检查您的字段是否为nil,然后用结构的空片段替换它,如下所示:

for i := range list {
    if list[i].MainThreads== nil {
        list[i].SubCategories = make([]ForumMainThreads, 0)
    }
}

对所有属于任何类型切片的字段重复此操作

您可以添加更多信息吗?你是如何定义模型的?你是如何查询的?@AbelardoMendoza updated我有一个类似的模式,具有一对多关系,切片作为空切片,并作为空数组正确地传递给前端。您可以在执行查询
db.Preload(“MainThreads”).Find(&forumContainers)
之后立即尝试:
fmt.Println(forumContainers.MainThreads)
。它也可能是GORM的旧版本。您使用的是哪个版本?@AbelardoMendoza据我所知,最近一次我只是在几个小时前做了一个
go get
,我刚刚更新了我的gorm,并尝试了相同的一对多模型,但我仍然得到了空片。您在查询之后就尝试了fmt.Println吗?您也可以使用Gorm AfterFind钩子。看到这个了吗