*
(ポインタ)
-
意味:
*
はポインタ型を示します。ポインタは、変数のメモリアドレスを指し示すための型です。 - 使い方: 変数のポインタを取得したり、ポインタを使ってデータにアクセスしたりします。
例
var x int = 10
var p *int = &x // xのポインタを取得
ここで、p
はx
のメモリアドレスを持つポインタです。
&
(アドレス演算子)
-
意味:
&
は変数のアドレスを取得するための演算子です。変数のメモリアドレスを返します。 - 使い方: 変数のアドレスを取得してポインタに代入する際に使用します。
例
var x int = 10
var p *int = &x // xのアドレスを取得
ここで、p
はx
のアドレスを持つポインタです。
コード内での使用
あなたのコード内での*
と&
の使用に関して具体的に見てみましょう。
return &UserNotFound{Username: "mike"}
-
&UserNotFound{...}
:UserNotFound
のインスタンスを生成し、そのポインタを返しています。この場合、UserNotFound
のポインタを返すことで、エラーを呼び出した側でそのインスタンスにアクセスできるようにしています。
func (e *UserNotFound) Error() string {
return e.Username
}
-
(e *UserNotFound)
:UserNotFound
のポインタ型を受け取るメソッドです。ポインタを使うことで、メソッド内で構造体のフィールドを変更することができ、またメモリ効率も良くなります。
まとめ
-
*
はポインタ型を示し、ポインタを使用することでメモリアドレスにアクセスします。 -
&
は変数のアドレスを取得するために使用され、そのアドレスをポインタに格納します。