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というらしい。

詳しくは以下の記事を参照。

基本的には使わない方向のほうが良さそう。

zenn.dev