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/
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忘れてもうた
304デフォルトの名無しさん
垢版 |
2021/01/16(土) 01:46:47.49ID:1yiOpWx6
GoはPythonからのイメージすっごいある
2021/01/16(土) 13:44:55.45ID:D2Bsg9bU
go1.16にちょっと興味が出た
ファイル埋め込みをサポートしてくれるのか
2021/01/16(土) 16:32:55.26ID:D2Bsg9bU
//go:generate って自動でコマンド実行させられるけど、この機能のセキュリティの資料ってどこ?
ビルドはユーザー権限で動かすからサンドボックスとか無し?
2021/01/16(土) 22:52:44.09ID:WbzMKQxD
セキュリティに対するケアなんか何もないよ
そもそも何のチェックもなくGitHubから直接パッケージを入れる仕様なんだから、
パッケージ作者がその気になればgo:generate云々以前に利用者のビルド成果物のバイナリに対してマルウェアを仕込むことすら造作もない
パッケージを入れるときには作者を全面的に信頼しそういう重大なリスクを受け入れていることを忘れてはいけない
308デフォルトの名無しさん
垢版 |
2021/01/19(火) 22:24:32.58ID:+d4lPwTs
なんか会社のPCで WSL+Ubuntu に Go をインストールしたら、こんなエラーになって使えなかった

$ go version
go version go1.13.8 linux/amd64
$ go get -u golang.org/x/text
go: extracting golang.org/x/text v0.3.5
go get: rename /home/hoge/go/pkg/mod/golang.org/x/text@v0.3.5.tmp-022669236 /home/hoge/go/pkg/mod/golang.org/x/text@v0.3.5: permission denied
2021/01/20(水) 01:17:35.14ID:Rdh9isrB
ぐぐったらgoのバグみたいね
310デフォルトの名無しさん
垢版 |
2021/01/20(水) 01:39:00.63ID:sgAeHwon
これだからWSLは...
2021/01/20(水) 01:44:37.61ID:Rdh9isrB
やっぱり出てきたか、デマ吐き
2021/01/20(水) 10:21:29.47ID:sOzWFlEJ
Windows 10 Home でも出来るようになった、

WSL2 で、Docker でも使えば?
313デフォルトの名無しさん
垢版 |
2021/01/20(水) 23:51:09.81ID:houPsxKw
go1.16 がまだ出てないから statik 使ってるけど、コマンドラインから
go run github.com/rakyll/statik -f -src=static
叩くと、NISが

カテゴリ: 解決したセキュリティリスク
日時,リスク,活動,状態,推奨される処理,パス - ファイル名
2021/01/20 23:38:45,高,statik.exe (SONAR.SuspScript!g3) が SONAR によって検出されました,\
削除しました,解決しました - 処理の必要はありません,c:\Users\hoge\AppData\Local\Temp\go-build742135550\b001\exe\statik.exe

と容赦なく抹殺に来るんでバッチファイルから作成できない
トホホ

VScode からは実行できるんだけどなぁ
何が違うんだろう
314デフォルトの名無しさん
垢版 |
2021/01/21(木) 01:16:44.85ID:6tk1Snw3
あわしろ氏がDockerはオワコン、これからはWSLと言ってる。
2021/01/21(木) 03:04:48.79ID:084E4D0G
推奨NGワード:あわしろ
2021/01/21(木) 05:13:54.11ID:pnbRvl8z
推奨NGワード:NGワード
317デフォルトの名無しさん
垢版 |
2021/01/21(木) 05:17:47.11ID:6tk1Snw3
イクヤさんを馬鹿にしてんのか?
2021/01/21(木) 07:41:51.93ID:JXSnM7xR
>>317
バカにされているのはお前自信だぞw
2021/01/21(木) 10:36:56.38ID:9HZQp01R
>>301
これ教えてくれや
320デフォルトの名無しさん
垢版 |
2021/01/22(金) 23:26:34.48ID:vuLukHTi
goのパッケージで、全然違う役割で同じパッケージ名つけなくなったときみんなどうしてる?
2021/01/22(金) 23:47:27.87ID:clRMgbeK
apiwrapper2
apiwrapper3
saigo_no_apiwrapper
apiwrapper_final
こんなかんじで
322デフォルトの名無しさん
垢版 |
2021/01/24(日) 02:37:19.18ID:49bdBtsk
>>321
そうかぁ...なんだかなぁ
323デフォルトの名無しさん
垢版 |
2021/01/24(日) 04:02:02.83ID:hPeuQsPP
イクヤさんはバカじゃないぞ。
ただの嫌な奴だ。
324デフォルトの名無しさん
垢版 |
2021/01/24(日) 19:31:46.17ID:tQo0lqIt
import (
zenzen "xxx.com/omae/package"
chigau "xxx.com/aitsu/package"
)
325デフォルトの名無しさん
垢版 |
2021/01/24(日) 22:40:05.67ID:49bdBtsk
>>324
いや、自分が作ってるアプリ内でパッケージが被りそうな場合ですー
2021/01/24(日) 23:29:36.37ID:1VpxryXU
>>325
自分でも同じじゃないか?
327デフォルトの名無しさん
垢版 |
2021/01/25(月) 18:17:56.09ID:d/3tjDJa
>>326
たとえば、

