Go language part 3

■ このスレッドは過去ログ倉庫に格納されています
2019/10/17(木) 21:38:04.78ID:wMsZ+t6y
Goについて扱うスレッドです。
GoはGoogleによって開発された言語です。

公式ドキュメント
http://golang.org/doc/

日本語訳
http://golang.jp

※前スレ
Go language part 2
https://mevius.5ch.net/test/read.cgi/tech/1510395926/
127デフォルトの名無しさん
垢版 |
2019/11/26(火) 23:46:52.62ID:+iLBHaU9
>>126
そうか、パッと見ダウンロード処理を開始する時にwg.Add(len())すれば、とおもったけど、よく考えたら何をダウンロードするのかを取得する処理自体が並列化してる場合は、ソースみたいに自分でAdd(1)しないと並列化できないね。
とても勉強になった。ありがとう。
2019/11/26(火) 23:59:49.88ID:eptCat3v
>>124
WaitGroupのソース見る限りAddされた数と待っている数を保持していてチャンネルを使っていないっぽいけど…
チャンネルを使うと詰まることあるけどWaitGroupならないんじゃないかな
https://golang.org/src/sync/waitgroup.go?s=574:929
129113
垢版 |
2019/12/02(月) 22:40:03.04ID:H5nAExhM
>>113
改訂2版 みんなのGo言語、2019/8/1

半分ぐらい読んだけど、これは、文法以外の開発に関する本で、

テスト・デザインパターンなど、
各言語の中級者向け「Effective 何々」に相当する本
130デフォルトの名無しさん
垢版 |
2019/12/03(火) 08:47:37.15ID:+IyagjW2
effective goは無料で読めるけど全然似てない。適当こくでねぇ。
2019/12/05(木) 11:52:28.33ID:a2pVpta0
シマンテックのSEPがgolintを誤検知してさくっと削除
2019/12/06(金) 09:12:39.72ID:f1K6IxOi
誤検知じゃないかも
133デフォルトの名無しさん
垢版 |
2019/12/08(日) 01:05:14.90ID:XpO05MF4
ジェネリクスとnnbdは入ったの?
134デフォルトの名無しさん
垢版 |
2019/12/12(木) 01:16:12.28ID:8N8BhmJA
>>133
入ってない。
ジェネリクス欲しいよね
2019/12/14(土) 02:29:56.08ID:yWRsmPzk
ジェネリックよりインターフェースのメソッド名をリファクタリングする機能が欲しい
それとファイル内に閉じたスコープの新設
2019/12/14(土) 12:20:22.72ID:txh4qI7o
サクッとwebサーバー建てる時お前らエコー使うだろ?
後輩がジン一択言って譲らんのよ
2019/12/14(土) 12:25:23.49ID:yWRsmPzk
ごめんnet/http一択
138デフォルトの名無しさん
垢版 |
2019/12/14(土) 18:57:44.23ID:SoAE2obC
サクッと立てたい時にフレームワークは使わない
2019/12/14(土) 21:25:16.45ID:yWRsmPzk
さくっと欲しいときは
https://play.golang.org/p/LtYjxcomguJ
を使ってる
2019/12/14(土) 21:32:58.33ID:b2AnHSwF
>>139
お、イイネ!
2019/12/16(月) 01:49:06.93ID:tdYdVSGI
go初心者です。
田中、佐藤、加藤からランダム(重複なし)で3つ抽出するにはどうすればいいでしょうか?
2019/12/16(月) 01:56:43.58ID:oBdKFKCd
取り出す数が配列の大きさと同じならシャッフルすれば良さそう
https://golang.org/pkg/math/rand/#Shuffle
2019/12/16(月) 02:11:32.44ID:tdYdVSGI
>>142
なるほど。
ただ実際は配列の大きさは100個くらいあって取り出す配列は5つなんですよね...
2019/12/16(月) 02:29:03.91ID:oBdKFKCd
>>143
重複なしならシャッフルして前から5個取れば良さそう
2019/12/16(月) 02:37:03.68ID:tdYdVSGI
>>144
すみません、前から5個取るにはどうすればいいのでしょうか?
2019/12/16(月) 02:44:37.15ID:F1oitXIE
https://play.golang.org/p/RWZYkJYabd2

Playground だと時間が止まってるから常に同じ結果しか表示しないけどね…
2019/12/16(月) 02:50:18.86ID:tdYdVSGI
>>146
おー!これでいけそうです。
ありがとうございます。
2019/12/16(月) 18:22:41.60ID:e0hK5sZz
おんぶに抱っこやんけ
149デフォルトの名無しさん
垢版 |
2019/12/16(月) 20:24:54.73ID:4cesp02J
interfaceをに包まれた2つ以上の変数が持つ型が一致してるか判定できる構文てある?

こういうのはできないみたいだし…

var x interface{} = int(12)
var y interface{} = int(25)
if (a, ok1), (b, ok2) := x.(int), y.(int); ok1 && ok2 {
fmt.Println(a, b)
}
2019/12/16(月) 20:25:53.67ID:4cesp02J
リフレクション使えば判別出来るのは知ってる
2019/12/16(月) 20:35:08.46ID:F1oitXIE
まぁ、こんなんかなぁ…

if a, ok1 := x.(int); ok1 {
if b, ok2 := y.(int); ok2 {
fmt.Println(a, b)
}
}
2019/12/16(月) 20:41:01.13ID:F1oitXIE
reflection ならこうかな

import "reflect"

if reflect.ValueOf(x).Type() == reflect.ValueOf(y).Type() {
 fmt.Println(x, y)
}
2019/12/16(月) 23:14:32.24ID:xtOX+BoM
型アサーション使っていいなら、型スイッチという手段も
2019/12/18(水) 18:41:56.85ID:q6G7SevV
golang関係ないんだが、50000番台ポートをlistenで開きまくるアプリ書いてるんだが、テスト実行毎にデバッグexeのパスが変わってWindowsDefenderがブロックしましたダイアログ出してきてウザいよぅ
うちはSEPなんでお呼びじゃないし、更にブロックされてると主張してるがテストコードはガンガン通ってるからブロックしてねーし

ともかく、デバッグexeの一時フォルダを固定する設定ってある?そうすりゃ例外設定書ける
155デフォルトの名無しさん
垢版 |
2019/12/19(木) 17:58:01.30ID:E0rD8pHx
go testの内部処理を追ってどうぞ


https://go.googlesource.com/go/+/refs/heads/master/src/cmd/go/go_test.go
156デフォルトの名無しさん
垢版 |
2019/12/19(木) 18:04:48.44ID:E0rD8pHx
>>155
リンクミス
こっち
https://go.googlesource.com/go/+/refs/heads/master/src/cmd/go/internal/test/
2019/12/21(土) 20:16:12.25ID:YQ48l2e3
ep8 ー ep7で雑に投げられた謎を雑に処理、端から解決する気無し。既存キャラの大幅劣化に加え、ローズ、紫バァ、暗号破りの新キャラ3人がヘイトの対象に(主にローズ)

ep9 ー ep8の出来事はほぼ無かったことに…。大味極まりないが逆にそれが功を奏し、SWファンからの評価は概ね高い。興収でエンドゲームを超えられるか注目
2019/12/21(土) 20:17:39.18ID:YQ48l2e3
ごめん、完全誤爆
159デフォルトの名無しさん
垢版 |
2019/12/26(木) 23:28:38.63ID:mrZiX212
名前付き引数ってこんな感じでいいの?

https://play.golang.org/p/dckMhAXN5Ve
2019/12/26(木) 23:57:38.99ID:oc05wxay
>>159
知らんのでググって、最初にヒットした奴の方が良いな

具体的にはオプションはそれぞれ対象の構造体ポインタを受けとるシグネチャを持つ関数
そのメソッドのスライスを順に呼ぶと、関数が特定フィールドに値をセットするという作り
まず、その方式だと型switchがいらない
オプションを増やしたければセット用の関数を増やす

他の利点として、設定する関数では他のフィールドも参照できるから、矛盾のある設定を防ぐとか柔軟な設定もできそう

ぱっと見、visitパターンっぽいアイデアに見えた
(個人的な初見の感想なんで深く考えて言ってる訳じゃない
なんだっけ、二重呼び出し?
2019/12/26(木) 23:58:56.08ID:uIk/XshQ
まぁ、interface{} で良いんじゃないかな

https://play.golang.org/p/MekSknA7SOd
2019/12/27(金) 00:43:24.50ID:3vrV+39v
>>160
https://play.golang.org/p/IPFXvijbxKY
2019/12/27(金) 18:28:35.28ID:Ppw19SXV
ひさしぶりにGO触ったら仕様変更の真っ最中なのね...
暫く冬眠しとくわ                         
2019/12/27(金) 18:35:37.18ID:DR+ZCW3w
いつでも仕様変更
ジェネリックス欲しがってる層って、何のクラスタの人なんだろ
165デフォルトの名無しさん
垢版 |
2019/12/27(金) 20:14:12.67ID:MjAsf7uH
Java
2019/12/27(金) 20:24:26.71ID:ttsY8Nqp
Java 原人、生きていたのか
2019/12/28(土) 00:46:09.91ID:zIP3TdeH
ていうか Java のジェネリクスもおもくそ後付けやん
2019/12/28(土) 13:38:22.34ID:bI9Nn/0L
golangのゆるふわなinterface機構の上でジェネリックスの出番なんてそうそうあるものなのかな?
2019/12/28(土) 13:43:53.42ID:c5TG1bir
ちょっと凝ったことをしようとすると interface{} まみれになるところが改善できれば。
2019/12/28(土) 13:46:40.71ID:FraGl0GS
ジェネリクスはGo教において諸悪の根源とされる「利用しようとする前に利用される方を設計する行為」の最たるものだからなあ
2019/12/28(土) 14:04:34.89ID:bI9Nn/0L
自分としてはgolangの形式で動的にリンクできるライブラリ手法が欲しいな
dllみたいなcgoなライブラリじゃなくgolangネイティブな形で
interface定義とインスタンスをロードするビルダだけ静的リンクするスタイルを想定
これがあるとDIとかプラグインが捗るから

知らないだけで存在してたりする?
それともdotnetのactivexみたいにdllに皮かぶせれば行けたりする?
2019/12/28(土) 15:05:05.51ID:R0mqAcCR
ドラフトに挙がっている Go の generics(contract ベース)が採用されれば、

>>169
> ちょっと凝ったことをしようとすると interface{} まみれになるところが改善できれば。

inteface{} を使わなくてもよくなるんじゃないか、って期待してる。
まぁ、最終的にどうなるかは分からんけど…
2019/12/28(土) 18:09:17.61ID:euZyKjoi
ジェネリクスは大体ライブラリとかそっちの方が実装してて普通は使うだけ
他の言語でジェネリクスないときはいちいち型キャストと型チェックしてたから
そういうのが無くなって嬉しかったんだけどなあ
174デフォルトの名無しさん
垢版 |
2019/12/28(土) 18:18:35.27ID:7CupGRjm
goでapiサーバーを構築したいんだけど、参考になるサイトとかないですか?
2019/12/28(土) 18:23:32.21ID:euZyKjoi
本買え
2019/12/28(土) 19:01:41.80ID:bI9Nn/0L
状態を変化させるAPIだと、API作るよりCORSとかCSRF周りの勉強がめんどくさい
2019/12/29(日) 14:50:10.22ID:J2Lmqp1K
WebAPIサーバーなんて、Qiitaとかそこらへんに転がってるような「GoでWeb APIを作ってみた」
程度の簡単なものが実際に本当にプロダクションで運用されてるもんだ。
ただしその前方や足元にはALBやらKubernetesやらがあって、信頼性やスケーラビリティはGoではなくそういったクラウドインフラの層で担保するんだよ。
Goをプロダクション運用したいなら、GoよりAWSの知識の方がずっと重要だ。
2019/12/29(日) 18:17:57.65ID:rmxnHa0h
>>177
アホ
2019/12/30(月) 09:38:05.31ID:QVGDKUrk
標準パッケージのjsonのUnmarshal
なんでReaderインターフェースでなくてバイト配列を引数にしたんだろ?
DecoderはSAXみたいなトークナイザだしなぁ
2019/12/30(月) 09:50:44.52ID:QVGDKUrk
>>177
趣味のサービスかもしれんのに、何を先走ってるんだか?
少なくとも商売始めようという人間が便所の落書きで質問しないと思う
2019/12/30(月) 10:12:03.12ID:5236BLqU
だったらQiitaのコピペ記事で十分だな
2019/12/30(月) 13:50:14.69ID:vvSvem59
>>179
いやNewDecoder(r).Decodeでいいだろ
2019/12/30(月) 14:37:33.59ID:QVGDKUrk
>>182
え、そうなの?とやってみたらできたわ
https://play.golang.org/p/thP_FXceuPm
勘違いしていた
2019/12/30(月) 14:40:19.65ID:wDUvJCMS
一見落着
2020/01/01(水) 23:38:38.47ID:N0k15467
goルーチンってプログラム終了前に全部終了させる必要ありますか?
2020/01/02(木) 02:53:52.42ID:YsIrUWNq
>>185
必要かと言えば、必要はない
goroutineが終わらなくてもプロセスは終わる

でも、goroutineのdeferルーチンは呼ばれない
https://play.golang.org/p/Tt1Hbxzbr8v

つまり後始末とかはされない
後始末したければ、
1. context使って終了を通知
2. WaitGroup使ってgoroutineの終了を待つ
2020/01/02(木) 04:32:00.19ID:DNldEsUw
ありがとう
2020/01/08(水) 00:07:12.80ID:xIk/A1LK
golangはgoroutineでNAMESPACEを適切にコントロールする手段がないのでDockerコンテナを記述するには適していない、という記事を読んだんだけど
これって対策とかロードマップとか何か打ち出されてない?
189デフォルトの名無しさん
垢版 |
2020/01/12(日) 02:20:29.72ID:/FVSphLE
>>188
記事はどこ?
2020/01/12(日) 02:36:05.34ID:K4o7W11h
>>189
2017だから結構古い話
https://www.publickey1.jp/blog/17/rustdockerrailcarrust.html
OracleがDockerコンテナランタイムの実装言語としてgoじゃなくRUSTを採用した理由

んで、goroutine関係って改修ってされてる話って見たことなかったんで、これってどうなってるのと
2020/01/12(日) 10:07:33.12ID:EKUpo6h1
記事読んでみたけど、問題はnamespaceそのものじゃなくてnative threadへのアクセスじゃないのかな。
2020/01/12(日) 10:35:25.29ID:F6k+/xNL
言語選択ネタは基本的に使いたいものを正当化するためのゴリ押しになりがちだから話半分に聞いておくのが正しい態度
2020/01/12(日) 10:41:45.99ID:K4o7W11h
根本的な原因はそうなんだろうけど、クリアするハードルは名前空間なのかなと
まあ、自分はDockerコンテナ自身には今のところ手を出す気はないアプリ作者だけど、ちょっと気になっただけなんだ
元からgolangはデバイスドライバとかの低レベルのシステム開発は対象としてないように見える(主観)ことから、それと同様に不要な機能としてガン無視なのかな?
それならそれで文句がある訳じゃない
2020/01/12(日) 11:31:15.29ID:LxAQ0O23
いつぞやの「味見」の兄チャンか?
2020/01/12(日) 11:45:59.65ID:K4o7W11h
えーと、多分そう
ツール書くのにperl awkからjava c#経由して今はgolangが便利すぎて引っ越してきた
2020/01/12(日) 11:48:51.94ID:K4o7W11h
過去ログ見たら別の人
自分はmodulesが安定しねーっ、と嘆いていたクチ
197デフォルトの名無しさん
垢版 |
2020/01/12(日) 12:49:08.86ID:1tVaWxzz
おまえか!
2020/01/13(月) 04:33:46.15ID:zAmpThch
https://i.imgur.com/LvXV7fl.jpg
2020/01/15(水) 23:33:03.13ID:HHNoDBvB
プログラミング言語ごとの年収
https://pbs.twimg.com/media/EOSS8tqU4AAY75v.png
2020/01/15(水) 23:43:56.51ID:A/ClkkqP
今のところGoはAWSやGCPを極めた人が使うイメージだな
年収が高いのもそのためだろう
Goはドカタグラミングにも最適だから、もし今後も順調に普及していけば平均年収は大幅に下がりそう
2020/01/16(木) 08:41:54.42ID:FflLw5gy
覚えなきゃならない独特で特殊なことがインターフェースの概念くらいで、構文は平凡以下の厳選されたものしかないから学習ハードル低いよな
自分はc言語とJavaとJavaScriptを経験してるから、一週間でほぼ使えるようになった
2020/01/16(木) 19:01:13.36ID:aiRikJgB
下手すると何も特に勉強しなくてもただ人の書いたコードながめるだけで
「ああこんな感じか?」って雰囲気だけでそれなりのコードかけるようになっちゃう言語
2020/01/16(木) 21:24:12.96ID:u+AvDfAm
goはシンタックスシュガー多めで、初学者が見よう見まねで学習すると嵌りやすい印象。
2020/01/16(木) 21:59:12.79ID:TiSttWiL
ほとんど使う局面がないstruct実体はでっかい落とし穴
実体配列rangeで回して更新されねーっと悩む初心者のいかに多いことか
2020/01/16(木) 22:08:19.79ID:TiSttWiL
糖衣構文?なんかあったっけ?
2020/01/16(木) 22:19:59.62ID:rwq+tT6g
>>204
ヌルポで落ちまくるよりは遥かにマシだわ
むしろfor rangeで要素のポインタを取れるようにしてほしい
2020/01/16(木) 22:45:35.06ID:TiSttWiL
落ちるなら、そちらのほうが万倍はマシでしょ
落ちなくて値が更新されないという恐怖
2020/01/16(木) 23:37:40.70ID:v13qNblq
誰も staticcheck 使ってないのか……
2020/01/18(土) 11:13:25.73ID:8BJKylNj
golangのシンタックスシュガーは思いつく限りだと
1. := での型推論による変数宣言の代替
2. レシーバがポインタ型の場合に構造体実体でメソッドを呼び出すと、ポインタに変換して呼び出す

C言語からの後方互換性を意識するなら -> は廃止しなけりゃいいのに、中途半端
モダンな言語と同じにポインタを参照と呼び替えて、実体が欲しけりゃunsafeでやれと
2020/01/18(土) 11:28:22.96ID:s9OHHI5s
学習時に2は一貫性なくて嫌だった
2020/01/18(土) 11:30:13.71ID:8BJKylNj
3. {フィールド:値, ...} 形式の構造体生成式
・・・これは構文だしシンタックスシュガーなのか微妙

シンタックスシュガー多めという意見は、どういう観点で構文をシンタックスシュガーだと判断しているのか俺にはサッパリわからない
むしろラムダ式(本来の無名関数という意味ではなく -> で書く記法)というシンタックスシュガーすらないgolangはむしろシンタックスシュガー少なすぎ(でもそこがシビれ
2020/01/18(土) 13:18:44.40ID:AhPxC9uw
シンタックスシュガーといえば、&Hoge{ ... }で構造体を初期化しつつポインタを取れるのに、&1はダメなのがウザい
2020/01/18(土) 13:46:22.20ID:4nVoSga0
シンタックスシュガーというか、なんか一貫性に欠ける略記法みたいなのが多いような
2020/01/18(土) 14:10:48.57ID:8BJKylNj
多いような、と言われてもなぁ
略記法と言っても、_ とか [::2] とかしかぐらいしか思い浮かばないんで、具体的に
2020/01/18(土) 15:16:24.10ID:6ictA0Lc
switch w := v.(type) はかなりエイリアン感あるな
Goに存在する数少ない型推論と言えるものの一つ
2020/01/19(日) 06:24:36.25ID:lyRWqXEG
Dockerの本社いい所にあるね

現役シリコンバレーエンジニアが教えるGo入門 + 応用でビットコインのシストレFintechアプリの開発
https://www.youtube.com/watch?v=WkEWDXogjR8

https://duckduckgo.com/bang_lite.html
!yt giants homerun boat
2020/01/19(日) 10:59:57.18ID:FsFcJUwr
一貫性に欠ける記述に思い至った
スライスとマップだけ生成すると実体ではなくてポインタを返す
やっぱり、構造体も生成するとポインタを返してほしかった
要らんよな実体
2020/01/19(日) 11:18:53.24ID:FsFcJUwr
要らないというのはちょっと正確性に欠けてた
普通のロジックを書く場合には要らない

DLL呼び出しとか、バイナリファイル書き出しとか、外部I/Fとして任意のアラインメントでのバイト列に直列化するパッケージがあって、内部では全て参照と言う名のポインタを扱うようにしてくれていたら何も問題は無かった
構造体ポインタでスライス作って、構造体のアドレスを入れて、という書き方を説明するためには、アドレスについて教えなけりゃならない
それを理由として新人研修の言語教育の候補リストから落としたんだった
2020/01/19(日) 18:45:36.29ID:E4qdczJe
すべてポインタてJavaか
2020/01/19(日) 21:41:47.53ID:K0reTlt5
構造体がポインタじゃないのなんでだろ
結局全部ポインタにしがち
イミュータブルな操作に値レシーバ使うことと整合させるため?
2020/01/20(月) 00:17:10.01ID:4Ml4H1E5
・構造体配列のアクセスがゲロ遅い
・GCに負担がかかる
・エスケープ解析が困難
・C/C++との相互運用時に>>218のような変換が必要になりクソ非効率だし実装も面倒
・nilを受け入れないことを保証できない
2020/01/20(月) 10:38:34.77ID:Ta+b5biN
CL 187317 for the current proof-of-concept implementation.
https://go-review.googlesource.com/c/go/+/187317
2020/01/20(月) 11:55:50.46ID:eiih9B9I
>>221
より良きアセンブラとしてC言語からの代替という目的だと、性能に対しての多少のコーディングしづらさはトレードオフの許容範囲ってことか
こりゃ、どうにもならないなー
>>208さんの言うように静的解析でガードするのが正解なんだな
224デフォルトの名無しさん
垢版 |
2020/01/20(月) 13:14:26.10ID:0GX6odYx
Cと同じものが欲しいならCを使ってれば良いんだよ
2020/01/20(月) 14:06:44.63ID:OxRp59bR
正論
226デフォルトの名無しさん
垢版 |
2020/01/20(月) 15:43:03.96ID:lA6Ihl1+
GCが欲しかったんだよ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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