0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Go入門】:= と = の違い(名前付き戻り値との関係)

Last updated at Posted at 2025-03-21

はじめに

関数の中で名前付き戻り値を使った場合、:== の使い分けをします。
この記事では、Goにおける :== の違い、そして名前付き戻り値との関係について書きたいと思います。

:= と = の基本的な違い

そもそもの基本的な説明

記号 意味 説明
:= 変数の宣言と初期化 x := 10 新しい変数 x を定義して値を代入
= 代入のみ x = 20 すでにある x に新しい値を代入

つまり、:= は 「この変数はこのスコープで初めて出てきます」 という宣言です。

名前付き戻り値とは?

Goでは関数の戻り値に「名前」をつけることができます。

func getUser() (name string, err error) {
    // name と err はすでにこの関数の中で使える
    name = "Alice"
    err = nil
    return
}

このようにすると、nameerr は関数のスコープ内で既に定義された変数になります。
そのため、関数内では := を使わず、= で値を代入します。

以下のように := を使ってしまうとどうなるでしょうか?

func getUser() (name string, err error) {
    name := "Alice"
    err := nil
    return
}

これは一見正しそうですが、実は新しいローカル変数 nameerr を作っているだけです。
関数の戻り値である nameerr には値が代入されていないため、呼び出し側では ""nil のままになってしまいます。

もちろん、戻り値に名前をつけずに書くこともできます。

func getUser() (string, error) {
    name := "Alice"
    err := nil
    return name, err
}

このようにすれば、スコープ内で新しく nameerr を宣言しても問題ありません。
関数の外に値を渡すには return name, err のように明示的に指定する必要があります。

まとめ

  • := は新しい変数を定義するときに使う
  • = は既存の変数に値を代入するときに使う
  • 名前付き戻り値を使う場合、その変数はすでに定義済みなので = を使うべき
  • 名前付き戻り値を使っているのに := を使ってしまうと、値が返らないことがある
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?