package encrypt

っていう、APIの通信を暗号化するパッケージを自分で作ったとして、あとからユーザーがアップロードした画像を暗号化する処理作りたくなったとき、また

package encrypt

ってつけたくなるけど、最初に作ったAPIを暗号化する処理向けにすでに「encrypt」って使われてるからどうしよーってなるって話ですね

package apiencrypt
package userimageencrypt

にするのが普通ですか?
2021/01/25(月) 18:55:36.51ID:ViKOXBu7
>>327
いや、同時に使用する場合でも>>324さんの言うようにエイリアスで区別してインポートして使えばいい
例えば標準パッケージのnet/httpに対して、サブリポジトリにもgolang.org/x/net/httpがあったりとか、実験的実装でも同じパッケージ名をつけたりしているし
329デフォルトの名無しさん
垢版 |
2021/01/25(月) 19:17:10.86ID:d/3tjDJa
>>328
いや、importするときの話ではなくて、実装する時の話です!
ちょっとあとでサンプルコード用意しますね!!
2021/01/25(月) 20:10:27.92ID:ViKOXBu7
>>329
だから公式でもやってるから気にするなw
2021/01/25(月) 21:54:18.14ID:SeLyUu4E
何がそんなに嫌なんだ?
2021/01/25(月) 22:12:50.28ID:yfUr2T9s
単にエイリアスのことを理解してないだけでは?
333デフォルトの名無しさん
垢版 |
2021/01/25(月) 23:54:29.57ID:d/3tjDJa
すいません、僕のエイリアスの理解が間違ってました。↑でみなさんが言ってることが正しいです。
意味不明な事言って、誠に申し訳ありませんでした😳
334デフォルトの名無しさん
垢版 |
2021/01/26(火) 00:02:10.18ID:7TBhA+72
このスレでgolangのモヤモヤが一つ解消できました。本当にありがとうございました。
2021/01/26(火) 01:18:09.44ID:84lZ6EGP
別にgolangだけじゃなく他の言語もほぼ同じ仕様だぞ
2021/01/26(火) 02:03:46.73ID:wg8lZWjJ
意外と素直なやつで気にいった
337デフォルトの名無しさん
垢版 |
2021/01/26(火) 15:48:34.40ID:7TBhA+72
>>335
別ディレクトリの同一パッケージ名つけちゃうと、同じパッケージという扱いになると勘違いしてました。
ディレクトリが違えば、ちゃんと別パッケージ扱いになるんですね
2021/01/26(火) 19:32:50.53ID:QK4hy34A
公開したアプリの機能追加しようとしたらgolintがまたゴネはじめた
調べるともうdeprecatedが可決されてるんだな
Apiと書くとAPIにしなきゃ絶許とかアホな子なんで困る
2021/01/26(火) 19:41:08.73ID:QK4hy34A
すなおにgolangci-lintに切り替えた
2021/01/27(水) 15:46:00.33ID:dNCRGAZL
最近素直な人多いね🤗
2021/01/27(水) 19:26:08.32ID:D9j7gzMM
素直に尿道オナニーした
342デフォルトの名無しさん
垢版 |
2021/01/27(水) 20:43:24.94ID:Qr3ry02h
>>341
素直やなあ
2021/01/30(土) 20:27:47.43ID:Vt3mM499
ごー言語ってどんなメリットがあるの?
2021/01/30(土) 20:40:40.31ID:qJyO6h8a
高速なWebAPIが超楽に作れる

