Go language part 4

■ このスレッドは過去ログ倉庫に格納されています
2020/11/16(月) 04:14:40.64ID:fB5+0hxC
Goについて扱うスレッドです。
GoはGoogleによって開発された言語です。

公式
https://golang.org

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

公式外パッケージドキュメント
https://godoc.org

ブラウザ上で試し書き
https://play.golang.org


※前スレ
Go language part 3
https://mevius.5ch.net/test/read.cgi/tech/1571315884/
2020/12/23(水) 23:55:24.14ID:GvbKZ216
>>203
正規表現そんな遅いんだっけ?
Goだと文字列メソッド使うからあんまり気にしてなかったわ
2020/12/24(木) 03:36:46.49ID:ieyHo1hw
>>204
アルゴリズムでは決して遅くないが、DFAを再利用するために排他制御するので並列処理で遅くなるとのこと
https://qiita.com/momotaro98/items/09d0f968d44c7027450d
2020/12/24(木) 04:26:45.03ID:yxJlqEyC
そんな排他制御してるのか
本末転倒じゃねえか
2020/12/24(木) 04:28:11.75ID:yxJlqEyC
>>202
もう出て10年くらい経ってるんだよな
大きな新機能の追加も無さそうだし
パフォーマンスを極めるフェーズになってるから話題ないねえ
2020/12/24(木) 05:41:11.22ID:jgmFKpNF
例外がないif err言語さん……w
2020/12/24(木) 07:24:03.78ID:ieyHo1hw
例外キボンという声は聞いたことないから、やはり
今時例外なのプークスクスとみんな思ってると考えていいかな?
2020/12/24(木) 08:28:54.70ID:7F4cW8XH
いいよ。
2020/12/24(木) 08:40:06.16ID:QpUzPsdF
コストの高い例外フロー制御はともかく、
例外専用の戻り値は欲しいわ。
2020/12/24(木) 09:35:28.02ID:ieyHo1hw
Javaのだと、シグネチャに無い例外を返せないからインターフェースとして呼ぶのに困るし
C#のだとガバガバ
結局、実際には何が帰るのか分かりませんとなってカスタムしたExceptionで受ける一択
更にそのため常にメソッド内でカスタムExceptionにラップするためのcatchを書かないとならんし
面倒すぎたよね例外(過去形でかくな
2020/12/24(木) 16:16:26.58ID:yxJlqEyC
コールスタックを一気にジャンプするとかおぞましいことはいらないよ
単なるgotoだし
2020/12/24(木) 18:05:24.14ID:z4h3nURn
if err書いて回るのに比べればgotoのほうがマシでしょ
それにコールスタックを一気にジャンプするのは言語による実装の詳細で必須事項じゃないよね
2020/12/24(木) 18:07:54.69ID:ieyHo1hw
マシとは思わないから文句が出ないんだよねー
2020/12/24(木) 18:11:34.30ID:ieyHo1hw
文句が出てないという根拠は、そこそこちゃんと使っている人からの不満点として見たことが無い、というもの
反証は受け付ける
2020/12/24(木) 18:21:35.08ID:fJ8Afd/q
✕Golang
○IfErang
2020/12/24(木) 19:41:05.61ID:grZRkp5b
deferがあるぞ
2020/12/24(木) 21:25:43.87ID:YakLuvNb
googleって地図だけの一発屋やな
2020/12/24(木) 21:30:49.79ID:ieyHo1hw
突っ込み所しかなくて、えー頑張ってね
きっと良いこともあるよ
2020/12/24(木) 21:59:07.90ID:NCBnjOT7
err頑張ってね
2020/12/24(木) 21:59:59.67ID:ieyHo1hw
var exp = flag.Bool("exp", true, "export")
で、-exp false しても *exp が false にならん
どこを間違えてるのか
223デフォルトの名無しさん
垢版 |
2020/12/24(木) 22:32:45.42ID:ieyHo1hw
https://play.golang.org/p/gcNo0xC4tUj

exp:true, CommandLine:&{0x4a6ee0 /tmpfs/play true map[exp:0xc000108040] map[exp:0xc000108040] [false] 1 <nil>}
2020/12/24(木) 22:34:38.12ID:yxJlqEyC
Win32 APIもエラーコードチェックばっかやらなきゃいけない
それと大して変わらんよ
低レイヤーのプログラミングはいつも同じ
2020/12/24(木) 22:49:24.53ID:ieyHo1hw
判明というか多分バグ
他のフラグは
-cred admin.json
とかの形式で取り込めるけど、
expは(多分flag.Bool()は)
-exp=false
と指定しないと取り込まれない
2020/12/24(木) 22:54:47.90ID:ieyHo1hw
ああ?go documentで検索したら、non-boolean only
仕様なの?何で?because the meaning of the command?
2020/12/24(木) 23:00:26.57ID:ieyHo1hw
文字列で取り込んでbooleanに変換しなきゃならんのか
めんどくさい……
228デフォルトの名無しさん
垢版 |
2020/12/28(月) 21:09:09.98ID:Rt6RXU1L
goオワコン?
2020/12/28(月) 21:15:09.97ID:1wnarVmc
go routine リーク周りはまだ話があるんじゃないの?
230デフォルトの名無しさん
垢版 |
2020/12/28(月) 22:36:34.04ID:Rt6RXU1L
>>222
デフォルトtrueのフラグパラメータって設計が良くない気がするなー
俺なら、-disableExport(デフォルト:false)って引数にするかも。で指定するときは、
go run main.go -disableExport
って感じでtrueとか、falseとかつけないかなー。なぜならフラグ指定してる時点で「true」だから
2020/12/28(月) 23:28:27.07ID:w2tkTAcI
>>228
必須スキルだよ?
232デフォルトの名無しさん
垢版 |
2020/12/28(月) 23:52:44.50ID:Rt6RXU1L
>>231
だよね
go好きだから.........
2020/12/29(火) 08:01:29.87ID:pjgVtImx
>>229
https://qiita.com/kawasin73/items/7f04b2943bdbb7588c3e
でも筆者が勘違いしていたので、単に一度ヒープから確保したメモリはヒープのプールに入るため取得されたまま、になってただけと訂正入ってる

ヒープが利用終わったら解放されると思い込んだ勘違いという結論になったのでは?
2020/12/29(火) 08:40:46.55ID:+jeJmMuS
>>233
いやそういうリークじゃなくて、正確にはチャンネル待ちリークというかそういう感じの話。
2020/12/29(火) 09:02:37.84ID:pjgVtImx
待ちなのにリークなん?
送ったはずのチャネル通信が届かない事案だとしたら、それは通信の問題でリークじゃないよね
2020/12/29(火) 09:27:45.67ID:+jeJmMuS
いやだから通信の問題で実質リークというかgoroutineが溢れるって話をしてるんだが。。
kube並の大きさのプログラムで発生したらデバッグできんの?って話をしてるんだよ。
2020/12/29(火) 11:28:39.38ID:pjgVtImx
チャネル送信が送られないなんて報告があるの?
と言ってる
2020/12/29(火) 18:59:11.37ID:SyBq36e1
…ゴルーチンが溢れるって何や?
2020/12/29(火) 19:07:08.67ID:pjgVtImx
検索しても233にある誤解が原因だった記事くらいしか見つからなかったから、具体的な記事のリンクを張ってくれるのを待ってる
2020/12/29(火) 19:42:26.61ID:LSI+C1uB
ゴルが解放されないって話なら永続リソースとかを
掴んだまま離さないとかそういうお行儀の悪いプログラムしてるからだよ
動的言語と同じ感覚でプログラミングするとそういう痛い目にあう
2021/01/02(土) 23:36:52.65ID:hnNoCPhn
goって終わったよね?
2021/01/02(土) 23:51:01.94ID:hutYk629
無理に使おうとしなくてもええんやで
ウチはインフラ部分はほぼgoに置き換えてる
でもc#の方がすこや
243デフォルトの名無しさん
垢版 |
2021/01/03(日) 02:43:46.82ID:965qc4Vx
>>241
rustの時代とは言われてる
2021/01/03(日) 03:00:10.23ID:Mk7RJK9u
終わってないが、始まってもない
2021/01/03(日) 03:00:59.89ID:j7drLdmA
もっと流行るかと思ったけど全くだよな
やっぱ言語仕様に癖がありすぎる
2021/01/03(日) 11:13:21.86ID:9SkeDBIZ
癖っていうか糞仕様が多い
いまどきこれ??みたいな
247デフォルトの名無しさん
垢版 |
2021/01/03(日) 11:48:40.90ID:ez188GTZ
国内でのGo普及活動家の母体メルカリのGoエンジニアたち全然情報発信しなくなってて草
2の対立とか、そもそもの言語仕様の酷さとかに気づいたのかな
2021/01/03(日) 16:34:24.05ID:j7drLdmA
>>247
最近ソフトウェアデザインに記事書いてたよ
レベルがクソ高くてますます初心者置いてけぼりだろうな
249デフォルトの名無しさん
垢版 |
2021/01/03(日) 16:44:28.91ID:965qc4Vx
goって、特定の構造体が目的のインターフェース実装してるか見分けるのむずくない?みんなどうやってるの?
250デフォルトの名無しさん
垢版 |
2021/01/03(日) 17:38:40.24ID:PgQRe2mf
>>249
https://play.golang.org/p/0MGZkqhS6Oe
こんな感じでエラーチェックしてるかな

./prog.go:20:2: cannot use &StrE literal (type *StrE) as type IStr in assignment:
*StrE does not implement IStr (missing Func2 method)
./prog.go:21:2: cannot use &StrE2 literal (type *StrE2) as type IStr in assignment:
*StrE2 does not implement IStr (missing Func method)
2021/01/03(日) 17:46:07.51ID:PgQRe2mf
前スレのこれは対応してほしい……

https://play.golang.org/p/XRFmBiqhqJp

インタフェースAを返すメソッドを持つインタフェースB。

そのメソッド実装がインタフェースAを実装しているポインタを返しても、

./prog.go:34:4: cannot use &Base literal (type *Base) as type IBase in assignment:
*Base does not implement IBase (wrong type for Sub method)
have Sub() *Sub
want Sub() ISub

と、インタフェースAを返しているとは認められない。
252デフォルトの名無しさん
垢版 |
2021/01/03(日) 19:26:43.94ID:965qc4Vx
>>250
え、ビルドするまで分からないってこと?クソ面倒じゃない?
あと、ってことはパッと見ただけじゃやっぱ分からんってことかー。。
253デフォルトの名無しさん
垢版 |
2021/01/03(日) 19:29:01.30ID:965qc4Vx
あ、でもそれなら実装漏れに最低ビルド時に気づけるってことか
たしかにその方法良いですね。真似します。
2021/01/05(火) 01:56:09.22ID:RVMSJAuG
>>248
気が向いて買って読んでみたけど
たいした内容じゃなかたぞ
2021/01/06(水) 15:29:01.20ID:/bMEAqVx
GODOTってゲームの開発環境あるんだがGOなのかと思ってたよ
2021/01/06(水) 15:39:08.43ID:9b/ixvsd
>>253
一番の利点は、メインのないライブラリプロジェクトでメソッドの実装ミスを検知できること
テストでもいいんだけど、漏れとか
257デフォルトの名無しさん
垢版 |
2021/01/06(水) 19:57:45.35ID:6LFK/57e
>>256
外部のパッケージ内で、目的のインターフェースの実装探すときどうしてる?
ideとかで実装済みクラス一覧見れたりできるのかな
2021/01/06(水) 22:46:22.85ID:RqNhj0Vs
>>255
名前の元ネタはゴドーを待ちながらだよ
2021/01/08(金) 10:42:43.33ID:SFYEeLwk
VScodeでgo.modがパッケージ更新できなくて悩んだ
結局コマンドラインから go get -u で取得したら GOPATH /pkg/mod/... に最新版が取得できた
VScodeのgo拡張って変な動きとかするなぁ
2021/01/10(日) 08:45:10.91ID:tmTVLRQU
ubuntuのi386って、もしかして32bit?
goをインストールして動かそうとしたらファイル形式エラーで実行できなかった
i386捨ててamd64でやりなおし
2021/01/10(日) 10:53:20.77ID:tmTVLRQU
>>260
amd64をインストールし直したら動いた
2021/01/10(日) 11:16:28.28ID:tmTVLRQU
ものすごい当たり前の落とし穴なんだけど
os.MkdirAll() で os.ModeDir だけ指定してたら、Linux に行ったら権限不足でファイルを読み書きできなかった
アホか自分は!当たり前すぎるわ!orz
263デフォルトの名無しさん
垢版 |
2021/01/13(水) 02:41:40.78ID:LRQMEOBI
goエンジニアって0.5割ぐらいの超人エンジニアがいて、残りはマジでカス未満のエンジニアしかいなくないか?
ライブラリよく作ってるようなエンジニア以外の業務コード見たら吐き気するんだが同士おる?
2021/01/13(水) 02:44:08.87ID:atGCk1//
>>263
それ何系の会社?
メルカリ界隈じゃないよね?
2021/01/13(水) 03:39:37.52ID:uZRkh4HP
Ruby/Go の神、Vagrant, Terraform, Packer の作者、
今世紀最大の起業家、HashiCorp のMitchell Hashimoto

皆、彼を参考にしてる
2021/01/13(水) 05:37:10.83ID:vmn8olpj
>>265
お前KENTAガイジやろ?
ここでクソみたいな宣伝すんなボケ
2021/01/13(水) 08:37:45.48ID:5GOPYdWB
>>266
KENTAって誰ですか?
貴方のせいで検索して動画を再生してしまいました
貴方のせいでKENTAさんに収益が発生しました
2021/01/13(水) 08:52:35.47ID:u6YyMdJS
>>263
それ〇〇エンジニアの全てが同じ状況だろ、それとも〇〇言語だと超人が増えるのか?
2021/01/13(水) 10:02:18.24ID:edoUNcFJ
RubyをNGすればケンタガイジも自然に消えるよ
Go使いならRuby触ること無いから問題無いっしょ
2021/01/13(水) 12:07:29.42ID:GhxYbqoB
ルビィ/Go の神、Vagrant, Terraform, Packer の作者、
今世紀最大の起業家、HashiCorp のMitchell Hashimoto

皆、彼を参考にしてる
2021/01/13(水) 22:08:57.53ID:lYKbR8rO
KENTA
HashiCorp

KENTAガイジ対策として上記単語をNGワード設定しておきましょう。
プログラム板で二度と不快な投稿を目にしなくてすみましゅよ。
2021/01/13(水) 22:49:31.14ID:mK+3gZUP
あとrubyのNG登録が浸透してしまったからか最近ルビィて書いとるぞそいつ。
ルビィもNG登録や。
2021/01/14(木) 02:30:53.33ID:4quR9ect
Linuxはinotify、WindowsはWMIを使ってディレクトリへの更新を検知してくれるパッケージって出来ないかな
iOSにも同じような機構はあるだろうし
2021/01/14(木) 06:04:18.90ID:AIfhUXVU
ル・ビぃ/Go の神、Vagrant, Terraform, Packer の作者、
今世紀最大の起業家、ハシCorp のMitchell ハシmoto

皆、彼を参考にしてる
2021/01/14(木) 07:09:01.73ID:E+SJr/XS
あーあ、意固地になっちゃった
お前らガイジ揶揄うのもほどほどにしとけよ?w
2021/01/14(木) 07:12:10.46ID:iNbGwVKU
猫シCorp
2021/01/14(木) 08:03:13.12ID:mp+NLhBe
>>275
元々価値の無い駄文を垂れ流して鬱陶しかったけど、日本語としてすら意味をなさなくなれば目に入ってもスルーしやすいからこれはこれでいいような気がするw
2021/01/14(木) 08:11:02.02ID:AIfhUXVU
>>277
効いてて草

ル・bi、、、ィ

ル、b・ィ
2021/01/14(木) 08:11:43.95ID:1yd08R70
>>275
NG出来なくてくやちーねーwwwwww

ruuu!biii最強!!!!wwwwwwwww
2021/01/14(木) 11:50:14.05ID:hXZPMCaj
推奨NGワード:
の神
起業家
参考にしてる
2021/01/14(木) 13:53:19.60ID:Se9utFzt
ル・bぃ/G,o のG,od、Vag_rant, Terr_aform, Pac_ker の作者、
今世_紀最大の起_業家、ハシCorp のMitケル ハシmoto

皆・彼を参考にしてる
ル・ビぃ/G,o のG・od、Vagrant, Terr_aform, Pac_ker の作者、
今_世紀最大の起_業_家、ハシCorp のMitchell ハシmoto

皆_彼_を参_考にしてる
2021/01/14(木) 14:07:06.27ID:QYOIxwgk
もはや出会い系のスパム並みの印象になっちゃってるから、色々逆効果だぞ。
2021/01/14(木) 14:20:45.98ID:mp+NLhBe
狂人のすることは分からんなw
2021/01/14(木) 15:27:15.99ID:neKmd3sr
ruby is God
2021/01/14(木) 19:21:51.56ID:ToTdZAIR
糖質をイジメるな!!
2021/01/14(木) 20:11:58.10ID:VN42fcD2
R u b y 
   G o  の 神

Vagrant, Terraform, Packer の作者


★今世紀最大★の★起業家★

HashiCorp のMitchell Hashimoto

皆 、 彼 を 参 考 に し て る
2021/01/14(木) 22:26:27.13ID:Bnzn5h4u
火病るガイジを虐めて愉しむ冬の夜
2021/01/14(木) 22:43:56.58ID:VN42fcD2
キモオタプログラマー君はみんなから虐められてるけど……
2021/01/14(木) 22:47:16.08ID:VN42fcD2
学生の頃、眼鏡かけた気持ち悪いブス虐めて遊んでたけど
大人になるとそういう奴らがネットで暴れるんだな
俺が植え付けたトラウマは大きかったんだな
青葉みたいにはなるなよ……
2021/01/14(木) 23:28:29.98ID:mp+NLhBe
Ruby君が日本語の文章っぽいものを書いてるのを初めて見た気がする。
中身はともかくとして。
2021/01/14(木) 23:29:44.90ID:nxZv0xP1
そいつはタダのなりすめし
2021/01/14(木) 23:42:03.90ID:X9SM/m5M
なりすましじゃないのは最初のやつだけでしょ
2021/01/15(金) 01:00:12.28ID:5E/tucpK
なりすましという事にしとこうぜw
294デフォルトの名無しさん
垢版 |
2021/01/15(金) 15:42:02.84ID:uPQddvH2
goの文法教えて

if a, b := c.(*d.Foo); b && o.Bar() {
 ・・・
}

これは2つの変数 a, b に代入ってことであってる?
c.(*d.Foo) この部分がよくわからない
セミコロンは単に2つの式を入れるためだけのもの?
295デフォルトの名無しさん
垢版 |
2021/01/15(金) 16:10:06.13ID:CBMjbZAp
>>294
Type assertions ね
https://golang.org/ref/spec#Type_assertions

こんな感じに使う
https://play.golang.org/p/AupUP2aCZ5c

d はパッケージ名だろうし、o は普通は a のはず
2021/01/15(金) 16:18:33.58ID:CBMjbZAp
>>294
ざっくり説明すると、これはいわゆる型キャスト
b に型の変換が成功したのか論理値で代える
; 以降が if の判定に使われる論理式
むしろ ; 以前が特殊で、ここで返ってきた変数は {} の中だけで使える
a は Foo へのポインタなので、Foo のメソッドを呼べる
2021/01/15(金) 21:19:06.47ID:uPQddvH2
ありがとう。他と違う文法はよくわからんw
2021/01/15(金) 21:57:56.53ID:CBMjbZAp
C や Java とかでも for (int i=0; i<5; i++) {} と作成した i は{}の中だけで有効
それとノリは同じ
C#のusingやら、そういう特殊な構文はどの言語にもある

無理やりキャストするのではなく、キャストできない場合の判定がある分、他の言語よりもいくらか安全
この系統には map のインデックスアクセスがあり
if value, ok := m[key]; ok {
……
}
キーが無ければ ok には false が返る
299265
垢版 |
2021/01/15(金) 22:03:24.03ID:MomngUWn
Vagrant の作者、HashiCorp のMitchell Hashimoto もそうだけど、
皆、Ruby → Go がキャリアパス

メルカリ、カヤック
KENTA、るびきち、mattn

Ruby コミッターが多い、Cookpad、マネーフォワード、Ruby 開発
2021/01/15(金) 22:13:27.50ID:Al0jsoYD
基地外にレスするつもりはなくて純粋に気になるんだけど、
RubyからGoに乗り換えた奴なんてそんなにいるのか?
俺の知ってるRubyist達はRubyしか知りませんやりませんマイクロサービス何それ食えるのって感じでGoとは遥か遠い連中だわ
GoはJava系かNodeやPythonから来る人が多い印象だな
2021/01/15(金) 22:39:25.05ID:v2N1LTYS
vscodeでステップ実行してる時に値を見ると+xxx moreになるけど全部見たい場合はどうすればいいねん
302265
垢版 |
2021/01/15(金) 23:02:37.95ID:MomngUWn
Ruby on Rails で、スノーボードのサイトを作っていた、
Shopify の時価総額は、今や15兆円

Amazon は150兆円だけど、このままじゃ抜かれると、ライバル視してる

米国年収では、ついに、サーバー構築運用資格がRails を抜いた。
AWS ソリューション・アーキテクトが、1,500万円
VWware が、1,400万円

Rails が、1,300万円
Node.js が、900万円
ただし、Nodeの求人数は、Railsの2倍ある

Rubyでも、Shopifyアプリを作ったり、AWS Lambda, CloudFormation とか、色々な仕事があるけど、
速度重視のものは、Go へ行くだけ
2021/01/16(土) 01:44:07.71ID:xzsyPdU6
ゴルーチン使いすぎてasync忘れてもうた
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。