Struct:

type User struct {
    DoubanId  string `gorm:"type:varchar(20); primaryKey"`
    CreatedAt time.Time
    UpdatedAt time.Time
    DeletedAt gorm.DeletedAt `gorm:"index"`
    Subjects  []Subject      `gorm:"many2many:user_subjects"`
}

type Subject struct {
    SubjectId    string `gorm:"type:varchar(20); primaryKey"`
    CreatedAt    time.Time
    UpdatedAt    time.Time
    DeletedAt    gorm.DeletedAt `gorm:"index"`
    SubjectName  string
    SubjectPhoto string
}

Code:

    doubanId := c.Query("doubanId")
    startIndexText := c.DefaultQuery("startIndex", "0")

    var user model.User

    startIndex, _ := strconv.ParseInt(startIndexText, 10, 32)

    utils.GormDb.Model(&model.User{DoubanId: doubanId}).Preload("Subjects", func(db *gorm.DB) *gorm.DB {
        return db.Limit(15).Offset(int(startIndex))
    }).First(&user)