golangで詰まった点: todo redeclared in this block (compile)
# golangで詰まった点
golangの返り値の書き方には2種類ある。
一つ目は返り値の方のみ指定するパターン
func GetTodo(id int) (Todo, error) {}
二つ目は同時に宣言する場合パターン
func GetTodo(id int) (todo Todo, err error) {}
二つ目のパターンで宣言していると、関数内で同じ名前で宣言した場合に指摘が入る。
正:
func GetTodo(id int) (todo Todo, err error) {
Db.Find(&todo, id)
return todo, err
}
誤:
func GetTodo(id int) (todo Todo, err error) {
var todo Todo
Db.Find(&todo, id)
return todo, err
}
# 対応するエラー
todo redeclared in this block (compile)
この仕組みをNamed return valueというらしい。
詳しくは以下の記事を参照。
基本的には使わない方向のほうが良さそう。