Go language part 5

■ このスレッドは過去ログ倉庫に格納されています
2022/02/27(日) 07:43:20.04ID:uWHjNeVw
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/
2022/06/15(水) 15:16:09.46ID:eDRIEaUs
>>397
ストリーム系APIでいう遅延評価というのは一般にいくつかのレベルがある
例 : items.a().b()
1. 最終的に結果を列挙しようとする段階でaとbの操作を実行する。実行順序は、aの操作をitemsの全ての要素に対して実行した後にbの操作を全ての要素に対して実行する。
2. 可能な限り列挙を繰り返さない。可能であれば、1要素毎にaとbの操作を実行し、次の要素に進む。一時バッファを使用しない。
3. 実際に要素が必要になるまでitemsの各要素を生成しない。つまり無限に続くシーケンスの実装が可能。

例えばシーケンスの順序を逆転させるような操作は一度全てを列挙しないといけなかったりするから、普通はこれらのハイブリッドな実装となる。
>>388で実現されてるのはこのレベル1までだね。
2022/06/15(水) 15:20:29.18ID:eDRIEaUs
>>397
見落としてるだけだと思うけど、
>>388にはEachがあるよ。エラーを扱えない欠陥品だけど。
2022/06/15(水) 18:44:38.49ID:vYUVRfEQ
半分禁じ手に近いけど、deferでrecoverするという手も無くはない
あれは日和ったと見るべきか
2022/06/15(水) 19:45:11.38ID:LjsAAUyE
>>402
遅延評価と「無限に続くシーケンスの実装」はまた別問題だ。ほとんどのプログラムはfilterやmapも有限長だけで十分機能する。
Pythonのコルーチェンyield中断と同じく、それを基にしたRubyの.lazyや、さらに進んだC#のLINQなどは無限長の操作を可能にするが
Rustの無限長イテレーターはRangeやstd::iter::repeatにおいて無限長を扱えるだけであり、yieldはまだ実験的。
というか迷惑だからRustスレか言語比較してるスレでやって攻撃的な人格疲労しろよ
406402
垢版 |
2022/06/15(水) 19:52:07.91ID:eDRIEaUs
>>405
俺はRust信者じゃないぞ?
十分機能するかどうかは個人の感想の問題だが、いちいちリストのコピーが発生するから非機能面では十分に問題になりうる
2022/06/15(水) 20:33:08.01ID:LjsAAUyE
>>406
そうか?チョットでも知ってればGoはyieldなんてキーワードはサポートしてないので安易な無限長をサポートするわけない。
最初の何も見ずforeach言ってるRustバカと一緒で、コレクションに含まれる高階関数操作で例外を考慮する状況がなぜ正しいのか説明できていない。
それだったらまだ蛇足的に挙げた無限長が扱えない事のほうが欠点だ、ほとんどの状況は高階関数系で例外なんてforeachでもEachでも考慮しない
上のライブラリはチェーン連鎖でコピーが発生するのはその通りだが、例えばfilterにmapをつなげて最後にcollectするような操作は上記の遅延評価や
無限リスト、そして例外とは何の関係もない。言語的な宗教戦争をやってるバカようにしか見えない、とてつもなく迷惑この上ない行為だ
2022/06/15(水) 21:34:23.56ID:KoNFWfWJ
>>407
無限リストを扱うための前提として要素毎のストリーミング処理ができることは必須だから全然関係なくないぞ
なんか勘違いしてるようだが、俺はGoを貶しているのではなくただ>>388のライブラリがヘボいと言っているだけだ
別にyieldがなくたって今のGoで無限リストは実現できるよ
2022/06/15(水) 22:33:42.84ID:vYUVRfEQ
Goならyieldみたいな妙なことしなくてもgoroutine内でループしてチャネルで送りつければいいだけだもんな
2022/06/15(水) 22:39:20.20ID:vYUVRfEQ
妙でない==基本的な機能の中で説明できる
yieldなんてgoto並みに不自然じゃん
411デフォルトの名無しさん
垢版 |
2022/06/15(水) 22:48:49.45ID:8rndrL7k
>>395
Go一本に掛けるの厳しくないか。
2022/06/15(水) 23:39:49.40ID:icfWO5Ii
>>405
それは君の理解が間違っている

> Rustの無限長イテレーターはRangeやstd::iter::repeatにおいて無限長を扱えるだけであり、

