最近踩到一個 buffalo-pop ORM 的一個雷,範例如下:
type Job struct { ID string `json:"id" db:"id"` JobCreateType JobCreateType `json:"job_create_type" db:"job_create_type"` FileName string `json:"file_name" db:"file_name"` Status JobStatus `json:"status" db:"status"` CreatedAt time.Time `json:"created_at" db:"created_at"` UpdatedAt time.Time `json:"updated_at" db:"updated_at"` JobSourceInfo *JobSourceInfo `json:"source_info" has_one:"job_source_infos" fk_id:"job_id"` } type JobSourceInfo struct { ID string `json:"id" db:"id"` JobID string `json:"job_id" db:"job_id"` SourceURL string `json:"source_url" db:"source_url"` }
一個 Job Struct 裡面有一個 Embedded Struct JobSourceInfo ,在資料庫裡面是 1 - 1 的關係,一開始產生 Job 時,並不預期一定會產生 JobScoureInfo,這時我們都會宣告為指標,理論上只要如下面範例,檢查是不是 nil 就能知道這個物件有沒被產生。
var ji *JobSourceInfo if ji == nil { ji = new(JobSourceInfo) // do stuff }
但是.... Buffalo 的 ORM 的 Eager func 卻自作主張的幫我產生了一個 Empty Struct ,原本只需要檢查,指標是否為 nil ,但是現在卻得檢查是否為 empty Struct...
那讓我們來看看檢驗 Empty Struct 有幾種方法?