あとは、慣れるとスクリプト代わりに使える
345デフォルトの名無しさん
垢版 |
2021/01/31(日) 00:23:18.15ID:v0/+r0AQ
実行環境側で準備がいらないから、ちょっとしたツールとか作って人に配ったり、サーバーで実行したりしやすい
2021/01/31(日) 02:08:30.36ID:sEqffcUE
linuxとwindowsで動かすツールにjava使ってたんだけど
少しづつGoに移植してる
かなり良い感触
ついにjavaを捨てられる
2021/01/31(日) 02:54:28.37ID:pT/gblY8
>>345
それがあったか!

あとgithubからcloneしてこなくても go run できるのは意外と便利


でもこないだ statik を run したらノートンが怒って temp に作成された statik のイメージを問答無用で削除
build して実行したら動くから、temp にある exe がローカルディレクトリのファイルに書き込みするとヒューリスティック検知が危険と判断してるんだな、多分
348デフォルトの名無しさん
垢版 |
2021/02/03(水) 21:45:23.85ID:CpFR0HHF
>>347
> あとgithubからcloneしてこなくても go run できるのは意外と便利

これどゆこと??
2021/02/03(水) 22:46:07.77ID:KfiW2k04
>>348
この例だと statik を使うとき、go.mod に github.com/rakyll/statik を追加しとくじゃない
ここで、statik でファイルを固めるために statik コマンドをビルドしなくても
$ go run github.com/rakyll/statik -f -src=static
と打つと実行できるの

でもノートン入れてると危険な動作だと判断されるんで、run じゃなく build して実行ファイル作らないとダメだった
350デフォルトの名無しさん
垢版 |
2021/02/03(水) 23:03:33.06ID:KfiW2k04
このテクニックは
https://qiita.com/yaegashi/items/d1fd9f7d0c75b2bb7446#%E3%82%B5%E3%83%BC%E3%83%89%E3%83%91%E3%83%BC%E3%83%86%E3%82%A3%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89%E3%82%B8%E3%82%A7%E3%83%8D%E3%83%AC%E3%83%BC%E3%82%BF%E3%82%82-go-run-%E3%81%A7%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B
で知った
351デフォルトの名無しさん
垢版 |
2021/02/04(木) 00:47:53.46ID:J8c7zBiK
>>349
ほーー!これ知らなかった。有益な情報ありがとう!
2021/02/06(土) 07:34:59.64ID:b91D85Wz
importで現在のpackage宣言からの相対パスが使えなくなったのはクソ仕様変更だと思う
おのれ Russ Cox
2021/02/06(土) 07:40:15.26ID:b91D85Wz
具体的に恨んでることは、あるサイトのコードを使い回して別のサイトのコードを書くとき、import を全部修正しなきゃならん
というかしてる
Linux ならまあ sed で置換すればなんとかなると思うけど、Windows で開発してるし
2021/02/06(土) 07:42:46.96ID:b91D85Wz
あ、元のサイトの一部のコードは使い回すために go get して import してるから、sed でも面倒だわコレ
2021/02/06(土) 07:48:05.22ID:b91D85Wz
なんか上手いことやってくれるツールってあるの?
2021/02/06(土) 10:01:04.65ID:3JTS0SZe
タダで使わせてもらってるくせに糞とか恨むとか
そういう心根だから日本はソフトウェア技術で海外に負けるんだよ
2021/02/07(日) 03:51:41.73ID:XZf/W+8m
タダで使わせてもらってるじからって大人しくしてるほうが進展しないと思うよw
もちろん活発にフィードバックが最善だが
2021/02/07(日) 17:49:54.31ID:7CsMj5zJ
趣味でいじってて、検索に使うAPIを作ろうとしてるんだけど
関数の動的な引数について

ぐぐると出てくるFunctional Option Patternってどれくらい使われてるのかね
structをポインタで渡す(nil判定のため)でいいかなと思い始めてるんだけど
2021/02/07(日) 19:19:28.11ID:ChxxRz8n
>>358
たまに見るけど、エディタのコード補完と相性悪くてどんなオプションがあるのかがクッソ分かりにくい
個人的には大嫌い
360359
垢版 |
2021/02/07(日) 19:21:38.26ID:ChxxRz8n
Functional Optionの話ね
補足
2021/02/07(日) 19:31:24.83ID:9kVjsnaW
structをポインタで渡すという一文で、わかってるのかな?という疑念が
FOP はざっくりと、アレンジする対象のオブジェクトを受けて内容を好きに設定する関数を、引数として渡す手法