その部分が完全にウソ
Rustのイテレータは誰もが自由に任意の無限長イテレータを作成可能
そしてその無限長イテレータに対して任意の別のイテレータを好きなだけチェーンさせて動作可能

これはRustのイテレータが中間生成物(リストや配列やベクタ)を作成しないため可能となっている
Goで整備するときもここが重要なポイントとなってくる
2022/06/16(木) 00:21:02.73ID:wccj32jk
無限リストって実際に無限長の何かを使うことは滅多になくて、あくまで遅延リストとして適切に実装されているかどうかの判定基準なんだよね
無限長リストを扱える構造になっていることは、メモリに乗らない巨大なファイルを一行ずつ読むような、文字通りストリーミング処理が必要な状況で非常に有用なんだよ
2022/06/16(木) 01:51:06.21ID:lg2Mpz7e
結局2種類のうちどちらを選ぶか、だけの問題
(A) 遅延処理
 ・メソッドチェーン時の中間生成配列などを無くせる
 ・無限長も扱える
 ・無駄がなく有利
(B) 即時処理
 ・メソッドチェーン時の中間生成配列などが必ず必要となる
 ・無限長を扱えない
 ・(A)よりも不利

RubyのlazyやRustのイテレータはもちろん(A)タイプ
Goでも欲しいのは(A)
(B)タイプのものは検討する必要がない
2022/06/16(木) 02:11:04.77ID:TlphqPPg
Go 2のProposalを見ると

https://go.googlesource.com/proposal/+/refs/heads/master/design/43651-type-parameters.md
> We do not expect approaches like the C++ STL iterator types to become widely used. In Go that sort of idea is more naturally expressed using an interface type. In C++ terms, using an interface type for an iterator can be seen as carrying an abstraction penalty, in that run-time efficiency will be less than C++ approaches that in effect inline all code; we believe that Go programmers will continue to find that sort of penalty to be acceptable.

って書いてあるけどまあGoはそういう言語で、そこまで最適化にこだわる言語じゃない
最適化にこだわるひとはRustとかC++とか使うべき
2022/06/16(木) 08:44:05.77ID:wccj32jk
>>415
これは遅延リストを否定しているのではない
C++のようなゼロオーバーヘッドは目指さないよ、もしイテレータを抽象化するなら実行時のオーバーヘッドを受け入れて普通にInterface使う想定だよと言っていて、
将来的に>>414の(A)のスタイルのイテレータを導入する可能性は下記の通り肯定している
> As we get more container types, we may develop a standard Iterator interface. That may in turn lead to pressure to modify the language to add some mechanism for using an Iterator with the range clause. That is very speculative, though.
2022/06/16(木) 10:46:03.49ID:8bJC6Uow
>>411
JavaとPHpだけじゃ不安なんだ
2022/06/16(木) 11:54:55.58ID:4wdIdA1r
>>417
PHPてw
2022/06/16(木) 17:42:32.41ID:T9ZCQ85W
>>416
つまり将来Go3になる頃には>>414の(A)がGoでも出来るようになる可能性が残されていると
420デフォルトの名無しさん
垢版 |
2022/06/16(木) 19:30:57.98ID:33b0nQQ5
>>417
なんだ、プログラミングは経験者か。
ならGo未経験案件でも収入大幅に減らないならスキル増やすつもりで行っていいかと思うけど。

