Goについて扱うスレッドです。
GoはGoogleによって開発された言語です。
公式ドキュメント
http://golang.org/doc/
日本語訳
http://golang.jp
※前スレ
Go language part 2
https://mevius.5ch.net/test/read.cgi/tech/1510395926/
探検
Go language part 3
■ このスレッドは過去ログ倉庫に格納されています
2019/10/17(木) 21:38:04.78ID:wMsZ+t6y
2019/10/17(木) 22:00:39.82ID:su/chz7m
>>1乙
テンプレが古すぎるんで作ってみたがどうだろ
公式
https://golang.org
公式ドキュメント
https://golang.org/doc/
公式外パッケージドキュメント
https://godoc.org
ブラウザ上で試し書き
https://play.golang.org
テンプレが古すぎるんで作ってみたがどうだろ
公式
https://golang.org
公式ドキュメント
https://golang.org/doc/
公式外パッケージドキュメント
https://godoc.org
ブラウザ上で試し書き
https://play.golang.org
2019/10/17(木) 22:34:25.92ID:wphaTNNp
golang.jpは外して良いね
2019/10/18(金) 00:00:29.03ID:DhnYyybT
golang.jp は、エイベルの古川昇部長が、社内で始めた翻訳プロジェクトだろ?
最近は、活動してないのか?
改訂2版 基礎からわかる Go言語、古川昇(エイベル)、2015
最近は、活動してないのか?
改訂2版 基礎からわかる Go言語、古川昇(エイベル)、2015
2019/10/18(金) 00:45:01.73ID:uhy/qlU/
その人もうやめてるでしょ
2019/10/18(金) 13:53:47.66ID:wgxHvfCr
先週から仕事でGoやることになったんだが、この言語辛すぎないか・・・?
ジェネリクスないしエラーが辛い。ジェネリクスは2.0で入るらしいが。
Goの作法だとエラーハンドリング忘れて次の処理を書けるリスクが常に孕んでてて書いてて全然安心できない。
あと詳細なエラー情報見ようとするとcustomErr,ok:=err.(CustomError)みたいにしないと情報とれないの危なすぎでしょ。
なんでカスタムエラー型認められていないの?
ジェネリクスないしエラーが辛い。ジェネリクスは2.0で入るらしいが。
Goの作法だとエラーハンドリング忘れて次の処理を書けるリスクが常に孕んでてて書いてて全然安心できない。
あと詳細なエラー情報見ようとするとcustomErr,ok:=err.(CustomError)みたいにしないと情報とれないの危なすぎでしょ。
なんでカスタムエラー型認められていないの?
2019/10/18(金) 14:25:55.97ID:I27oYfOd
>>6
認められていない訳じゃない
しかし、カスタムなエラー型だと正常時にnilが帰ってきた時に
if err!=nil {} がtrue判断を食らうという厄介なバグがある
これは型付きnilというバグだが、仕様と言い張ってる模様
仕様なら、the predeclared identifier nil, which has no typeの記述とか直せや!
認められていない訳じゃない
しかし、カスタムなエラー型だと正常時にnilが帰ってきた時に
if err!=nil {} がtrue判断を食らうという厄介なバグがある
これは型付きnilというバグだが、仕様と言い張ってる模様
仕様なら、the predeclared identifier nil, which has no typeの記述とか直せや!
2019/10/18(金) 14:31:17.21ID:I27oYfOd
9デフォルトの名無しさん
2019/10/18(金) 14:39:41.03ID:W6xTwO6R O2
2019/10/18(金) 15:49:30.94ID:wgxHvfCr
>>7 認められてないというよりか風潮といった感じか
カスタムエラーがstructじゃなくてinterfaceならいけるんじゃない?
まあどのみち使用しているライブラリがerror返してるからどうしようもないんだけどな
俺はMySQLのエラー番号が知りたいだけなのにどうして危険な操作を強いられるんだ
>>8 まず俺はGoのエラーと例外を引き合いに出してはいない(例外は糞だが)
例えば関数の戻り値がT,errorのような場合でerrorじゃないときだけTの戻り値にアクセスできるような仕組みが欲しい
ScalaのEitherやRustのResultのようなやつな
今はジェネリクスないからそういう実装はできないだろうけど
そもそも職場の制約で.1.13は使えないが、IsもAsも対してかわらんなって印象だわ。
ライブラリの実装者が中で返すエラーの型を変えた場合、IsやAsしててもコンパイルエラーにならず適切なエラー処理ができずに実行されてしまう。
戻り値の型できちんとカスタムエラー型を明示してくれてればコンパイルエラーで気づけるんだけどな
今さっき聞いたんだけど、2.0で入る予定のエラーハンドリング周りのサポート、error型のみが対象らしいんだってな。
2.0にはいると本当にカスタムエラーの道が閉ざされてしまいそうだけど本当にそれでええんやろか
カスタムエラーがstructじゃなくてinterfaceならいけるんじゃない?
まあどのみち使用しているライブラリがerror返してるからどうしようもないんだけどな
俺はMySQLのエラー番号が知りたいだけなのにどうして危険な操作を強いられるんだ
>>8 まず俺はGoのエラーと例外を引き合いに出してはいない(例外は糞だが)
例えば関数の戻り値がT,errorのような場合でerrorじゃないときだけTの戻り値にアクセスできるような仕組みが欲しい
ScalaのEitherやRustのResultのようなやつな
今はジェネリクスないからそういう実装はできないだろうけど
そもそも職場の制約で.1.13は使えないが、IsもAsも対してかわらんなって印象だわ。
ライブラリの実装者が中で返すエラーの型を変えた場合、IsやAsしててもコンパイルエラーにならず適切なエラー処理ができずに実行されてしまう。
戻り値の型できちんとカスタムエラー型を明示してくれてればコンパイルエラーで気づけるんだけどな
今さっき聞いたんだけど、2.0で入る予定のエラーハンドリング周りのサポート、error型のみが対象らしいんだってな。
2.0にはいると本当にカスタムエラーの道が閉ざされてしまいそうだけど本当にそれでええんやろか
2019/10/18(金) 16:01:34.41ID:uhy/qlU/
エラー処理の観点から見るとジェネリクスないのはもう相当きついね
関数型脳は捨てるしかない
関数型脳は捨てるしかない
2019/10/18(金) 19:57:12.19ID:wgxHvfCr
まあRustも関数型言語かというと違うけどな。標準ライブラリにはモナドないし。
ジェネリクスが必要なものに関しては今使えないから仕方がない面はあるとは思う。
ただカスタムエラー型が実質使えない状態になってるのは辛いなあとは思う
ジェネリクスが必要なものに関しては今使えないから仕方がない面はあるとは思う。
ただカスタムエラー型が実質使えない状態になってるのは辛いなあとは思う
2019/10/18(金) 21:03:52.48ID:uhy/qlU/
モナドあってもdo記法相当ないときついからね
14デフォルトの名無しさん
2019/10/19(土) 15:58:08.27ID:g7gJ/kc1 exe でかいな・・・
2019/10/19(土) 19:06:00.27ID:VYVT60v2
う、うん…
2019/10/19(土) 19:56:56.88ID:N1S9xfvx
2MBは静的リンクされてる実行ファイルなら普通よ
C系のリンカーの出力だとままある
動的リンクされてDLLとかアセンブリとかSOをロードする実行ファイルとは違う
ロードが速いはずというメリットもある
C系のリンカーの出力だとままある
動的リンクされてDLLとかアセンブリとかSOをロードする実行ファイルとは違う
ロードが速いはずというメリットもある
2019/10/19(土) 22:13:55.22ID:x3sKZMaG
せやな
この特性でインスタンスの起動が早くてクラウドだと重宝するね
反面WASMとかだと辛いという話は聞いている
この特性でインスタンスの起動が早くてクラウドだと重宝するね
反面WASMとかだと辛いという話は聞いている
18デフォルトの名無しさん
2019/10/20(日) 10:01:30.26ID:Xl2t0ZNf そもそもC/C++自体がすでに第一選択の言語じゃなくて、応答性やパフォーマンスの問題で消去法で選ばれる言語だし、
Goはそれで弾かれる側の言語なんで無理無理
Goが選択肢に入るような要件ならC++は選択肢に入らないし、逆もまた然り
Goはそれで弾かれる側の言語なんで無理無理
Goが選択肢に入るような要件ならC++は選択肢に入らないし、逆もまた然り
2019/10/20(日) 10:16:19.34ID:kaRRw6/p
しかし、C++は他に選択肢が無いというよりアセンブラより生産性が高いという消去法で選択される言語
C++よりも生産性が高いと思う人間、例えばGoogleとか俺にとっては消去法での乗り換えが充分に考えられる
C++よりも生産性が高いと思う人間、例えばGoogleとか俺にとっては消去法での乗り換えが充分に考えられる
2019/10/20(日) 10:22:02.89ID:kaRRw6/p
あ、もうちょい書き足りなかった
つまり、ベターなアセンブラの地位をC/C++から奪おうという狙いの言語、という位置付けだと考えるよ
つまり、ベターなアセンブラの地位をC/C++から奪おうという狙いの言語、という位置付けだと考えるよ
21デフォルトの名無しさん
2019/10/20(日) 10:26:38.82ID:7X6GOXnL 草
2019/10/20(日) 10:33:11.87ID:kaRRw6/p
笑っていればいいさ、20年前にJavaが将来のメジャー言語になると言ったら馬鹿にされるのは必至だったし
2019/10/20(日) 10:35:44.03ID:kaRRw6/p
まあ、linuxカーネルがCで書かれる限り、Cの牙城を崩すのは夢物語なのは間違いない
2019/10/20(日) 10:53:15.21ID:FYx27IXW
1999年ならjavaはすでにメジャー言語でしたけどね
25デフォルトの名無しさん
2019/10/20(日) 11:07:37.88ID:ZaJFVv7X Dと比べてどうなん?
26デフォルトの名無しさん
2019/10/20(日) 11:10:32.44ID:LrxuqhUZ var hoge uintptr = 123 動く(1)
hoge := uintptr(123) 動く(2)
hoge uintptr = 123 動かない(3)
hoge uintptr := 123 動かない(4)
やっぱり面倒なんだよね
良い方法ないですか
あと(2)があまり使われないのはなぜ?
hoge := uintptr(123) 動く(2)
hoge uintptr = 123 動かない(3)
hoge uintptr := 123 動かない(4)
やっぱり面倒なんだよね
良い方法ないですか
あと(2)があまり使われないのはなぜ?
2019/10/20(日) 11:15:04.16ID:kaRRw6/p
>>24
ほほう、EclipseもstrutsもJITもない1.2の時代でメジャーとな?
ほほう、EclipseもstrutsもJITもない1.2の時代でメジャーとな?
28デフォルトの名無しさん
2019/10/20(日) 11:21:45.78ID:7X6GOXnL 君は20年後も笑われてると思う
2019/10/20(日) 11:28:13.14ID:kaRRw6/p
使ったこと無いから的外れかもしれないけど、uintptrなんてunsafeな箇所くらいでしか使わないと思う(アーキテクチャ依存だからという理由
そんなuintptrを簡単にという意図がわからないので、解説plz
そんなuintptrを簡単にという意図がわからないので、解説plz
2019/10/20(日) 11:30:47.40ID:kaRRw6/p
根拠も何もなく笑って誤魔化す人に笑われても痛くも痒くもないね
そこでどうぞ笑っていてくださいな
そこでどうぞ笑っていてくださいな
2019/10/20(日) 11:34:38.66ID:tiTqX8Ml
Cの整数リテラルに付けるサフィックスみたいな?
1234LL とか 1234ULL
1234LL とか 1234ULL
2019/10/20(日) 12:29:01.63ID:FYx27IXW
>>27
当時のTIOBE IndexでC、C++に次ぐ3位ですけど
当時のTIOBE IndexでC、C++に次ぐ3位ですけど
2019/10/20(日) 13:00:38.73ID:kaRRw6/p
>>32
ぐう、認めざるを得ない
ぐう、認めざるを得ない
2019/10/21(月) 12:27:44.92ID:Z5rpRU3u
全然関係ない話
公式のドキュメントのフォントがChromeとかで汚いと悩んでたんだけど、実はGoogleのRobotoフォント入れれば良いんだな
公式のドキュメントのフォントがChromeとかで汚いと悩んでたんだけど、実はGoogleのRobotoフォント入れれば良いんだな
2019/10/21(月) 12:36:03.12ID:WIyyg0Zh
そんなのuser.cssでいくらでも好きなようにできるじゃん
36デフォルトの名無しさん
2019/10/22(火) 09:57:44.29ID:fxbuxtP/ := と = の使い分けが構文的に破綻してるように観える
37デフォルトの名無しさん
2019/10/22(火) 10:07:36.95ID:fxbuxtP/ var s []byte = "abc"
string(s) // OK
s.String() // undefined
var b bytes.Buffer
string(b) // cannot convert to string
b.String() // OK
なんかこの辺もいまいち
string(s) // OK
s.String() // undefined
var b bytes.Buffer
string(b) // cannot convert to string
b.String() // OK
なんかこの辺もいまいち
38デフォルトの名無しさん
2019/10/22(火) 16:48:11.86ID:fxbuxtP/ a) var hoge bytes.Buffer
b) hoge := bytes.Buffer{}
c) hoge := new(bytes.Buffer)
これは全部同じか?
b) hoge := bytes.Buffer{}
c) hoge := new(bytes.Buffer)
これは全部同じか?
39デフォルトの名無しさん
2019/10/22(火) 17:34:11.07ID:NAxd+6Yh cはポインタじゃね?
2019/10/22(火) 18:45:07.15ID:ZD3zuEp7
&xxxxx{}の方が直接的で字数も短いからnewって使ったことも無かった
何のためにあるの?
何のためにあるの?
2019/10/22(火) 18:49:37.32ID:2BTBJ3Vd
ウメは所詮ウメ
2019/10/22(火) 19:10:16.41ID:ZD3zuEp7
2019/10/22(火) 20:19:18.32ID:8627xFai
chrome拡張でuser.css使えばいいだけじゃん
44デフォルトの名無しさん
2019/10/23(水) 00:31:32.72ID:JxOFlXnS errorはインターフェースだからswitchで処理するんじゃないの?キャスト使うの?
2019/10/23(水) 10:08:27.34ID:R2gPUhVc
今頃書き方が気に入らないとか変な奴が増えてきたな
2019/10/23(水) 11:21:24.14ID:QKgYWjME
errorがつらすぎるError()stringだけで表現しきれないよ
2019/10/23(水) 15:38:46.69ID:v5l3MvUt
たまにgoやると、そのたびにテンプレートリテラルがないことを忘れててショックを受ける
48デフォルトの名無しさん
2019/10/23(水) 15:45:39.64ID:JzA6/vMp Go って GAE とか GCP 以外ではどんなところで使われてますか
49デフォルトの名無しさん
2019/10/23(水) 16:11:49.10ID:JxOFlXnS2019/10/23(水) 16:12:12.27ID:WGPw5kiw
LLで書かれていたserver-sideの置き換え
2019/10/23(水) 18:00:58.73ID:GdFoVnvN
>>48
ありがたくGogsを使わせていただいてます
ありがたくGogsを使わせていただいてます
2019/10/23(水) 19:15:53.64ID:S820ViMx
>>48
ありがたくDockerを使わせていただいています。
ありがたくDockerを使わせていただいています。
2019/10/23(水) 19:44:31.14ID:2nox9oBd
>>48
android本体のビルドシステム
android本体のビルドシステム
2019/10/26(土) 14:34:34.62ID:Js8CxMBL
{ "name": "Tanaka", "age": 26 }
{ "name": "Tanaka"}
{ "age": 26 }
{}
みたいに中身が入ってるか不確定なjsonlファイルを上手くcsvやtsvに変換する方法ってありますか?
{ "name": "Tanaka"}
{ "age": 26 }
{}
みたいに中身が入ってるか不確定なjsonlファイルを上手くcsvやtsvに変換する方法ってありますか?
2019/10/26(土) 17:57:54.28ID:cnCbS4wm
普通にjson.Unmarshal()するだけで、mapになるそうだから
入っていないキーは入っていないと分かるのとちがう?
設定ファイルとか使うコード書いたことないから受け売りなんだけど
入っていないキーは入っていないと分かるのとちがう?
設定ファイルとか使うコード書いたことないから受け売りなんだけど
2019/10/26(土) 18:26:00.14ID:WK67sdAG
いまいちカッコ悪いが、
各フィールドをinterface{}で受けて、有無をnil判定するのはどうか
type Person struct {
Name interface{} `json:"name"`
Age interface{} `json:"age"`
}
func encodeField(v interface{}) string {
if v == nil { return "" }; return fmt.Sprint(v)
}
func main() {
var persons []*Person
json.Unmarshal([]byte(`[{"name": "Tanaka", "age": 26},
{"name": "Tanaka"},{"age": 26}, {}]`), &persons)
w := csv.NewWriter(os.Stdout)
for _, person := range persons {
records := []string{encodeField(person.Name),encodeField(person.Age)}
w.Write(records)
}
w.Flush()
}
【出力】
Tanaka,26
Tanaka,
,26
,
各フィールドをinterface{}で受けて、有無をnil判定するのはどうか
type Person struct {
Name interface{} `json:"name"`
Age interface{} `json:"age"`
}
func encodeField(v interface{}) string {
if v == nil { return "" }; return fmt.Sprint(v)
}
func main() {
var persons []*Person
json.Unmarshal([]byte(`[{"name": "Tanaka", "age": 26},
{"name": "Tanaka"},{"age": 26}, {}]`), &persons)
w := csv.NewWriter(os.Stdout)
for _, person := range persons {
records := []string{encodeField(person.Name),encodeField(person.Age)}
w.Write(records)
}
w.Flush()
}
【出力】
Tanaka,26
Tanaka,
,26
,
2019/10/26(土) 18:56:16.09ID:ZMkO6rZZ
5856
2019/10/26(土) 19:00:33.37ID:WK67sdAG2019/10/26(土) 19:17:37.95ID:WK67sdAG
どうぞ
ttps://play.golang.org/p/JD9lfvYmddM
ttps://play.golang.org/p/JD9lfvYmddM
2019/10/26(土) 19:54:24.78ID:b0emESrF
2019/10/26(土) 20:04:05.89ID:7Zdb+SPq
Goってjqみたいな機能無いのか
jsonの全パターン書くの辛くないか?
{ "name": "Tanaka", "age": 26 }
だけで残りの3パターンも補完できれば汎用性のあるものができそうだが
jsonの全パターン書くの辛くないか?
{ "name": "Tanaka", "age": 26 }
だけで残りの3パターンも補完できれば汎用性のあるものができそうだが
2019/10/26(土) 20:26:57.00ID:cnCbS4wm
2019/10/26(土) 20:30:49.25ID:bEV2HGjQ
まあjq使ったほうが遥かに早いわな
2019/10/26(土) 22:55:14.57ID:qV3xsUXN
2019/10/26(土) 23:02:23.77ID:cnCbS4wm
>>64
定義って、それはテストデータじゃない
テストデータ書かないでサンプル書くの?
とかすっとぼけて書いたが、誰かjsonの形式の定義が必要なサンプルコードを書いたりしたか?という話
そもそもが内容が不定なjsonを解読するって話だから、皆さんそれを読むサンプルコードを書いてる
つまり、レス主はそれらのサンプルコードを読んでないんじゃね?
定義って、それはテストデータじゃない
テストデータ書かないでサンプル書くの?
とかすっとぼけて書いたが、誰かjsonの形式の定義が必要なサンプルコードを書いたりしたか?という話
そもそもが内容が不定なjsonを解読するって話だから、皆さんそれを読むサンプルコードを書いてる
つまり、レス主はそれらのサンプルコードを読んでないんじゃね?
2019/10/27(日) 09:49:43.92ID:rf1sTekf
Unmarshal()の引数に[]interface{}の変数のポインタを渡すと、マップとスライスで構成されたjsonの中身がエンコードされるという前提知識で話してるのに
キーをフィールドとして事前定義しなきゃならん、構造体のスライスへのポインタを渡す形式の呼び方での話を持ち出されても困るんだ
んでも、構造体を切ることをパターンと言っているのではない可能性もあって、一応確認
キーをフィールドとして事前定義しなきゃならん、構造体のスライスへのポインタを渡す形式の呼び方での話を持ち出されても困るんだ
んでも、構造体を切ることをパターンと言っているのではない可能性もあって、一応確認
2019/10/27(日) 16:02:57.62ID:rf1sTekf
【質問】
goroutineはデーモンスレッドみたいにプロセスが死ぬと終了します
だから後始末をしたい場合、子にはcontext.WithCancelで終了を通知、受け取ったら後始末
そして、親はsync.WaitGroupで完了待ちしています
んでも、もっとうまい方法ってないものかな?面倒
Javaだとスレッドをinterruptして、子はInterruptExeption拾って後始末して、親はjoinして待つじゃない
主にInterruptExeptionをキャッチするコードを書くだけで済む
もしも親から狙ったgoroutineに特定のpanicを起こせるなら、recoverで拾えるかなーと…
goroutineはデーモンスレッドみたいにプロセスが死ぬと終了します
だから後始末をしたい場合、子にはcontext.WithCancelで終了を通知、受け取ったら後始末
そして、親はsync.WaitGroupで完了待ちしています
んでも、もっとうまい方法ってないものかな?面倒
Javaだとスレッドをinterruptして、子はInterruptExeption拾って後始末して、親はjoinして待つじゃない
主にInterruptExeptionをキャッチするコードを書くだけで済む
もしも親から狙ったgoroutineに特定のpanicを起こせるなら、recoverで拾えるかなーと…
68デフォルトの名無しさん
2019/10/27(日) 17:24:05.16ID:IkTaChA0 暗黙で thread safe になるからじゃね?
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【外交】元台湾総統・馬英九氏、高市首相発言に「台湾を危険にさらす」台湾海峡の問題は「両岸の中国人が自ら話し合うべき」★2 [1ゲットロボ★]
- 高市首相答弁を“引き出した”立民・岡田克也氏が改めて説明「なぜ慎重な答弁をされなかったのか。非常に残念に思っている」 ★8 [ぐれ★]
- 「母の部屋に安倍氏が表紙の機関誌が」「(安倍氏が被害者なのは)不思議に思いませんでした」山上被告の妹が証言 [おっさん友の会★]
- 【次の一手】台湾問題で小林よしのり氏が私見「まさに戦争前夜」「ただちに徴兵制を敷いて、高市支持者を最前線へ」… ★5 [BFU★]
- 【野球】大谷翔平、佐々木朗希、山本由伸らがWBC辞退なら広がる不協和音… 『過去イチ盛り上がらない大会』になる可能性も★2 [冬月記者★]
- 【国際】ロシアはすでに戦争準備段階――ポーランド軍トップが警告 [ぐれ★]
- 【高市売り】円安、止まらず!凄い勢いで暴落中。157円へ [219241683]
- (´ん`)「公明党、お前だったのか。自民党から国民を守ってくれていたのは...」 [603416639]
- 1,000万円のBMWに擦ってしまった札幌のガキ、捕らえられてガチで詰む [329329848]
- 格安風俗行ってきた
- 【悲報】ヤフコメ民「中国が水産物を輸入禁止にするなら、日本国民向けに安く販売すればいい。中国依存から脱するべき」 [153736977]
- SNKの悪役はギース、ルガール、山崎と魅力的なのが多いよね
