関数の終わりにチャンネルを閉じるためのパラメータとして渡すとき、main関数のスコープ内のチャンネルを参照する前に*を付ける必要はありません。しかし、WaitGroupを(Wg.Done())に設定する必要があるとき、私はそうしなければならないのですが、それはなぜですか?パラメータとしてのチャンネル、なぜアスタリスクではないですか?
0
A
答えて
2
これは、内部ではchan
がポインタで構成されているためです。あなたはそれにポインタを送る必要はありません。あなたが異なるスコープでそれを使用するために周りにそれへのポインタを渡す必要があるので、逆に、sync.WaitGroup
は、すべてのメソッドは、ポインタ受信機と宣言され、そのために、古典的な構造体
type WaitGroup struct {
state1 [12]byte
sema uint32
}
です。
0
Goでは、chan
は言語プリミティブであり、sync.WaitGroup
は構造体です。 Goは値によってパラメータを渡すので、WaitGroup
はコピーとして渡され、chan
はinterface
のように渡され、実装の詳細へのポインタを含むメタデータを持つプリミティブ型として実装されます。
関連する問題
- 1. なぜC#は型パラメータをデフォルトパラメータとして許可しないのですか?
- 2. execvpのargvパラメータがconstでないのはなぜですか?
- 3. 名前のないパラメータはなぜ有用なのですか?
- 4. のgit LFS LS-ファイル:ダッシュ対アスタリスク(*)( - )一つのファイルにはアスタリスク/星を持っていないのはなぜ
- 5. munmapにパラメータとして長さが必要なのはなぜですか?
- 6. c#ジェネリック型をパラメータとして渡すことができないのはなぜですか?
- 7. PointとRectangleをオプションのパラメータとして使用できないのはなぜですか?
- 8. Curlとwget:なぜGETパラメータが使用されていないのですか?
- 9. PostAsJsonAsyncのパラメータがポストにJSONコンテンツとして含まれていないのはなぜですか?
- 10. なぜIPEndPointはパラメータとしてInt64とInt32を取るのですか?
- 11. Fortranは自分の出力をアスタリスクに表示します - なぜですか?
- 12. ファイルをAlamofireのパラメータ値の1つとして追加できないのはなぜですか?
- 13. function.applyを使用しているときにクロージャがパラメータをタイプチェックしないのはなぜですか?
- 14. ゴランのこのラインは何を正確にしていますか?なぜポインタ?なぜ0パラメータですか?
- 15. ジェネリックス:コレクションのパラメータとしてObjectを使用できないのはなぜですか?
- 16. String.Emptyをデフォルトのパラメータ値として使用できないのはなぜですか?
- 17. なぜこのメソッドコードはパラメータとして整数をとらないのですか
- 18. mainにパラメータとしてプログラム名を渡すのはなぜですか?
- 19. ジェネリック型パラメータとして使用すると、「ダイナミック」はすべてのタイプに関して共変で反例ではないのはなぜですか?
- 20. なぜAndroidアクティビティコンストラクタにパラメータを渡すことができないのですか
- 21. なぜlist-refが正しいパラメータを取得できないのですか?
- 22. Function [-A1、...、+ B]がスーパータイプをパラメータとして許可しないのはなぜですか?
- 23. モジュールパターン - JQueryがパラメータとして渡されるのはなぜですか?
- 24. パラメータを持たないIsNullOrEmptyオーバーロードメソッドがないのはなぜですか?
- 25. なぜパラメータを使用して値を渡すのですか?
- 26. F#で非部分アクティブパターンをパラメータ化できないのはなぜですか?
- 27. このパラメータを設定しない型でインスタンスを作成できないのはなぜですか?
- 28. AsyncTaskがクラスを返すパラメータとして受け入れないのはなぜですか?
- 29. Doublesをパラメータとして受け入れるInterlocked.Addのオーバーロードがないのはなぜですか?
- 30. なぜPylonsはGETパラメータを渡し続けていますか?