>>418
案件多いのはPHPなんだぜ涙
2022/06/16(木) 21:18:25.47ID:fyAXkPds
>>419
単なるデザインパターンだから今のGoでもできる
イテレータのinterfaceが標準化されてないだけ
2022/06/17(金) 03:52:06.95ID:pTlTSB96
>>421
本当に出来るならばなぜGoではやらないの?
速いし便利だしコードも分かりやすくなることが多いため色んな言語で使われているのに
2022/06/17(金) 11:18:37.95ID:/u2pEQ+2
>>422
標準無視のコードで俺スゲーしたい系の人はRustに行っちゃうからだろうね
2022/06/17(金) 11:32:30.80ID:G5rhOs4/
イテレータを使うようにしたら、こんなふうになるのかな?
https://github.com/Soft/iter
いちいち関数呼び出しすることになるから普段使いにしようとするとパフォーマンス悪くなりそう
2022/06/17(金) 11:45:45.87ID:G5rhOs4/
もっと最適化されるようになったら良いけどね
2022/06/17(金) 12:50:08.27ID:tKb8DSRU
RustのイテレータがCのfor文と同じ速度が出るのも最適化された設計と実装によるものだもんね
あとはGo開発陣のやる気次第
2022/06/17(金) 12:53:28.19ID:/u2pEQ+2
>>424
これはダメだね
パフォーマンス以前に、イテレータを閉じる方法がないからファイルをストリーミング処理するようなユースケースに対応できない
ちゃんと言語機能の背景を考慮せずにRustを猿真似しちゃった失敗作だね
2022/06/17(金) 13:28:49.58ID:G5rhOs4/
何をどう見ても許されてないしロシアが核持ってなかったら、
集団的自衛権をもとに連合軍が作られてプーチン政権が倒されるか、ロシアも同盟を集めて世界大戦に発展してるよ
2022/06/17(金) 13:29:03.78ID:G5rhOs4/
なんかスレ間違えたわ
2022/06/17(金) 15:44:02.84ID:NvTbuTZi
いやだいじょうぶだ、つづけろ
2022/06/17(金) 19:22:44.65ID:JVB9uh57
>>409
その通り。Goで中間コンテナを作らないようなGeneric版高階関数ライブラリを作ろうと思うと、yieldのような中断じゃなく確かにチャネルの受け渡しになる。
それでfilter->map->collectのようなRust的な中間コンテナを作らないようなコードを書くことになると、中間の加工データの受け渡しはチャネルになるので、Rustで
そのままでは安易に並列化できずにrayonライブラリなどを使うより、遥かに簡単にスケールできる並列化まで踏み込む可能性がある。
これをGoogleはパイプライン処理と呼んでいるが、421の言うように1.18はイテレータの標準化とコレクションの操作の一般化を変更に含めなかっただけ
やる気というか現代のソフトウェア開発は、世に出たら0から255まで揃ってる訳ではなく、小まめな段階リリースだから
2022/06/18(土) 15:13:54.54ID:ixLj3AWV
おじさんがくるとこうなるのね
本当にこの世から消えて欲しい
2022/06/22(水) 23:33:10.33ID:DzsA87OB
この世から消えて欲しいチュウニおじさん
2022/06/26(日) 19:36:20.90ID:n40xbeTi
モックって何使ってる?
gomock, testfy, mockery
オススメは?
2022/06/26(日) 19:37:58.18ID:vl5UtIOz
いらない
インターフェース埋め込みで十分
2022/06/26(日) 21:04:51.85ID:PhXCrOZE
>>435に一票
Goでモックフレームワークが欲しくなるようなら設計と開発スタイルがおかしい
2022/06/26(日) 21:48:32.78ID:n40xbeTi
カバレッジ100%目指さないの?
共通ライブラリのエラーのパスとか
2022/06/26(日) 23:06:38.35ID:yMoKMg46
別におすすめじゃないけどgomock使ってる
gomockはinterface{}だらけで静的型チェックが効かないからたまにイラッとする
2022/06/26(日) 23:08:45.74ID:yMoKMg46
間違えた
gomockじゃなくてtestifyだ
2022/06/27(月) 08:35:06.00ID:YooYWD1s
がーん、週明けで確認したらGCPでホストしているサービス二個ともが、のきなみサーバーエラー500で動いてない
Memorystore の障害なのか?これは
2022/06/27(月) 08:37:17.96ID:YooYWD1s
Firestoreのクエリ結果をキャッシュしてるから確かに使ってる
2022/06/27(月) 08:40:10.32ID:YooYWD1s
あ、よく考えたらGoスレではスレ違いな話題だったスマン
ホストしてるのはGoだけど
2022/07/02(土) 23:20:51.48ID:IZ1AfdFM
質問
xxxx_test.go は go test だけで、go build からは無視されるとかって本当?
だとすると package xxxx_test とかパッケージを分けるのって意味がない?
2022/07/02(土) 23:36:14.32ID:IZ1AfdFM
あー、テストで xxxx をインポートしてる別パッケージをインポートしたいときに、xxxx からじゃ循環参照としてコンパイルできないから意味はあるのか
2022/07/02(土) 23:50:10.91ID:WXVFk7BC
ごくまれに package xxxx_test を作ったほうが簡単に解決できることもあるね
2022/07/03(日) 08:48:25.27ID:7pvv3VrN
*bufio.Scanner とか *os.File といった、interface じゃなく struct な戻り値を返す標準関数で、scanner.Scan() とかの戻り値による分岐をカバレッジしたい

