Go 関数における参照および値による受け渡しの謎を明らかにする
Go では、参照および値による受け渡しの概念は複雑に見えるかもしれません。最初は。明確にしておくと、Go はポインターを扱う場合でも、値による受け渡しを最大限に活用しています。関数へのポインターを渡すときは、基本的に、参照されるオブジェクトではなく、その値を渡します。
関数の引数のアスタリスク (*) の目的
の場合func PutTasks(db *sql.DB) のような関数引数の型の前にアスタリスク (*) が表示されます。これは、引数がこれは「sql.DB へのポインター」型であり、「sql.DB」型とは対照的です。関数はこのポインタを介して参照オブジェクトを操作するため、この区別は重要です。
ポインタを渡す利点
ポインタを渡すと、オブジェクト間で値を共有するメカニズムが提供されます。呼び出し元の関数と呼び出された関数。呼び出された関数内の参照オブジェクトに対する変更は、呼び出し元に表示されます。これは基本的に Java のオブジェクト受け渡しがデフォルトで実現することですが、Go ではそのような共有のためにポインタを明示的に使用する必要があります。
たとえば、オブジェクトのプロパティを変更する必要がある Setter 関数があるとします。 。 Java ではこれは簡単ですが、Go ではポインターがなければ、関数はオブジェクトのコピーを受け取るだけであり、加えられた変更は元のオブジェクトには反映されません。 Setter 関数へのポインタを渡すことにより、関数が元のオブジェクト上で動作できるようになり、関数呼び出しを超えて変更を維持できるようになります。
追加リソース
このテーマについてさらに詳しく調べるには、次のリソースを参照してください:
以上がGo の値渡しメカニズムはポインターでどのように機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。