問題タブ [go]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
concurrency - Goにある多数のゴルーチンの1つから結果を受け取ることは可能ですか?
私は最近、Googleのプログラミング言語であるGoについて学びました。私は、並行性のサポートが提供されていることに興味をそそられ、それについてさらに学ぶことに着手しました。しかし、私はGoが並行性の特定の機能をどのように実装しているかを見に行きました。これまでのところ、この機能がまったく存在しないという証拠はまったく見ていません。
これが架空の状況です。特定の入力のFoo値を決定する関数をプログラミングしていると仮定します。任意の入力について、Foo値はドメインAまたはドメインB(両方ではない)のいずれかにあります。これらのドメインでの検索の手法はまったく異なりますが、成功した検索はすぐに返される傾向があり、失敗した検索はデータセット全体を調べて網羅する必要があるため、時間がかかるという特性を共有しています。
さて、並行性を採用する他の言語(Cilkなど)では、関数Foosearchをプログラムして、Asearch関数とBsearch関数を生成することができます。これらの関数は同時に実行され、どちらかが答えを見つけたときはいつでも、その答えは呼び出し元の関数Foosearchに報告され、関数Foosearchは、生成された関数が返されなかった場合は終了します。
ただし、Goのゴルーチンでは、チャネルに接続できるルーチンは2つだけのようです。そのため、どちらが最初に回答を見つけたかに応じて、AsearchまたはBsearchのどちらかが送信できるチャネルを設定できず、Foosearchに読み取りを依頼できませんでした。それ。また、チャネルをブロックせずに読み取ることはできないようです。そのため、FoosearchでAsearchとBsearchを開始し、両方からチャネルを設定してから、ループで実行して、どちらかが生成されたかどうかを確認することはできませんでした。答え。
Goの並行性の限界についての私の理解は正しいですか?与えられた結果を達成する別の方法はありますか?
java - Go のマルチスレッドと pthread または Java スレッドの違いは何ですか?
Go のマルチスレッド アプローチと、pthread、boost::thread、Java スレッドなどの他のアプローチの違いは何ですか?
java - Go や Java がユーザー空間スレッドを使用しているということは、マルチコアを実際に活用できないということではないでしょうか。
最近、オペレーティング システムのクラスでスレッドについて頻繁に話し合っていますが、1 つの疑問が頭に浮かびました。
Go (および Java) はカーネル スレッドの代わりにユーザー空間スレッドを使用するため、OS はスレッド自体ではなくプロセスにのみ CPU 時間を割り当てるため、複数のコアを効果的に利用できないということではないでしょうか?
programming-languages - Go言語のアプリケーションドメイン
誰かが「go」言語のアプリケーションドメインを教えてもらえますか?
「Go」言語を使用して構築されたアプリケーションはどれですか?
どのようなアプリケーションに最適ですか?
python - Go と Cython の違い
今日、私の親友が、最新の Go 言語と、Python の C 拡張機能のセットであるCythonの主な違いは何かと尋ねてきました。私はPythonについてあまり知識がありません.GoがCythonよりも優れている/劣っている理由を誰か教えてもらえますか?
string - Goで文字列を逆にする方法は?
Goで単純な文字列を逆にするにはどうすればよいですか?
shared-libraries - Goの共有ライブラリ?
Goを使用して共有ライブラリ(.so)を作成することは可能ですか?
更新:「問題」を作成しました。
vim - go 言語の Vim 構文ファイルはどこにありますか?
go 言語用の vim 構文ファイルを作成した人はいますか?
c - Go と C ライブラリのインターフェイス
Go プログラムと C ライブラリをどのように接続しますか?
Go のソース コードを参照してきましたが、まだわかりませんでした。誰かがすでにそうしている場合は、共有していただけますか?
更新: @fserb のおかげで、Go ソースからいくつかのドキュメントを投稿しています。
Cgo を使用すると、C コードを呼び出す Go パッケージを作成できます。
使用法: cgo [コンパイラ オプション] file.go
gcc を呼び出してパッケージの C 部分をコンパイルする場合、コンパイラ オプションは解釈されずに渡されます。
入力 file.go は、疑似パッケージ「C」をインポートし、C.size_t などの型、C.stdout などの変数、または C.putchar などの関数を参照する、構文的に有効な Go ソース ファイルです。
「C」のインポートの直前にコメントがある場合、そのコメントは、パッケージの C 部分をコンパイルするときにヘッダーとして使用されます。例えば:
Cgo は、入力ファイルを 4 つの出力ファイルに変換します。2 つの Go ソース ファイル、6c (または 8c または 5c) 用の C ファイル、および gcc 用の C ファイルです。
Make.pkg の標準パッケージ makefile ルールは、cgo を使用するプロセスを自動化します。例については、$GOROOT/misc/cgo/stdio および $GOROOT/misc/cgo/gmp を参照してください。
Cgo はまだ gccgo では動作しません。
string - goで文字列を効率的に連結する方法
Go では、 astring
はプリミティブ型です。つまり、読み取り専用であり、それを操作するたびに新しい文字列が作成されます。
結果の文字列の長さを知らずに文字列を何度も連結したい場合、どのように行うのが最善の方法でしょうか?
単純な方法は次のとおりです。
しかし、それはあまり効率的ではないようです。