LoginSignup
1
2

More than 1 year has passed since last update.

GoのポインタがよくわからなかったのでJSに置き換えて考える

Posted at

はじめに

備忘録です。
JSで開発している人がGolangを触ると &* で何だこれとなると思います。
なので、何をしているかJSに置き換えてみました。
個人解釈なので、認識違いがあるかと...

Goにおける &

「参照渡し」を明示的に行うためにつける。(Goは基本「値渡し」のため)

func main() {
  name := "名前"
  p = &name // 明示的に参照渡しする 別アドレスにnameのアドレスに紐付かせるイメージ
  name2 = name // 値渡し 別アドレスに別の値として格納
  p = "ポインタ君"
  name2 = "値渡し君"
  fmt.Println(name, p, name2)
  // ポインタ君, ポインタ君, 値渡し君
}
const a = { p: 'ap' };
const b = obj; // 参照渡し
const c = { ...obj }; // New Object で違うメモリ使う
b.p = 'bp';
c.p = 'cp';
console.log(a, b, c);
// { p: 'bp' }, { p: 'bp' }, { p: 'cp' }

Goにおける *

TSの型みたいなもの
ポインタ型ですよって言っているイメージ。

type PointName struct {
  FirstName: *string,
  LastName:  string,
}

func main() {
  firstName := "名"
  name:= &PointName{
    // FirstName: firstName, これだとエラーになる -> ポインタ型じゃないから
    FirstName: &firstName,
    LastName: "姓",
  }
  fmt.Println(*name.FirstName) // ポインタ使用している値は * をつけると参照先の値が出力できる
  fmt.Println(name.FirstName) // これだと firstName のアドレスが表示される
}
参考記事

1
2
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
1
2