Try   HackMD

golang 區域變數常見的坑

題目 svcOptions.CreateValidate return bucket is null 但是 job.ErrorHandler return nil 請問 範例一與範例二 err各為什麼答案

範例一

if err = svcOptions.CreateValidate(); err != nil { if err = job.ErrorHandler(err); err != nil { return err } return err }

範例二

if err = svcOptions.CreateValidate(); err != nil { if err := job.ErrorHandler(err); err != nil { return err } return err }

題目解析 範例ㄧ 會回傳 nil , 範例二則是回傳 bucket is null, 由於

if variable := func(); variable == "err or string" { }

這個variable會是 這個if的區域變數 當if結束後 variable就會被gc


但如果是以下的範例

if variable = func(); variable == "err or string" { }

而且variable 在外層也有宣告的話 則會視為使用外層的變數 概念有點像全域變數一樣, 不慎操作會變成變數污染的一種方式