標準関数は関数ポインタによるフックに変更して、モックで差し替えられるようにしたんだけど、関数ポインタのシグネチャが struct を返す形なんで、上記の scanner.Scan() とかを差し替えられない

そこで bufio.NewScanner() を直接に使うのではなく、scanner を interface で返すラッパー関数を作って、そのラッパー関数ポインタをモックで置き換えさせることを考えたりしてるんだけど
…やり過ぎ?(そもそもこの説明で分かるかな?)
2022/07/03(日) 08:55:03.83ID:7pvv3VrN
そもそも例外なケースのカバレッジのために、そんなクソ複雑なメカニズムを入れるのは、保守性を下げてしまうから本末転倒だろうか?
2022/07/03(日) 11:51:42.83ID:l1HGgLKC
Go的には、差し替えが必要なんだったらScannerを直接使わずに最小限のアドホックなinterfaceを定義し、
それを関数の引数に受け取るかstructのメンバに持たせるのが筋
2022/07/03(日) 13:48:43.92ID:7pvv3VrN
>>448
うん、そんな感じ
https://pastebin.pl/view/d979ea5b
該当部分を抜粋
しかし無駄に複雑なコードかなぁと
そこまでする意義はあるのかないのか
2022/07/03(日) 13:59:46.67ID:7pvv3VrN
>>449
これだけ複雑なのに、os.Open() と s.Err() がエラーを返すパスを通せるだけというのは、
コードの保守性悪化に見合うメリットたりえるのか
そう感じてしまって悩んでる
これが Java ならクラスローダーでプロキシインスタンスに差し替えるという手段で対象コードには手を触れなくて済むから…
2022/07/03(日) 15:10:23.33ID:Z8jWnyOJ
>>450
そのへんはGo云々というより設計センスの問題だな
textLinesがhookを持つのではなく、LoadFromの引数にfilenameの代わりにiScannerを渡して、その実装を提供するのは呼び出す側の責任にした方が良いと思う
filenameを受け取る便利関数を提供したいなら、それとは別にLoadFromFileNameみたいな関数作ってFileやScannerをインスタンス化してLoadFromに投げればいい
そうすればインスタンス化の部分とそれを使う部分とでテストケースを分離できるでしょ
2022/07/03(日) 23:23:15.49ID:kM3791I8
そうだな、設計の話だなあ
コードがそこそこの規模になるんだったらとりあえずDI的なことをやったほうがいいよ
2022/07/10(日) 17:20:12.05ID:EjhmXdOb
普通に自前でScanner作れよ
大して難しい話じゃないだろ
454デフォルトの名無しさん
垢版 |
2022/07/11(月) 19:28:21.15ID:QgABBT19
構造体のコンストラクタのコードを見ると必ず構造体のポインタを返していますが、ポインタにするメリットと値を返したときのデメリットを教えて頂きたいです
2022/07/11(月) 20:06:52.63ID:BS7kt+k9
>>454
受け渡しの際に毎回コピーするのではなく同一のインスタンスを引き回すことを想定している場合、
それを利用者に主張するために値ではなくポインタを返すことが多い
ポインタで受け取ったものをわざわざデリファレンスしてコピーなんて普通あまりしないからね
構造体をオブジェクト指向言語におけるミュータブルなクラスのように使っていると、コピーされると意図せぬ挙動になりやすい
2022/07/12(火) 09:01:35.03ID:r0oulnz0
>>453
>>449 見れば分かるがファイル名を受け取ってos.Openして得たFileからScannerを作ってるわけで、これをどうやって差し替えるかという話
2022/07/12(火) 09:02:55.76ID:r0oulnz0
>>453
だから、ScannerではなくNewScanner関数をどう差し替えるかという話
458デフォルトの名無しさん
垢版 |
2022/07/12(火) 09:14:17.91ID:bpFuPlMn
>>455
よく分かりました
ありがとうございます
2022/07/15(金) 23:35:22.96ID:1DD1sO9i
コンパイルするファイル内に設定値も全部入れたいんだけど、
その場合は設定値だけのファイルを読み込むことって可能ですか?
関数にしてmapで返す感じしかないですか?
2022/07/16(土) 13:38:45.14ID:Gzq+vhF3
jsonファイルをgo-assetsとかgo:embedで組み込んで、それをjson.Unmarshal()で構造化データとして使えばいいと思うよ
2022/07/16(土) 14:06:11.73ID:F7RlRzGb
個人的には設定はビルド時に埋め込むならソース内にjson風にハードコードする派
設定ファイル嫌い
2022/07/17(日) 05:50:18.02ID:p7xubc+G
てめーの好き嫌いなんか知ったことじゃない
2022/07/17(日) 08:32:38.03ID:Em8OpVY9
組み込みjsonをデフォルトとして、カスタム設定ファイルは外部のjsonにする
デフォルトから取り込んでカスタムで上書き
これでjsonからの取り込み部分を一本化できるのでバグを防止できる
ハードコードしてると取り込み部分が共有できない (json文字列を返す関数でもいいんだけど
2022/07/17(日) 09:17:16.84ID:mx7kwKTp
>>463
組み込み設定は構造体をハードコードし、カスタム設定ファイルはそれをjson等で上書きすればいいだけ
どうせ上書きされるのは極一部の項目だけなんだから、大部分はコンパイル時のチェックによりバグを防止できる
2022/07/17(日) 19:27:05.51ID:Em8OpVY9
>>464
と、思っちゃうよな
構造体定義して、初期化で初期値書き込んで、それとは別にカスタム設定取り込みコードを書く
対して、構造体定義して、設定取り込みコードを書く
すると設定取り込みには普通にバリデートも書くから初期化での値バグが起きない
2022/07/17(日) 19:36:44.11ID:Em8OpVY9
>>464
まあ、好きずきの話に近いことは近い
ハードコードした設定値をバリデーターにかけてチェックさせる作りなら解決できなくもない
でも取り込みの各段階でバリデーションしていったほうがミスりにくいと俺は思うから
2022/07/17(日) 19:43:13.12ID:EABPDou+
そんなにバグが怖いならそもそもそんな柔軟な設定ファイル要る?というところを見直すべきでは
汎用的なOSSでも作ってるんでない限り、設定なんぞ環境変数で十分
あとは全部ハードコードすればバリデーションなんか要らん
2022/07/18(月) 09:02:04.30ID:unHGOtJd
バグが怖いというより、適切なアナウンスかな
設定のどこが、どう不味いのか
2022/07/18(月) 16:09:24.37ID:k+MW10XJ
Viperを使え
2022/07/21(木) 22:26:13.75ID:CXPkj94/
フレームワークのginでWebアプリ作りたいなと思ってるんですけど、ginの勉強にいい教材ありますか?
Pythonでツール作ったことあるくらいで、Goの基礎は一通りやったくらいのスキルです。

日本語ドキュメント見てもいまいちピンときてません
https://gin-gonic.com/ja/
2022/07/21(木) 22:30:02.68ID:2u+uMLjG
gin自体が良くないからいい教材なんか無い
Goはnet/httpパッケージを使うんだよ
2022/07/21(木) 23:21:18.30ID:CXPkj94/
そうだったのか。。
2022/07/22(金) 02:56:37.89ID:J1VsK1aI
いやGinでいいだろ
今どきnet/httpだけでWebアプリ作ってるとこなんてねーよ
Gin+Vueとかで作ってみな
5chにいる玄人()のおっさんに惑わされんな
2022/07/22(金) 03:45:47.87ID:GTjCaUbk
俺はchiがおすすめ
2022/07/22(金) 12:01:47.88ID:wu+YttEu
最近いじってないけど
Echoは少数派なの?
476デフォルトの名無しさん
垢版 |
2022/07/22(金) 13:57:48.11ID:sWmP1lOI
>>473
さんきゅー!
2022/07/22(金) 14:20:09.64ID:whw2xWQR
gin、chi、echoどれも薄っぺらいんだから対して変わらない
どれでもええわ
2022/07/23(土) 09:09:18.33ID:e1dxODSm
echo はcontext の扱いが良くない
2022/07/29(金) 12:06:04.77ID:Nm1LHugv
Fiberこそ至高
2022/07/29(金) 12:08:16.31ID:CmFCr4CU
月額報酬が最も高い開発言語ランキング 3位は「Python」、2位は「Go」、1位は? フリーエンジニア向け仕事仲介サービス調べ
2022/07/30(土) 02:29:49.54ID:Wzbfhtrr
URLを貼らないあたり仕事できなさそう
2022/07/30(土) 05:26:38.23ID:fJ4AJJUc
Goは単価高いけどGoだけ出来ればいいってわけじゃないからなぁ

ECSとかTerraformみたいなクラウド技術も使えて当然だよね?って雰囲気が全体的にある
2022/07/30(土) 17:20:05.92ID:wZaxY20D
Goのmapをfor分で回すと順序が不定というのはなんでそうなったの?
2022/07/30(土) 17:42:37.40ID:54mLdGPJ
>>483
将来的な最適化の余地を確保するため。
大抵の言語では、標準のハッシュ表はその内容が変更されない限りは順序が変わらないような実装がなされていることが多い。
しかし、プログラマにそれを期待したコードを書かれてしまうと、内容が変わらなくても順序が変わりうるような実装に将来的に変更したときに既存のコードが破壊される可能性がある。
Goはそれを避けるために順番を意図的にシャッフルしている。
例えば、将来的にはGCがmapのメモリレイアウトを自動的に最適化するかもしれない。仮にそうなればプログラマが内容を変更したつもりがなくても順番が変わるだろう。
2022/07/30(土) 18:14:58.42ID:wZaxY20D
>>484
なるほど
意図的にやってるのか・・・
2022/07/30(土) 23:59:57.16ID:H9aJG6PT
Rubyとかは逆に不定じゃなくしたよね。いつだったかのタイミングで。

あれは変な判断だと思ったなぁ。
2022/07/31(日) 00:35:32.67ID:FStFDS54
Rubyの連想配列(Hash)にはshiftっていう変テコなメソッドがあるせいかなあ
2022/07/31(日) 00:47:08.11ID:tsdyYOt0
RubyやPythonの用途なら挿入順でイテレートできるようにするためにかかるコストよりも
利便性が優先されるからじゃないかな
489デフォルトの名無しさん
垢版 |
2022/07/31(日) 02:02:03.13ID:fu2FWHQK
ですな。
2022/08/03(水) 10:05:50.52ID:pR7q6wnw
Go 1.19 is released!
https://go.dev/blog/go1.19

もう出た
今verは早かったな
2022/08/03(水) 12:30:49.23ID:HH6IlM8W
Pythonはordered dictがいつの間にか標準dictになってたな
便利だからいいけど
2022/08/09(火) 14:19:29.00ID:/hRQdNQg
最近の言語仕様書はDeepLすら受け付けない英文なのはどうにかしてくれんかな
ほかにもインターフェース関係の解説でいつの間にか話に出てきてないFileインターフェースが混じってきたり
絶対にレビューしてないよな

なお1.17を読んでる(1.18 からはジェネリクスで更に混迷が進んでる)
2022/08/18(木) 10:59:30.64ID:uJ4JpjWj
ふと

channel はチャンネルと読んでる?チャネルと読んでる?
2022/08/18(木) 12:00:31.81ID:I3eJj73g
チャネル
2022/08/18(木) 12:23:20.11ID:cEC5FUVy
正確な発音はチャノォ
2022/08/18(木) 13:07:53.85ID:nV24tQaO
んゅにぇぅな?
2022/08/18(木) 14:36:09.80ID:wr3YJ4Iv
茶野ぉ?
2022/08/18(木) 16:47:44.68ID:sstdM9KK
チャノルなぞ使わん!
男は黙って共有&mutex
499デフォルトの名無しさん
垢版 |
2022/08/20(土) 04:18:43.73ID:O8Vd08Ya
>>473
ginのルーティングが糞なのは直ってるの?
2022/08/20(土) 08:17:30.29ID:9Gwmc6Wf
実際goをつかいはじめのころはチャンネルの仕様とか使いかたとか調べるのが面倒で
勝手しったるmutexばっかりつかっていた
2022/08/20(土) 08:27:18.78ID:jhGGjByr
よーわからんし、echoで問題ないから使ってる
502デフォルトの名無しさん
垢版 |
2022/08/20(土) 11:47:33.07ID:O8Vd08Ya
俺もecho
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況