ゴルーチン内のfmt.Printlnはなぜ行を表示しないのですか?
2023-09-22 02:42:34
質問
次のようなコードがあります。
package main
import "net"
import "fmt"
import "bufio"
func main() {
conn, _ := net.Dial("tcp", "irc.freenode.net:6667")
reader := bufio.NewReader(conn)
go func() {
str, err := reader.ReadString('\n')
if err != nil {
// handle it
fmt.Println(err)
}
fmt.Println(str)
}()
}
バッファから読み込むコードをgoroutineに記述しないと、このようなメッセージが出力され、それが私の期待することです。
:zelazny.freenode.net NOTICE * :*** Looking up your hostname...
しかし、これをゴルーチン内に持っていても何も表示されません。
なぜそうなるのか、どなたか説明していただけませんか?
どのように解決するのですか?
を実行すると、プログラムが終了します。
main()
関数が終了した時点で終了します。 これは、ゴルーチンが実行され、その出力が印刷される前に起こる可能性が高いです。
一つの選択肢は、メインゴルーチンがチャネルからの読み込みをブロックし、ゴルーチンがその作業を完了したときにチャネルに書き込むようにすることです。
関連
-
[解決済み] intをint64に変換するには?
-
[解決済み] reflectを使用して、構造体フィールドの値を設定するにはどうすればよいですか?
-
[解決済み] Goプログラムで静的リソースをバンドルする最良の方法は何ですか?
-
[解決済み] 複数のファイルからなるGoプログラムをコンパイルするには?
-
[解決済み] go ウェブサーバーを使って静的な html ファイルを提供するにはどうすればよいですか?
-
[解決済み] gc」と「gccgo」の主な相違点は何ですか?
-
[解決済み] 文字列がint型かどうかチェックする
-
[解決済み] なぜfmt.Printlnではなくlog.Printlnを使用しなければならないのですか?
-
[解決済み] Go で / に異なるメソッドの http リクエストを処理するにはどうすればよいですか?
-
[解決済み] env varが空の場合、どのようにデフォルト値を割り当てるのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ゴルーチンの停止方法
-
[解決済み] スライスを宣言するのか、スライスを作るのか?
-
[解決済み] オブジェクトのプロパティを二重引用符で囲んで使用するには?
-
[解決済み] interface{}をint型に変換する
-
[解決済み] GoLangで文字列を比較するにはどうしたらいいですか?
-
[解決済み] bytes.Buffer does not implement io.Writer" というエラーメッセージが表示される。
-
[解決済み] go ウェブサーバーを使って静的な html ファイルを提供するにはどうすればよいですか?
-
[解決済み] gc」と「gccgo」の主な相違点は何ですか?
-
[解決済み] Goで一度に複数の変数を宣言できますか?
-
[解決済み] Golang で構造体をマップに変換する関数