Editor PHP Xinyi membawakan anda penyelesaian kepada masalah ralat semasa mengikat data borang dalam rangka kerja GIN Golang. Apabila menggunakan rangka kerja GIN untuk pengikatan data borang, anda kadangkala menghadapi beberapa masalah, seperti ketidakupayaan untuk menghuraikan data borang dengan betul. Masalah ini mungkin disebabkan oleh pengikatan parameter, ketidakpadanan jenis data, dsb. Artikel ini akan memperkenalkan cara untuk mengikat data borang dengan betul dan menyelesaikan ralat biasa untuk membantu pembangun berjaya menggunakan rangka kerja GIN untuk kerja pembangunan.
Apabila saya cuba mengikat permintaan data borang pada struct, ia ralat dengan "Fatal Error: Stack Overflow".
Ini kod saya. Tiada apa yang perlu dijelaskan. Saya mula menggunakan kod tetapi tidak dapat memahaminya.
Struktur
type Wish struct { ID int `gorm:"primarykey;autoIncrement" json:"id"` CreatedAt time.Time `json:"created_at"` UpdatedAt time.Time `json:"updated_at"` DeletedAt gorm.DeletedAt `gorm:"index" json:"deleted_at"` UserID int `json:"user_id" form:"user_id"` User *User `gorm:"foreignKey:UserID" json:"user_data,omitempty"` WishTypeID int `json:"wish_type_id" form:"wish_type_id"` WishType *WishType `gorm:"foreignKey:WishTypeID" json:"wish_type_data,omitempty"` ProcessTrack []*ProcessTrack `gorm:"foreignKey:WishID" json:"process_track,omitempty"` VacationDateRange *VacationDateRange `gorm:"foreignKey:WishID" json:"vacation_date_range,omitempty"` Content string `gorm:"type:varchar(255)" json:"content" form:"content"` Status WishStatus `gorm:"type:integer" json:"status" form:"status"` Files []*File `gorm:"polymorphic:Module;polymorphicValue:wish_files" json:"files,omitempty"` }
Pengawal
var wish migrations.Wish if err := c.Bind(&wish); err != nil { c.JSON(400, gin.H{"error": err.Error(), "message": "Talep Okunamadı!"}) return } c.JSON(200, wish) return
Minta
Saya mengubah suai pengawal
type Req struct { Content string `form:"content"` WishTypeID int `form:"wish_type_id"` VacationDateRange *migrations.VacationDateRange `form:"vacation_date_range"` } err, i, g := authorizer.AuthorizeIt(c, a.Subject, a.Action) if err != nil { c.JSON(i, g) return } var wishReq Req var wish migrations.Wish if err := c.Bind(&wishReq); err != nil { c.JSON(400, gin.H{"error": err.Error(), "message": "Wish can't bind."}) return } wish.WishTypeID = wishReq.WishTypeID wish.Content = wishReq.Content wish.VacationDateRange = wishReq.VacationDateRange
Tetapi saya masih tidak faham mengapa ia tidak boleh menjadi gaya pertama. Saya juga telah menambah penggunaan biasa. Ia biasanya berfungsi juga.
err, i, g := authorizer.AuthorizeIt(c, a.Subject, a.Action) if err != nil { c.JSON(i, g) return } var announce mig.Announce err = c.Bind(&announce) if err != nil { c.JSON(400, gin.H{"error": err.Error(), "message": "Announce can't bind. Error Code: AN-CRT-20"}) return }
Atas ialah kandungan terperinci Ralat GIN Golang semasa mengikat data borang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!