Goについて扱うスレッドです。
GoはGoogleによって開発された言語です。
公式
https://golang.org
公式ドキュメント
https://golang.org/doc/
公式外パッケージドキュメント
https://godoc.org
ブラウザ上で試し書き
https://play.golang.org
※前スレ
Go language part 4
https://mevius.5ch.net/test/read.cgi/tech/1605467680/
探検
Go language part 5
■ このスレッドは過去ログ倉庫に格納されています
2022/02/27(日) 07:43:20.04ID:uWHjNeVw
458デフォルトの名無しさん
2022/07/12(火) 09:14:17.91ID:bpFuPlMn459デフォルトの名無しさん
2022/07/15(金) 23:35:22.96ID:1DD1sO9i コンパイルするファイル内に設定値も全部入れたいんだけど、
その場合は設定値だけのファイルを読み込むことって可能ですか?
関数にしてmapで返す感じしかないですか?
その場合は設定値だけのファイルを読み込むことって可能ですか?
関数にしてmapで返す感じしかないですか?
460デフォルトの名無しさん
2022/07/16(土) 13:38:45.14ID:Gzq+vhF3 jsonファイルをgo-assetsとかgo:embedで組み込んで、それをjson.Unmarshal()で構造化データとして使えばいいと思うよ
461デフォルトの名無しさん
2022/07/16(土) 14:06:11.73ID:F7RlRzGb 個人的には設定はビルド時に埋め込むならソース内にjson風にハードコードする派
設定ファイル嫌い
設定ファイル嫌い
462デフォルトの名無しさん
2022/07/17(日) 05:50:18.02ID:p7xubc+G てめーの好き嫌いなんか知ったことじゃない
463デフォルトの名無しさん
2022/07/17(日) 08:32:38.03ID:Em8OpVY9 組み込みjsonをデフォルトとして、カスタム設定ファイルは外部のjsonにする
デフォルトから取り込んでカスタムで上書き
これでjsonからの取り込み部分を一本化できるのでバグを防止できる
ハードコードしてると取り込み部分が共有できない (json文字列を返す関数でもいいんだけど
デフォルトから取り込んでカスタムで上書き
これでjsonからの取り込み部分を一本化できるのでバグを防止できる
ハードコードしてると取り込み部分が共有できない (json文字列を返す関数でもいいんだけど
464デフォルトの名無しさん
2022/07/17(日) 09:17:16.84ID:mx7kwKTp >>463
組み込み設定は構造体をハードコードし、カスタム設定ファイルはそれをjson等で上書きすればいいだけ
どうせ上書きされるのは極一部の項目だけなんだから、大部分はコンパイル時のチェックによりバグを防止できる
組み込み設定は構造体をハードコードし、カスタム設定ファイルはそれをjson等で上書きすればいいだけ
どうせ上書きされるのは極一部の項目だけなんだから、大部分はコンパイル時のチェックによりバグを防止できる
465デフォルトの名無しさん
2022/07/17(日) 19:27:05.51ID:Em8OpVY9 >>464
と、思っちゃうよな
構造体定義して、初期化で初期値書き込んで、それとは別にカスタム設定取り込みコードを書く
対して、構造体定義して、設定取り込みコードを書く
すると設定取り込みには普通にバリデートも書くから初期化での値バグが起きない
と、思っちゃうよな
構造体定義して、初期化で初期値書き込んで、それとは別にカスタム設定取り込みコードを書く
対して、構造体定義して、設定取り込みコードを書く
すると設定取り込みには普通にバリデートも書くから初期化での値バグが起きない
466デフォルトの名無しさん
2022/07/17(日) 19:36:44.11ID:Em8OpVY9 >>464
まあ、好きずきの話に近いことは近い
ハードコードした設定値をバリデーターにかけてチェックさせる作りなら解決できなくもない
でも取り込みの各段階でバリデーションしていったほうがミスりにくいと俺は思うから
まあ、好きずきの話に近いことは近い
ハードコードした設定値をバリデーターにかけてチェックさせる作りなら解決できなくもない
でも取り込みの各段階でバリデーションしていったほうがミスりにくいと俺は思うから
467デフォルトの名無しさん
2022/07/17(日) 19:43:13.12ID:EABPDou+ そんなにバグが怖いならそもそもそんな柔軟な設定ファイル要る?というところを見直すべきでは
汎用的なOSSでも作ってるんでない限り、設定なんぞ環境変数で十分
あとは全部ハードコードすればバリデーションなんか要らん
汎用的なOSSでも作ってるんでない限り、設定なんぞ環境変数で十分
あとは全部ハードコードすればバリデーションなんか要らん
468デフォルトの名無しさん
2022/07/18(月) 09:02:04.30ID:unHGOtJd バグが怖いというより、適切なアナウンスかな
設定のどこが、どう不味いのか
設定のどこが、どう不味いのか
469デフォルトの名無しさん
2022/07/18(月) 16:09:24.37ID:k+MW10XJ Viperを使え
470デフォルトの名無しさん
2022/07/21(木) 22:26:13.75ID:CXPkj94/ フレームワークのginでWebアプリ作りたいなと思ってるんですけど、ginの勉強にいい教材ありますか?
Pythonでツール作ったことあるくらいで、Goの基礎は一通りやったくらいのスキルです。
日本語ドキュメント見てもいまいちピンときてません
https://gin-gonic.com/ja/
Pythonでツール作ったことあるくらいで、Goの基礎は一通りやったくらいのスキルです。
日本語ドキュメント見てもいまいちピンときてません
https://gin-gonic.com/ja/
471デフォルトの名無しさん
2022/07/21(木) 22:30:02.68ID:2u+uMLjG gin自体が良くないからいい教材なんか無い
Goはnet/httpパッケージを使うんだよ
Goはnet/httpパッケージを使うんだよ
472デフォルトの名無しさん
2022/07/21(木) 23:21:18.30ID:CXPkj94/ そうだったのか。。
473デフォルトの名無しさん
2022/07/22(金) 02:56:37.89ID:J1VsK1aI いやGinでいいだろ
今どきnet/httpだけでWebアプリ作ってるとこなんてねーよ
Gin+Vueとかで作ってみな
5chにいる玄人()のおっさんに惑わされんな
今どきnet/httpだけでWebアプリ作ってるとこなんてねーよ
Gin+Vueとかで作ってみな
5chにいる玄人()のおっさんに惑わされんな
474デフォルトの名無しさん
2022/07/22(金) 03:45:47.87ID:GTjCaUbk 俺はchiがおすすめ
475デフォルトの名無しさん
2022/07/22(金) 12:01:47.88ID:wu+YttEu 最近いじってないけど
Echoは少数派なの?
Echoは少数派なの?
476デフォルトの名無しさん
2022/07/22(金) 13:57:48.11ID:sWmP1lOI >>473
さんきゅー!
さんきゅー!
477デフォルトの名無しさん
2022/07/22(金) 14:20:09.64ID:whw2xWQR gin、chi、echoどれも薄っぺらいんだから対して変わらない
どれでもええわ
どれでもええわ
478デフォルトの名無しさん
2022/07/23(土) 09:09:18.33ID:e1dxODSm echo はcontext の扱いが良くない
479デフォルトの名無しさん
2022/07/29(金) 12:06:04.77ID:Nm1LHugv Fiberこそ至高
480デフォルトの名無しさん
2022/07/29(金) 12:08:16.31ID:CmFCr4CU 月額報酬が最も高い開発言語ランキング 3位は「Python」、2位は「Go」、1位は? フリーエンジニア向け仕事仲介サービス調べ
481デフォルトの名無しさん
2022/07/30(土) 02:29:49.54ID:Wzbfhtrr URLを貼らないあたり仕事できなさそう
482デフォルトの名無しさん
2022/07/30(土) 05:26:38.23ID:fJ4AJJUc Goは単価高いけどGoだけ出来ればいいってわけじゃないからなぁ
ECSとかTerraformみたいなクラウド技術も使えて当然だよね?って雰囲気が全体的にある
ECSとかTerraformみたいなクラウド技術も使えて当然だよね?って雰囲気が全体的にある
483デフォルトの名無しさん
2022/07/30(土) 17:20:05.92ID:wZaxY20D Goのmapをfor分で回すと順序が不定というのはなんでそうなったの?
484デフォルトの名無しさん
2022/07/30(土) 17:42:37.40ID:54mLdGPJ >>483
将来的な最適化の余地を確保するため。
大抵の言語では、標準のハッシュ表はその内容が変更されない限りは順序が変わらないような実装がなされていることが多い。
しかし、プログラマにそれを期待したコードを書かれてしまうと、内容が変わらなくても順序が変わりうるような実装に将来的に変更したときに既存のコードが破壊される可能性がある。
Goはそれを避けるために順番を意図的にシャッフルしている。
例えば、将来的にはGCがmapのメモリレイアウトを自動的に最適化するかもしれない。仮にそうなればプログラマが内容を変更したつもりがなくても順番が変わるだろう。
将来的な最適化の余地を確保するため。
大抵の言語では、標準のハッシュ表はその内容が変更されない限りは順序が変わらないような実装がなされていることが多い。
しかし、プログラマにそれを期待したコードを書かれてしまうと、内容が変わらなくても順序が変わりうるような実装に将来的に変更したときに既存のコードが破壊される可能性がある。
Goはそれを避けるために順番を意図的にシャッフルしている。
例えば、将来的にはGCがmapのメモリレイアウトを自動的に最適化するかもしれない。仮にそうなればプログラマが内容を変更したつもりがなくても順番が変わるだろう。
485デフォルトの名無しさん
2022/07/30(土) 18:14:58.42ID:wZaxY20D486デフォルトの名無しさん
2022/07/30(土) 23:59:57.16ID:H9aJG6PT Rubyとかは逆に不定じゃなくしたよね。いつだったかのタイミングで。
あれは変な判断だと思ったなぁ。
あれは変な判断だと思ったなぁ。
487デフォルトの名無しさん
2022/07/31(日) 00:35:32.67ID:FStFDS54 Rubyの連想配列(Hash)にはshiftっていう変テコなメソッドがあるせいかなあ
488デフォルトの名無しさん
2022/07/31(日) 00:47:08.11ID:tsdyYOt0 RubyやPythonの用途なら挿入順でイテレートできるようにするためにかかるコストよりも
利便性が優先されるからじゃないかな
利便性が優先されるからじゃないかな
489デフォルトの名無しさん
2022/07/31(日) 02:02:03.13ID:fu2FWHQK ですな。
490デフォルトの名無しさん
2022/08/03(水) 10:05:50.52ID:pR7q6wnw491デフォルトの名無しさん
2022/08/03(水) 12:30:49.23ID:HH6IlM8W Pythonはordered dictがいつの間にか標準dictになってたな
便利だからいいけど
便利だからいいけど
492デフォルトの名無しさん
2022/08/09(火) 14:19:29.00ID:/hRQdNQg 最近の言語仕様書はDeepLすら受け付けない英文なのはどうにかしてくれんかな
ほかにもインターフェース関係の解説でいつの間にか話に出てきてないFileインターフェースが混じってきたり
絶対にレビューしてないよな
なお1.17を読んでる(1.18 からはジェネリクスで更に混迷が進んでる)
ほかにもインターフェース関係の解説でいつの間にか話に出てきてないFileインターフェースが混じってきたり
絶対にレビューしてないよな
なお1.17を読んでる(1.18 からはジェネリクスで更に混迷が進んでる)
493デフォルトの名無しさん
2022/08/18(木) 10:59:30.64ID:uJ4JpjWj ふと
channel はチャンネルと読んでる?チャネルと読んでる?
channel はチャンネルと読んでる?チャネルと読んでる?
494デフォルトの名無しさん
2022/08/18(木) 12:00:31.81ID:I3eJj73g チャネル
495デフォルトの名無しさん
2022/08/18(木) 12:23:20.11ID:cEC5FUVy 正確な発音はチャノォ
496デフォルトの名無しさん
2022/08/18(木) 13:07:53.85ID:nV24tQaO んゅにぇぅな?
497デフォルトの名無しさん
2022/08/18(木) 14:36:09.80ID:wr3YJ4Iv 茶野ぉ?
498デフォルトの名無しさん
2022/08/18(木) 16:47:44.68ID:sstdM9KK チャノルなぞ使わん!
男は黙って共有&mutex
男は黙って共有&mutex
499デフォルトの名無しさん
2022/08/20(土) 04:18:43.73ID:O8Vd08Ya >>473
ginのルーティングが糞なのは直ってるの?
ginのルーティングが糞なのは直ってるの?
500デフォルトの名無しさん
2022/08/20(土) 08:17:30.29ID:9Gwmc6Wf 実際goをつかいはじめのころはチャンネルの仕様とか使いかたとか調べるのが面倒で
勝手しったるmutexばっかりつかっていた
勝手しったるmutexばっかりつかっていた
501デフォルトの名無しさん
2022/08/20(土) 08:27:18.78ID:jhGGjByr よーわからんし、echoで問題ないから使ってる
502デフォルトの名無しさん
2022/08/20(土) 11:47:33.07ID:O8Vd08Ya 俺もecho
503デフォルトの名無しさん
2022/08/20(土) 23:47:54.29ID:McSzx8ex gin → beego → echo → chi イマココ
504デフォルトの名無しさん
2022/08/30(火) 15:48:26.25ID:F+/knOGo 言語仕様書の1.17を底本として翻訳してるんだけど、文書的に酷い(~;~の使いすぎが特に…)し、構成的にもクソだなぁ
underlying type に関係した性質なんて文書全体を読まんと把握できないわ
メソッド式の話では、ポインタによるレシーバーのメソッドは値による呼び出しは出来ないとか書いてあるけど、レシーバー宣言が値だろうがポインタだろうが、現行じゃ問題なく呼べるようになってる(更には値でセレクタ呼んでもポインタで呼んでも動く
つまりどこかで仕様が拡張されてるのに、仕様書は更新されてないっぽい疑惑
underlying type に関係した性質なんて文書全体を読まんと把握できないわ
メソッド式の話では、ポインタによるレシーバーのメソッドは値による呼び出しは出来ないとか書いてあるけど、レシーバー宣言が値だろうがポインタだろうが、現行じゃ問題なく呼べるようになってる(更には値でセレクタ呼んでもポインタで呼んでも動く
つまりどこかで仕様が拡張されてるのに、仕様書は更新されてないっぽい疑惑
505デフォルトの名無しさん
2022/08/30(火) 15:50:42.61ID:F+/knOGo 仕様書なんて熟読しなくても、フィーリングで書いて動いちゃうから、今まで気にしたこともなかったし
気にしなくても動くんだからいいじゃない?とも思いはする
気にしなくても動くんだからいいじゃない?とも思いはする
506デフォルトの名無しさん
2022/08/30(火) 22:31:49.83ID:1po1mIkW そんないいかげんな感覚で思い付きどんどん拡張したその結果が今のC++のていたらくだ!!
反省しなさい!
反省しなさい!
507デフォルトの名無しさん
2022/08/31(水) 00:35:38.08ID:Pib5lp7c C++があんなことになったのはむしろ、C++プログラマたるもの仕様書くらい熟読しているだろうと開発陣が高を括ってきた結果だろう
508デフォルトの名無しさん
2022/08/31(水) 10:19:04.29ID:3xNaBMUA あんなブ厚いARMを読むなんて苦行が過ぎる
悟りに至りかねない危険な行為だ
悟りに至りかねない危険な行為だ
509デフォルトの名無しさん
2022/08/31(水) 12:04:18.42ID:3xNaBMUA あるえー?
仕様書で終了ステートメントに続くステートメントに関する記述が無いんで、Playgroundでmainの最初にreturnを書いたらコンパイルエラーにならんかったし実行時エラーも起きない
到達不能ステートメントはチェックされないんだな
仕様書で終了ステートメントに続くステートメントに関する記述が無いんで、Playgroundでmainの最初にreturnを書いたらコンパイルエラーにならんかったし実行時エラーも起きない
到達不能ステートメントはチェックされないんだな
510デフォルトの名無しさん
2022/08/31(水) 12:08:28.43ID:rT6IO02J そもそも規格化されてる言語じゃないし、コミュニティが用意した言語仕様書にそこまで大きな意味はないんじゃないの?
仮に処理系と内容が違っててもどっちのバグなのか第三者にはわからないこともあるだろう
仮に処理系と内容が違っててもどっちのバグなのか第三者にはわからないこともあるだろう
511デフォルトの名無しさん
2022/08/31(水) 14:11:42.15ID:LHsSKudI いかにも仕事が雑なグーグルらしい雑な仕様の言語
512デフォルトの名無しさん
2022/08/31(水) 15:08:28.04ID:ZrN/2uvg そうか?Googleの割にはまともだったから普及したんだと思うぞ
いつものGoogleはWeb系のノリで言語作るからこんなもんじゃない、そして大コケする
いつものGoogleはWeb系のノリで言語作るからこんなもんじゃない、そして大コケする
513デフォルトの名無しさん
2022/08/31(水) 16:28:21.64ID:wsiOIOpJ Rustほど初心者が書きにくくはないし
PythonやRubyよりは確実に速い
ちょうど良いところを付いたと思うよ
PythonやRubyよりは確実に速い
ちょうど良いところを付いたと思うよ
514デフォルトの名無しさん
2022/08/31(水) 17:49:58.71ID:QWrElnZY だがバグらないために気を付けないといけないことが多い
515デフォルトの名無しさん
2022/08/31(水) 18:35:42.76ID:rT6IO02J なんかしらんけどGoがしんどいなら使わなくてもいいんだよ
516デフォルトの名無しさん
2022/08/31(水) 20:53:39.37ID:3xNaBMUA バグらないために気を付けなきゃならんことなんて、他の言語に比べるとそんなに多くないだろ
517デフォルトの名無しさん
2022/08/31(水) 21:04:49.54ID:v1Af5w53 100 Go Mistakesを読むといいよ
518デフォルトの名無しさん
2022/09/01(木) 09:53:36.13ID:dbQKPphW 言語設計でしくじってるよなぁと思うのは、構造体の生成回りの構文というか思想
Cに引っ張られ過ぎてて生成の基本が実体を作ることになってる
構造体はデフォルトでアドレスとして出現し、Javaとかのように参照と命名しとけばよかった
そうすればスライスとかマップのイテレーションがクソみたいな落とし穴にならないし、マップをインデックス式でアクセスしてセレクタとしてフィールドにアクセスも出来るようにできた
実体を使いたい場合は*でデリファレンスして使う
実体ちゃんの変数も*Tという型とする
実体配列は[]*Tという配列を記述するようにする
*に関しては、レシーバーとか宣言で(r *T)とかデリファレンス演算子をポインタを示す記号に使うような一貫性のなさも解消する
プリミティブな変数が実体で、そのアドレスを&で取得するということからの一貫性に拘ってるんだろなぁ
実体配列なんて、Dockerの管理用配列以外で見たことないよ…少なくともレアな宣言だと思う
Cに引っ張られ過ぎてて生成の基本が実体を作ることになってる
構造体はデフォルトでアドレスとして出現し、Javaとかのように参照と命名しとけばよかった
そうすればスライスとかマップのイテレーションがクソみたいな落とし穴にならないし、マップをインデックス式でアクセスしてセレクタとしてフィールドにアクセスも出来るようにできた
実体を使いたい場合は*でデリファレンスして使う
実体ちゃんの変数も*Tという型とする
実体配列は[]*Tという配列を記述するようにする
*に関しては、レシーバーとか宣言で(r *T)とかデリファレンス演算子をポインタを示す記号に使うような一貫性のなさも解消する
プリミティブな変数が実体で、そのアドレスを&で取得するということからの一貫性に拘ってるんだろなぁ
実体配列なんて、Dockerの管理用配列以外で見たことないよ…少なくともレアな宣言だと思う
519デフォルトの名無しさん
2022/09/01(木) 11:44:46.07ID:8wwpfCzj 欠点を挙げる流れだ
やっぱ入れ子の構造体の初期化でしょいかんよあれは
やっぱ入れ子の構造体の初期化でしょいかんよあれは
520デフォルトの名無しさん
2022/09/01(木) 12:50:03.20ID:cWwvmbGP521デフォルトの名無しさん
2022/09/01(木) 12:54:11.77ID:dbQKPphW 複合リテラルとして書けばいいんだし、落とし穴的な問題はなくない?
俺は悪くないかなと思ってるんだけど
俺は悪くないかなと思ってるんだけど
522デフォルトの名無しさん
2022/09/01(木) 13:00:51.78ID:dbQKPphW >>520
「これらの多くは、チャネルでの送信または受信の欠落、またはチャネルの閉鎖が原因です」
いや、mallocしといてfreeしてませんでしたレベルの話をされてもどうしろと?
普通に対策考えないでプログラミングなんてできないだろ
「これらの多くは、チャネルでの送信または受信の欠落、またはチャネルの閉鎖が原因です」
いや、mallocしといてfreeしてませんでしたレベルの話をされてもどうしろと?
普通に対策考えないでプログラミングなんてできないだろ
523デフォルトの名無しさん
2022/09/01(木) 14:02:59.57ID:dbQKPphW524デフォルトの名無しさん
2022/09/01(木) 14:17:02.40ID:3zc//kWQ525デフォルトの名無しさん
2022/09/01(木) 17:08:27.97ID:V2mDAtzH データ競合はあまり遭遇したことないな
無駄に並列化したがるバカがチームにいると地獄を見るだろうというのはわかる
channel絡みのミスで固まるのはよくある
無駄に並列化したがるバカがチームにいると地獄を見るだろうというのはわかる
channel絡みのミスで固まるのはよくある
526デフォルトの名無しさん
2022/09/01(木) 18:05:50.03ID:Wlby5VAy527デフォルトの名無しさん
2022/09/01(木) 18:16:08.12ID:0As8hqIp きつい現場のGoは他の言語より殊更きつそうだというのはわかるわ
528デフォルトの名無しさん
2022/09/02(金) 02:30:51.60ID:bNDG9t// channelは複雑なデータのやり取りに使うには難しすぎると感じるね
どこで詰まるかわかったもんじゃないし
公式がまともなフレームワーク用意するわけでもないし
どこで詰まるかわかったもんじゃないし
公式がまともなフレームワーク用意するわけでもないし
529デフォルトの名無しさん
2022/09/02(金) 03:08:08.96ID:xpSIPhaW epollを使うよりかはマシだし
530デフォルトの名無しさん
2022/09/02(金) 08:58:55.58ID:0WCZpZUS いや、Goに限らない問題でGoのダメなところとか言われてもなぁ
531デフォルトの名無しさん
2022/09/02(金) 09:55:02.48ID:zLWkNNSX いや、けっこうGoに限った問題
channelのユースケースの大部分は現実にはpromise/futureで十分で、遥かにミスを引き起こしにくい
channelのユースケースの大部分は現実にはpromise/futureで十分で、遥かにミスを引き起こしにくい
532デフォルトの名無しさん
2022/09/02(金) 09:58:48.22ID:0WCZpZUS 例えばCとかでファイルを排他オープンしたままクローズし忘れて書き込みのままになってて、別の箇所で読み込もうとしたけど開けなかったとして
これはC言語の不備だとか言うのか?と
これはC言語の不備だとか言うのか?と
533デフォルトの名無しさん
2022/09/02(金) 10:04:00.39ID:0WCZpZUS >>531
chan のユースケースといったら、パイプとしてストリーム的にデータを流すのが主だと思うんだが、promise, future でどうやって代替するの?
chan のユースケースといったら、パイプとしてストリーム的にデータを流すのが主だと思うんだが、promise, future でどうやって代替するの?
534デフォルトの名無しさん
2022/09/02(金) 10:06:18.95ID:0WCZpZUS >>531
select文のあたりでも書かれてたと思うけど、同期を取る目的じゃなくてパイプからの機能だよチャネル
select文のあたりでも書かれてたと思うけど、同期を取る目的じゃなくてパイプからの機能だよチャネル
535デフォルトの名無しさん
2022/09/02(金) 10:10:39.85ID:0WCZpZUS >>531
同期取るなら、sync.WaitGroup 使えばよくない?
同期取るなら、sync.WaitGroup 使えばよくない?
536デフォルトの名無しさん
2022/09/02(金) 12:33:43.05ID:Xv0heE2X537デフォルトの名無しさん
2022/09/02(金) 12:45:23.85ID:bNDG9t// いや普通に同期を取る使い方もできるだろw
完了通知を待つ使い方
俺もその使い方しかしてない
async/awaitなんで構文として追加しても良いと思うのだけどね
channelは非同期機構を実装するパーツとしては優秀だから
フレームワークが欲しい
完了通知を待つ使い方
俺もその使い方しかしてない
async/awaitなんで構文として追加しても良いと思うのだけどね
channelは非同期機構を実装するパーツとしては優秀だから
フレームワークが欲しい
538デフォルトの名無しさん
2022/09/02(金) 13:40:10.47ID:D0FuWgPr そもそも本当にパイプとしてストリーム的にデータを流す必要のあるケースなんて稀
Goがchannel推しだから利用者もそれに引き摺られてストリームっぽい設計になりがちなだけで、結果として単一の値(又は配列)を返せれば殆どのケースでは十分
本当にストリームが必要ならJavaScriptのasync generatorのような設計も可能で、producerとconsumerが協調するからchannelより遥かに安全だ
Goがchannel推しだから利用者もそれに引き摺られてストリームっぽい設計になりがちなだけで、結果として単一の値(又は配列)を返せれば殆どのケースでは十分
本当にストリームが必要ならJavaScriptのasync generatorのような設計も可能で、producerとconsumerが協調するからchannelより遥かに安全だ
539デフォルトの名無しさん
2022/09/02(金) 13:56:23.23ID:iQ46VdDW そもそもストリームモデルが必要なユースケースってほぼ
分散環境だと思うんだよな
分散環境だと思うんだよな
540デフォルトの名無しさん
2022/09/03(土) 12:27:35.16ID:62gf404N 分散環境なら外部のメッセージバスに投げるだけだよね
せっかく小さいgoroutineを気軽にポコポコ起こせるデザインなのに、
結果を受け取る方法が、データ競合を起こさないように最大限注意して共有変数を使うか、パラダイムのミスマッチなchannelを使うかなのは片手落ちに感じる
単純にgoroutineの返り値をwaitできるようにしない理由ってあるんだろうか?既に議論されてたら知りたい
せっかく小さいgoroutineを気軽にポコポコ起こせるデザインなのに、
結果を受け取る方法が、データ競合を起こさないように最大限注意して共有変数を使うか、パラダイムのミスマッチなchannelを使うかなのは片手落ちに感じる
単純にgoroutineの返り値をwaitできるようにしない理由ってあるんだろうか?既に議論されてたら知りたい
541デフォルトの名無しさん
2022/09/03(土) 13:39:36.59ID:Aru3Abt3 >パラダイムのミスマッチなchannel
kwsk
kwsk
542デフォルトの名無しさん
2022/09/03(土) 20:41:16.91ID:eoULSfLD543デフォルトの名無しさん
2022/09/03(土) 20:49:18.55ID:CkDP1XSv544デフォルトの名無しさん
2022/09/03(土) 20:53:14.26ID:CkDP1XSv545デフォルトの名無しさん
2022/09/03(土) 21:09:58.32ID:2QtFsvwZ パラダイムのミスマッチという理由がわからん。
goroutineは一つの関数を呼ぶためのもんじゃないぞ。
goroutine立てて一連の処理を同期的に書くためのもなんよ。普通に考えれば結果を受け取る必要が無いはずだよ。
どうしても集めるならfan inするように一つのchanで受ける。
Futureは要らないんよ。awaitとかしなくてもそこでCPU占有したり、ioなりなんなりが起これば自動的に別goroutineに制御が渡る。
goroutineは一つの関数を呼ぶためのもんじゃないぞ。
goroutine立てて一連の処理を同期的に書くためのもなんよ。普通に考えれば結果を受け取る必要が無いはずだよ。
どうしても集めるならfan inするように一つのchanで受ける。
Futureは要らないんよ。awaitとかしなくてもそこでCPU占有したり、ioなりなんなりが起これば自動的に別goroutineに制御が渡る。
546デフォルトの名無しさん
2022/09/03(土) 21:10:11.97ID:Aru3Abt3547デフォルトの名無しさん
2022/09/03(土) 21:14:31.20ID:eoULSfLD >>544
その場合は「共有変数を注意深く使う必要がある」よね
その場合は「共有変数を注意深く使う必要がある」よね
548デフォルトの名無しさん
2022/09/03(土) 21:22:59.76ID:eoULSfLD549デフォルトの名無しさん
2022/09/03(土) 21:29:09.46ID:2QtFsvwZ >>548
goroutineで処理すべき単位とか、ワークスティーリングの話してなかったかなと。
goroutineで処理すべき単位とか、ワークスティーリングの話してなかったかなと。
550デフォルトの名無しさん
2022/09/04(日) 00:29:35.08ID:ULs4IOBU まさかこのスレにホーアのCSP本読んでないやついないよな?な?
551デフォルトの名無しさん
2022/09/04(日) 00:54:37.91ID:6UpdVUMR いや、読んでませんが?
552デフォルトの名無しさん
2022/09/04(日) 17:28:10.39ID:GIlWqA7r >>550
読もうとしたけどガチの論理学的数学で挫折
しかしよく調べたらGoが参考にしたのはその本ではなく
最初にホーアが出したもっと簡単な論文の方だった
つまりその本は読む意味はない(Goの並行モデルの理解という意味で)
読もうとしたけどガチの論理学的数学で挫折
しかしよく調べたらGoが参考にしたのはその本ではなく
最初にホーアが出したもっと簡単な論文の方だった
つまりその本は読む意味はない(Goの並行モデルの理解という意味で)
553デフォルトの名無しさん
2022/09/04(日) 18:08:07.32ID:VepAvQjQ554デフォルトの名無しさん
2022/09/04(日) 19:08:07.89ID:VepAvQjQ555デフォルトの名無しさん
2022/09/04(日) 23:01:27.23ID:ULs4IOBU すまない誰かリングにかけろで例えてくれないか?
556デフォルトの名無しさん
2022/09/05(月) 01:58:21.42ID:7mfke0+F Goがpromise(future)/async/awaitをサポートしてくれれば今より容易に安全に書けるケースが増えるのは事実だが、
この件も他の件と同様にGoはサポートしてくれないだろうという悲観的な現実と向き合って、
今ある手段で頑張って代替手段を安全に実現しよう。
この件も他の件と同様にGoはサポートしてくれないだろうという悲観的な現実と向き合って、
今ある手段で頑張って代替手段を安全に実現しよう。
557デフォルトの名無しさん
2022/09/05(月) 04:13:05.73ID:098gBdTn 結局ゴルーチンの実装が中途半端だったんだろうね
分散環境でのストリームモデルならNodeみたいなノンブロッキングIOで外部のソケットを叩けるようにして
シングルスレッドにするのが良かったし
そうでないならFuture/Promiseみたいに安全にデータを受け取れる仕組みが欲しかった
この2つがちょうどうまくできないデザインになっちゃった
分散環境でのストリームモデルならNodeみたいなノンブロッキングIOで外部のソケットを叩けるようにして
シングルスレッドにするのが良かったし
そうでないならFuture/Promiseみたいに安全にデータを受け取れる仕組みが欲しかった
この2つがちょうどうまくできないデザインになっちゃった
558デフォルトの名無しさん
2022/09/05(月) 04:31:49.54ID:098gBdTn またGoの言語仕様にも問題があった
ジェネリクスだ
ジェネリクスがない状態でfuture/promiseを安全に実装できない
なぜかアンチジェネリクス勢がGoには多く
コミュニティでの議論も進展しなかった
つまり全てがゴテゴテに回ってしまった
それならGoogleが並行処理のフレームワークを作ってくれるのかと期待していたが
その気配は全くなく使いにくいcontextのみを放り投げた状態でさあ作れと言った状態
そりゃ普通のユーザーは付いてこれない
ジェネリクスだ
ジェネリクスがない状態でfuture/promiseを安全に実装できない
なぜかアンチジェネリクス勢がGoには多く
コミュニティでの議論も進展しなかった
つまり全てがゴテゴテに回ってしまった
それならGoogleが並行処理のフレームワークを作ってくれるのかと期待していたが
その気配は全くなく使いにくいcontextのみを放り投げた状態でさあ作れと言った状態
そりゃ普通のユーザーは付いてこれない
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 中国国連大使「日本が中国に武力行使すると脅しをかけたのは初めて」 国連事務総長に書簡 [♪♪♪★]
- 台湾有事での集団的自衛権行使に「賛成」が48.8%、「反対」が44.2% ★7 [♪♪♪★]
- 【トレンド】高市首相「マウント取れる服」投稿にツッコミ続出「他国に対する敬意がない」「外交相手に失礼」 [1ゲットロボ★]
- 【🐼】パンダ、日本で会えなくなる? 中国との関係悪化で不安の声 [ぐれ★]
- 【立憲民主党】「質問レベルの低さが立憲の存立危機事態」台湾有事発言を引き出した立憲“執拗追及”が波紋… ★2 [尺アジ★]
- 津田健次郎、日本はどうも『若い』ということに固執しすぎている…どうカッコよく見えるかが大事」年の重ね方へ持論 [muffin★]
- 自民党のヒゲ「階級を変えるなら自衛隊の英語名も変えるべき。自警団と勘違いされる」 [834922174]
- 【悲報】高市さんのあだ名、未だ決まらず。中国からも候補上がる [308389511]
- 今の“格安SIM”ってなにがオススメなんだ? [542286535]
- 🏡😡
- 【悲報】高市早苗「第二次鳩山政権」と呼ばれ始めるwwww [237216734]
- 現役JKのお茶会スレ( ¨̮ )︎︎𖠚ᐝ160