ここでその関数の引数に対象structのポインタじゃなく実体渡しで受けるようにすると、コピーを書き換えちゃう事になるから設定しても動かない
ポインタで渡す以外の話にはならない
2021/02/07(日) 19:38:47.51ID:9kVjsnaW
もしかしてstructをというのは、FOPではなくオプション用のstructを用意するという話か
2021/02/07(日) 21:18:42.15ID:7CsMj5zJ
>>359-360
どもども
サンプル見ても、準備する関数とか増えるから
スコープのためにimportのためにディレクトリのネストもう一個深くしないときついかなとか
色々めんどくさそうだった

>>362
そういうことです
手法として
・そもそも関数を別に切ってしまう(一番簡単だけどメンテがめんどい)
・引数を関数のために定義したstructのポインタにする
・FOP
という3つが挙がってた
2021/02/08(月) 14:27:57.38ID:UNTBzX6A
13年目のGo言語 - Steve Francia氏との対話から見えたそのエコシステム、進化、そして未来
https://www.infoq.com/jp/articles/go-language-13-years/
2021/02/10(水) 23:54:39.22ID:yW2IX31f
18か月毎に、Goのユーザベースは2倍に膨れ上がっているのです。これはつまり、今日行われる変更は、5年前に比べて10倍の人々に影響を与える、という意味になります。
2021/02/10(水) 23:55:51.44ID:yW2IX31f
Goが現在備えている依存管理は素晴らしいものですが、おそらくは5年前に実現するべきものでした。
この遅れが難しい問題をより難しくして、結果的に必要以上のストレスをコミュニティに起こしているのです。

同じように、現在開発を進めている大きな言語変更がジェネリクスです。これもコミュニティに大きな影響を与えるでしょう。
もし最初からすべてをやり直すことができて、この機能がいかに重要かを事前に理解しておくことが可能だったならば、おそらく7年前から本格的な開発を始めておきたかった、と思っています。
2021/02/10(水) 23:56:43.35ID:yW2IX31f
言語として不足している唯一の大きな機能はジェネリクスです。先程も話したように、現在はこの開発に注力しています。
2021/02/10(水) 23:58:38.65ID:yW2IX31f
・Goは優れた既定言語(default language)で、システムやサーバ、API、デーモン、データベース、Webサイトなどに適しています。Goはパフォーマンスと開発者の生産性を、高いレベルで両立させています。

・Dart + Flutterは、GUIベースアプリケーション(モバイルおよびデスクトップ)に適しています。Flutterは、複数のOSとフォーマットで動作する単一クライアントアプリケーションの記述というアイデアを、高いレベルで実現しました。

・Rustは、詳細なコントロールが必要な場合に適しています。低レベルな処理やカーネルなどです。Rustは精密性に優れていますが、その分、複雑さは大きくなります。このトレードオフが理に適っている場合もあります。そうであれば、Rustが最適です。
2021/02/10(水) 23:59:45.15ID:yW2IX31f
Goは1度の週末で学べますし、2週間あればプログラミングに習熟することができます。もっと早い人もいるでしょう。他のいくつかの言語で経験があれば、Goは非常に短期間に習得できます。

Goを導入した企業と会った時に、彼らが一貫して話してくれることのひとつが、Goは習得の容易な言語だ、という点なのです。
2021/02/11(木) 02:00:07.60ID:Nn8EIl24
ジェネリクス結局どうなるんだよ
2021/02/11(木) 03:54:00.93ID:y89gNJMQ
議論の末リジェクトされたって結構前に見たけども
2021/02/11(木) 06:20:02.21ID:MYnJXR31
あったら便利かも知れないけど、無くても不便を感じてないんだよな
多分、普段に書いてる案件の方向性の違いじゃないかな
ライブラリ書きな人は欲しがるのかも
2021/02/11(木) 06:24:20.93ID:Nn8EIl24
Webアプリだと必要なケースはほぼないかな
複雑なデータ構造を扱う分野とか数値計算なら必要だろうね
2021/02/11(木) 07:33:17.81ID:MYnJXR31
複雑なデータ構造というより、多様なクラスじゃないか?
クラスが異なるが構造は同じ、といった場合に処理を使い回すための機能だから
たとえばList<Animals>とか
2021/02/11(木) 09:48:01.53ID:XTRtAjen
https://github.com/golang/go/issues/43651
spec: add generic programming using type parameters #43651
Labels: Proposal Proposal-Accepted Proposal-FinalCommentPeriod

アクセプトされたぞ
2021/02/11(木) 09:52:52.27ID:XTRtAjen
あと議論の末リジェクトされたのはエラーのキャッチでは?

https://github.com/golang/go/issues/43777
proposal: Go 2: catch error handler #43777
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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