diff --git a/ja/02.3.md b/ja/02.3.md index def7dedc..7ae09619 100644 --- a/ja/02.3.md +++ b/ja/02.3.md @@ -102,7 +102,7 @@ Goにで最も強力なロジックコントロールといえば、`for`です `break`と`continue`はタグを添えることができます。複数ネストしたループで外側のループからジャンプする際に使用されます。 -`for`は`range`と組み合わせて`slice`と`map`のデータを読み込むことができます: +`for`は`range`と組み合わせて`array`、`slice`、`map`、`string`のデータを読み込むことができます: for k,v:=range map { fmt.Println("map's key:",k) @@ -321,7 +321,7 @@ Goの関数は可変長引数をサポートしています。可変長引数を - ポインタを渡すことで複数の関数が同じオブジェクトに対して操作を行うことができます。 - ポインタ渡しは比較的軽いです(8バイト)、ただのメモリのアドレスです。ポインタを使って大きな構造体を渡すことができます。もし値渡しを行なっていたら、相対的にもっと多くのシステムリソース(メモリと時間)を毎回のコピーで消費することになります。そのため大きな構造体を渡す際は、ポインタを使うのが賢い選択というものです。 -- Go言語の`string`、`slice`、`map`の3つの型はメカニズムを実現するポインタのようなものです。ですので、直接渡すことができますので、アドレスを取得してポインタを渡す必要はありません。(注:もし関数が`slice`の長さを変更する場合はアドレスを取得し、ポインタを渡す必要があります。) +- Go言語の`channel`、`slice`、`map`の3つの型はメカニズムを実現するポインタのようなものです。ですので、直接渡すことができますので、アドレスを取得してポインタを渡す必要はありません。(注:もし関数が`slice`の長さを変更する場合はアドレスを取得し、ポインタを渡す必要があります。) ### defer Go言語のすばらしいデザインの中に、遅延(defer)文法があります。関数の中でdefer文を複数追加することができます。関数が最後まで実行された時、このdefer文が逆順に実行されます。最後にこの関数が返ります。特に、リソースをオープンする操作を行なっているようなとき、エラーの発生に対してロールバックし、必要なリソースをクローズする必要があるかと思います。さもなければとても簡単にリソースのリークといった問題を引き起こすことになります。我々はリソースを開く際は一般的に以下のようにします: