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/
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が欲しかったんだよ
2020/01/20(月) 18:15:01.52ID:LSsGv7mq
静的解析でgolangci-lint導入してみた

そしたら gosimple が大量に felse == じゃなく ! 使えと
うるせー!年寄りには ! は見辛くて見逃すんだよ!!
どこだよ、オフする設定方法
2020/01/20(月) 18:26:26.20ID:Ta+b5biN
felse てw
2020/01/20(月) 18:33:13.71ID:s/Cy+4Aw
フォールス
2020/01/20(月) 20:08:08.71ID:YdJ/u2zR
TYPOした鬱だし
2020/01/20(月) 22:17:58.60ID:2yM9TKqu
だっさ
2020/01/21(火) 19:27:40.22ID:o0UeX6qu
静的解析の余計な判定をオフする方法がわかったんで書いとく

// nolint:gosimple
とか行の後とか前行に書くとそこだけオフされる
設定ファイルでオフすると設定ファイルを公開する手間が増える
コードに書いておく方がベターだと思った
2020/01/21(火) 20:10:41.23ID:NzRBbl2V
素直に ! 使えw
2020/01/21(火) 20:41:44.16ID:UsGwmUNt
>>232
色変えろ🎵
2020/01/23(木) 09:22:53.97ID:pzDfErEA
GO2になるのいつや?
2020/01/23(木) 10:13:08.23ID:yjFFgoKI
https://blog.golang.org/toward-go2
Go 1.20がGo 2.0になるらしいから順調にいけば2023年
2020/01/23(木) 22:59:41.19ID:hGTEnJ15
ひとことでいうと
この言語は名前がだめ
2020/01/24(金) 00:05:38.38ID:oUbAtTQV
goでググるな
golangでググれ
2020/01/24(金) 01:02:54.82ID:07dDYyB2
cとかdよりは……
240デフォルトの名無しさん
垢版 |
2020/01/24(金) 11:30:28.77ID:ytRnz1Ft
一時期Cの関数を検索したかっただけなのにphpのばっかり出て来たときは辟易した
2020/01/24(金) 16:05:17.82ID:UzV8rxSa
一時期旧日本海軍の軍艦の画像を検索したかっただけなのになぜか
萌え絵のおっぱいおねーさんばっかりでてくる、みたいな状況か
242デフォルトの名無しさん
垢版 |
2020/01/24(金) 16:06:50.05ID:D9pKpEah
JULIAが最悪
2020/01/24(金) 16:20:31.67ID:DOTl6W7s
www
2020/01/24(金) 23:34:56.86ID:e4qsn6ol
MFCのCStringもヤバい
2020/01/25(土) 00:34:31.13ID:xHG8Mzpn
ご覧〜
2020/02/01(土) 05:08:16.60ID:dRW3BMck
The Go Programming Language Specification
Version of July 31, 2019
https://golang.org/ref/spec

Goプログラミング言語仕様
Version of September 4, 2012
このサイトの更新が滞っており、情報が古くなっておりますのでご注意ください。
このドキュメントは、http://golang.org/ref/specの翻訳です。
http://golang.jp/go_spec
2020/02/01(土) 18:04:32.61ID:QlkeBgTk
php界隈みたいに翻訳してくれる神様降臨してほしい!
2020/02/02(日) 01:44:28.81ID:EdXZobHi
頑張ってくれた先人には申し訳ないけど
古い情報がトップに出てくるのは悪影響しか無い気もする
2020/02/02(日) 19:09:21.25ID:iIujTevh
どこの言語も同じだよな

特にモジュール関係はどの言語もひどい有様で初心者が皆困惑して言語から離れる

一度使用固めたら不都合でも10年は同じものを使って欲しいw
2020/02/02(日) 19:15:45.79ID:iIujTevh
今発売されているGoの入門書でモジュール対応してるものってあるの?
2020/02/02(日) 19:31:26.77ID:N5COx75g
モジュールと言われても用語としての範囲が膨大すぎて意味が伝わらない
2020/02/02(日) 22:01:03.97ID:N57GyRxf
みんなのGo買ったけど初心者向けじゃなくて読んでないんですが
本当に初心者向けの本ってありませんか?
2020/02/02(日) 22:10:14.40ID:dqawCQuQ
本じゃないけど

Golang tutorial
https://golangbot.com/learn-golang-series/
2020/02/03(月) 00:07:31.65ID:Uql495sI
>>252
今いい本はないと思う
255デフォルトの名無しさん
垢版 |
2020/02/03(月) 12:03:18.74ID:62FLJlST
みんなのGoってオンラインで無料で全部読めるやつ?
2020/02/03(月) 12:29:31.57ID:YoBHNt10
>>252
改訂2版 みんなのGo言語、2019/8/1
この本は、各言語の「Effective 何々」に当たる本

改訂2版 基礎からわかる Go言語、古川昇(エイベル)、2015
この本が初心者向けの文法書

>>246
に書いてある、翻訳プロジェクト、公式サイトの日本語訳
http://golang.jp/
は、エイベルの古川部長と社員が書いていた
2020/02/03(月) 13:10:43.80ID:gvFxJnFo
ガチの初心者がGoなんか使って何するのか、嫌味じゃなくて興味がある
Goは言語だけできても全く何の役にも立たないと思うが、
本来のGoのコンセプトの通りに、ペーペーにGoだけ覚えさせてアプリケーションコードだけ書かせるような組織が日本にも存在する時代になったのだろうか
258256
垢版 |
2020/02/03(月) 16:01:19.93ID:YoBHNt10
サーバー側は、Ruby → Node.js, Go

今世紀最大の起業家、Vagrant の作者・Mitchell Hashimoto なんか、まさにそう。
今や、Go の重鎮

Ruby on Rails, Sinatra などで、サーバー側を一通り作った人が、Go へ行く。
そういうキャリアパスでは「みんなのGo言語」は、良い本
2020/02/03(月) 18:05:01.17ID:XimuQ1Xy
>>257
>Goは言語だけできても全く何の役にも立たないと思うが、

Goに限らず汎用言語はみんなそうだろ
標準ライブラリが充実してて言語の構成要素が少ないGoを
最初の言語として選ぶのは悪くない選択だと思うぞ
C/Java/C#/JavaScriptらと比べるとずっと簡単
2020/02/03(月) 18:16:47.48ID:Uql495sI
だからこそモジュールのバージョン管理が大事なんだと思う
2020/02/03(月) 18:18:43.56ID:Uql495sI
基礎からわかる Go言語もずぶの素人には難しいと言うか無理だろこれは
2020/02/03(月) 19:53:53.66ID:fumIbgov
関数の引数で []*xxx と []xxx があるんですが、どっちを使ったらいいんでしょうか
2020/02/03(月) 20:45:13.09ID:eCgFnDlS
間違ってたらコンパイルエラー出るから、コンパイルエラーが出ないほう
呼んだ先の関数の引数の定義をよーく読め

でも、実際に渡している方の部分を見て書いてる可能性もあるか……
インターフェースの配列を受け取る関数だとすると、どちらでもコンパイルエラーは起こらない
ぶっちゃけ、その場合はどちらでも構わないことが多い

[]xxxxは、xxxxがインターフェースでなく構造体だったなら、十中八九はバグだと思う
バグでなく意図的に使うケースもありはするけど………………
2020/02/03(月) 21:09:34.89ID:gvFxJnFo
>>259
もちろんライブラリやフレームワークの学習は前提だけど、
仮にプログラミング初学者がGo勉強して基本的なCRUDアプリを作れるようになったとして仕事あるか?
極端な話、初学者がSpringとかASP.NETとかRailsとか覚えたら、
サーバーを起動する方法もその上でアプリを動かす方法も知らなくても仕事はいくらでもあるわけだよ
一方Go名指しの求人って、ほぼ例外なく、複数言語が使えてAWSもわかるフルスタックな人が期待されてると思うんだよな
もちろんGoが使えたらプログラミングの素質はあるだろうってことでの採用はありうけど、
そうやって入った環境では多分Goを書かせてはもらえないだろう
2020/02/03(月) 21:11:33.43ID:fumIbgov
なんかポインタとsliceが糞だなあ
2020/02/03(月) 21:12:18.59ID:fumIbgov
containsメソッドすらないとか頭おかしい
2020/02/03(月) 22:08:48.44ID:XimuQ1Xy
>>264
同意するかは別にして言いたいことは理解した
そういう内容なら「Goは言語だけできても全く何の役にも立たないぞ」じゃなくて
「初学者がGoだけ習得しても仕事はないぞ」って書けばいいんじゃないかな
2020/02/03(月) 23:33:18.01ID:MUEM5Vrv
>>266
https://play.golang.org/p/fZ3EJyfPYWg
(メソッドじゃないけど)

やはり reflection は遅いな…… 早く >>222 の contracts を正式採用してほしい
2020/02/04(火) 18:47:00.52ID:XAK/YcTO
Goは標準ライブラリが洗練されてない感じがする
2020/02/04(火) 21:23:46.96ID:U30pp8jN
go言語って糞じゃね馬鹿じゃね
2020/02/04(火) 21:32:43.59ID:U30pp8jN
結局みんなと同じようにRuby on RailsとかPHPやっとけばいいんじゃねえのか
人と違うことしてる俺様かっこいいみたいなデスクトップのLinux使ってよく分からないエラー出ながら使ってる奴とか
そういうことじゃねえのかポインタとかスライスとか糞
[]xxxと[]*xxxをAPIのレスポンスで返したら同じjsonが返ってくるとか糞
普通ポインタの配列なんだからアドレスの羅列が返ってくるんじゃねえんか
マジ糞言語
2020/02/04(火) 21:58:02.63ID:zLczLA6F
スクリプト言語ならpythonじゃないの今は
2020/02/04(火) 22:07:10.93ID:Z75ak/G2
goはあちらこちら洗練されてない。存在としては好きなんだがなぁ。
2020/02/04(火) 22:19:47.96ID:/eeo/zhy
洗練されているプログラミング言語ってあるのか?
2020/02/04(火) 22:39:33.05ID:Bi0juC3i
矛盾が少なくて必要最小限の仕様しかない、という意味ならC
だから未だに現役なわけで
俺はJavaScriptが好きだけど
JSもCと同様Alt-JSが大量に発生したものの殺しきれなかった、という意味ではある程度洗練はしている
言語としての問題は typeof(null)==="object" 位
2020/02/04(火) 22:49:15.87ID:U30pp8jN
やっぱgoに使い慣れている人でも糞だと思ってるんだな
2020/02/05(水) 00:01:28.88ID:+M89QQ88
>[]xxxと[]*xxxをAPIのレスポンスで返したら同じjsonが返ってくるとか糞
ちょっと意味がわからないけど、要するにポインタレシーバでのインターフェースで実体も受け取れるという話じゃないかと思うんで同意
すんごくブッ飛んでるよなあれは……
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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