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
423デフォルトの名無しさん
2020/04/19(日) 19:53:26.80ID:GbCXYg+t だが断るっ!
424デフォルトの名無しさん
2020/04/22(水) 17:15:41.53ID:2MssAlkL 流石にJavaやScalaからGo移行とかになるとあまりの言語機能のゴミっぷりに開発者がキレそう
今までハサミつかって紙きってたのに石器渡されるようもんだわ
今までハサミつかって紙きってたのに石器渡されるようもんだわ
425デフォルトの名無しさん
2020/04/22(水) 17:57:25.70ID:gFNuxdvi /\___/\
/ / ヽ ::: \
| (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ,,ノ(、_, )ヽ、,, | < まーたはじまった
| ,;‐=‐ヽ .:::::| \_______
\ `ニニ´ .:::/
/`ー‐--‐‐―´´\
/ / ヽ ::: \
| (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ,,ノ(、_, )ヽ、,, | < まーたはじまった
| ,;‐=‐ヽ .:::::| \_______
\ `ニニ´ .:::/
/`ー‐--‐‐―´´\
426デフォルトの名無しさん
2020/04/22(水) 18:22:16.77ID:LU+JwGqd この言語はCでサーバを書いているようなニッチな要求の仕事を置き換えるんだろうな
なに?そんな仕事があるわけない?
…去年回って来ちゃってたよ、そんな仕事が
ミリ秒縛り要求で数十の機器の管制をするサーバ
当時はgo知らなかったんでgccで書いた
なに?そんな仕事があるわけない?
…去年回って来ちゃってたよ、そんな仕事が
ミリ秒縛り要求で数十の機器の管制をするサーバ
当時はgo知らなかったんでgccで書いた
427デフォルトの名無しさん
2020/04/22(水) 19:29:43.68ID:5I5B70Wh リアルタイム性重視なら、GCあるGoは向いてないんじゃ
その用途で置き換えるならRustになりそう
その用途で置き換えるならRustになりそう
428デフォルトの名無しさん
2020/04/22(水) 20:01:17.39ID:LU+JwGqd Goは半日で理解できたがRustは無理だった
429デフォルトの名無しさん
2020/04/23(木) 00:05:34.25ID:b8mXccsZ 鯖は比較的余裕有るけど、クライアント側でGCが痛い子になる事はありそう
Rustは半日では無理だなぁ〜、概念は直ぐ理解出来るけど書き方に統一感無さ過ぎてキレそう<'a>&'a *ref
Rustは半日では無理だなぁ〜、概念は直ぐ理解出来るけど書き方に統一感無さ過ぎてキレそう<'a>&'a *ref
430デフォルトの名無しさん
2020/04/23(木) 00:49:14.99ID:3qWTs6XO Rustは人類には早すぎる
431デフォルトの名無しさん
2020/04/23(木) 00:55:50.26ID:1fYIb7dj 禿しく同意
432デフォルトの名無しさん
2020/04/23(木) 08:01:42.02ID:6AabYYA1 Rustはバカ速いとか聞くから覚えたいんだけど
学習コストもバカ高いよなぁ
CとかPascalやっててJavaを始めたときの倍くらい大変な感じがする
C#はJavaを丸パクりで基本構文ができてたから、1日
学習コストもバカ高いよなぁ
CとかPascalやっててJavaを始めたときの倍くらい大変な感じがする
C#はJavaを丸パクりで基本構文ができてたから、1日
433デフォルトの名無しさん
2020/04/23(木) 08:06:05.23ID:AGd9KY8X そりゃあif文for文みたいなコードだけなら1日だろうよ
434デフォルトの名無しさん
2020/04/23(木) 08:41:47.89ID:Q66hfIcW rust、利便性のためにライフタイムの省略パターンとか作ったんだろうけれど、逆にわかりづらくなってるわ。
435デフォルトの名無しさん
2020/04/23(木) 10:29:03.11ID:6AabYYA1 >>433
クラスの定義の書き方とかもだよ
Javaでない言語のクラスの書き方は、クラス定義にはメソッドの宣言を書いて、定義の外で実装するスタイルが主流だった(他の言語には無いとは言わないが非主流)
これはC++とかObjectPASCAL、そしてGoもこちらのスタイルではある
C#では、基本的にデフォルト仮想なJavaメソッドに対して、デフォルトは非仮想って程度の差(充分にでかい差ではある、ちなみにジェネリックはまだない時分)
だから、覚えるというより慣れるのに1日
SalesforceのAPECはまた面白くて構文はC#以上にJavaなのにデフォルト非仮想だったかな
よく似た兄弟すぎて、仕事とプライベートそれぞれ違う言語で書いてると混乱する
クラスの定義の書き方とかもだよ
Javaでない言語のクラスの書き方は、クラス定義にはメソッドの宣言を書いて、定義の外で実装するスタイルが主流だった(他の言語には無いとは言わないが非主流)
これはC++とかObjectPASCAL、そしてGoもこちらのスタイルではある
C#では、基本的にデフォルト仮想なJavaメソッドに対して、デフォルトは非仮想って程度の差(充分にでかい差ではある、ちなみにジェネリックはまだない時分)
だから、覚えるというより慣れるのに1日
SalesforceのAPECはまた面白くて構文はC#以上にJavaなのにデフォルト非仮想だったかな
よく似た兄弟すぎて、仕事とプライベートそれぞれ違う言語で書いてると混乱する
436デフォルトの名無しさん
2020/04/23(木) 10:36:37.69ID:AGd9KY8X >>435
完全にコーダーの発想だな
完全にコーダーの発想だな
437デフォルトの名無しさん
2020/04/23(木) 10:37:35.02ID:6AabYYA1 >>433
ああ、そういえばCとかではエントリがmain関数だったのが、クラスになっているスタイルもJavaで覚えた
そのためC#でもほぼ同じだから、そこで引っ掛かることが無かった
そういう観点であってifとかforなどの構文じゃないよ
ああ、そういえばCとかではエントリがmain関数だったのが、クラスになっているスタイルもJavaで覚えた
そのためC#でもほぼ同じだから、そこで引っ掛かることが無かった
そういう観点であってifとかforなどの構文じゃないよ
438デフォルトの名無しさん
2020/04/23(木) 10:39:55.23ID:6AabYYA1439デフォルトの名無しさん
2020/04/23(木) 10:55:34.68ID:AGd9KY8X キチガイに触ってしまったごめんなさい
440デフォルトの名無しさん
2020/04/23(木) 10:55:50.60ID:3P7Oolim JavaとC#では技術スタックが全然違うだろう
サーバーの構築から通信方法からフレームワーク等の選定から何から、
そういう足回りを全部すっ飛ばして全部あらかじめ他人に与えられた環境を使って
「さあ、アプリケーションコードを書いてください」ならそら大差ないだろ
俺は436じゃないが「コーダー」ってそういう意味じゃないかな
サーバーの構築から通信方法からフレームワーク等の選定から何から、
そういう足回りを全部すっ飛ばして全部あらかじめ他人に与えられた環境を使って
「さあ、アプリケーションコードを書いてください」ならそら大差ないだろ
俺は436じゃないが「コーダー」ってそういう意味じゃないかな
441デフォルトの名無しさん
2020/04/23(木) 11:30:36.92ID:1fYIb7dj ハゲしくスレ違い
442デフォルトの名無しさん
2020/04/23(木) 14:11:43.18ID:6AabYYA1 出だしが学習コストの話で、人格攻撃やらサーバの構築とか的外れな事を言い出してくるやら
詭弁術だけはお得意なことはよくわかりました
詭弁術だけはお得意なことはよくわかりました
443デフォルトの名無しさん
2020/04/25(土) 02:28:33.10ID:wAZrgsxC ギスギスしててワロ
Goは誰でもある程度のレベルくらいまでなら使いこなせる優しい言語
Goは誰でもある程度のレベルくらいまでなら使いこなせる優しい言語
444デフォルトの名無しさん
2020/04/26(日) 19:49:45.56ID:xNjL7Ex+ ものすごく当たり前の落とし穴に落ちた
ファクトリから構造体アドレス返してたのをインタフェース返すように変更したらテストでコケた
キャストチェックのテストだったんだけど、レシーバのシグネチャが同じ別のインタフェースがあって、そいつにキャストできちゃった
インタフェースが同じなら同じものとして使えるってことは、そういう問題を想定しとかないとならなかった
ファクトリから構造体アドレス返してたのをインタフェース返すように変更したらテストでコケた
キャストチェックのテストだったんだけど、レシーバのシグネチャが同じ別のインタフェースがあって、そいつにキャストできちゃった
インタフェースが同じなら同じものとして使えるってことは、そういう問題を想定しとかないとならなかった
445デフォルトの名無しさん
2020/04/28(火) 19:31:28.17ID:Ce9HOSET 大きくなってきたんでパッケージを分割
設定とか全体を管理するAパッケージ
httpのリクエストを管理するBパッケージ
webAPIのロジックを管理するCパッケージ
ロジックのインスタンスは設定で作って、リクエストから呼び出して処理してもらう
さて、ここで落とし穴
Cパッケージから設定を参照するためにAパッケージをインポートすると import cycle not arrowed 発生
AパッケージではCパッケージをインポートして、ロジックのファクトリを呼び出してる
インポートの循環の制約とか、それは厳しすぎやしませんかね
第三の上位パッケージを作ればなんとかなるのかなぁ?
設定とか全体を管理するAパッケージ
httpのリクエストを管理するBパッケージ
webAPIのロジックを管理するCパッケージ
ロジックのインスタンスは設定で作って、リクエストから呼び出して処理してもらう
さて、ここで落とし穴
Cパッケージから設定を参照するためにAパッケージをインポートすると import cycle not arrowed 発生
AパッケージではCパッケージをインポートして、ロジックのファクトリを呼び出してる
インポートの循環の制約とか、それは厳しすぎやしませんかね
第三の上位パッケージを作ればなんとかなるのかなぁ?
446デフォルトの名無しさん
2020/04/28(火) 20:20:55.63ID:iogl+PJs arrowed ?
447デフォルトの名無しさん
2020/04/28(火) 20:31:42.46ID:ghSBG3zr448デフォルトの名無しさん
2020/04/28(火) 20:48:56.59ID:SLRJSTJf > 設定とか全体を管理するパッケージ
インターフェース云々以前に、そんなふわっとしたモジュール強度の低いパッケージが存在することが問題
設定なら設定で分けろ
設定はデータ構造自体がインターフェイスなんだからカプセル化とか要らん
インターフェース云々以前に、そんなふわっとしたモジュール強度の低いパッケージが存在することが問題
設定なら設定で分けろ
設定はデータ構造自体がインターフェイスなんだからカプセル化とか要らん
449デフォルトの名無しさん
2020/04/28(火) 20:51:51.61ID:OCson2MM450デフォルトの名無しさん
2020/04/28(火) 22:00:57.39ID:Ce9HOSET >>449
ロジックのインタフェースの実体を得るファクトリ関数なんだがおかしいのか?
でも、そもそもが設定情報のパッケージにシステムを管理するデータの生成を担わせてる設計が原因臭いとはうすうす
やっぱそこを別パッケージに分離して結合を弱めないとだめだな
ロジックのインタフェースの実体を得るファクトリ関数なんだがおかしいのか?
でも、そもそもが設定情報のパッケージにシステムを管理するデータの生成を担わせてる設計が原因臭いとはうすうす
やっぱそこを別パッケージに分離して結合を弱めないとだめだな
451デフォルトの名無しさん
2020/04/28(火) 22:23:30.36ID:Ce9HOSET 結局、日和ってロジックのインスタンスはCパッケージにシングルトンとして実装してBから呼ぶことでallowedを回避した
根本的な解決ではないが、動けばいい!(うわっ自分で言ってて恥ずかしい
根本的な解決ではないが、動けばいい!(うわっ自分で言ってて恥ずかしい
452デフォルトの名無しさん
2020/05/01(金) 06:16:44.51ID:txiwXjh+ VScodeなのかdelveなのか、デバッガでスライスを見たとき64個までしか見えません
どこの設定を弄れば最後まで見せてもらえるのか、調べてみたけれど分かりません
→ githubのgo-delveとかvscode-goとか
このカスタマイズについて情報があれば教えてください
どこの設定を弄れば最後まで見せてもらえるのか、調べてみたけれど分かりません
→ githubのgo-delveとかvscode-goとか
このカスタマイズについて情報があれば教えてください
453デフォルトの名無しさん
2020/05/01(金) 11:36:26.80ID:txiwXjh+ 各プラットフォームのランタイムのせいだろうとは思うけど・・・
io パッケージの
func Copy(dst Writer, src Reader) (written int64, err error)
と
type Writer interface {
Write(p []byte) (n int, err error)
}
で戻り値に一貫性がない事に気づいて、ちょっとイラっときた
(io.Writer).Write() では n の合計が len(p) になるまで繰り返さないとダメ?
かと思ったけど、
Write must return a non-nil error if it returns n < len(p).
って書いてあるよ・・・
io パッケージの
func Copy(dst Writer, src Reader) (written int64, err error)
と
type Writer interface {
Write(p []byte) (n int, err error)
}
で戻り値に一貫性がない事に気づいて、ちょっとイラっときた
(io.Writer).Write() では n の合計が len(p) になるまで繰り返さないとダメ?
かと思ったけど、
Write must return a non-nil error if it returns n < len(p).
って書いてあるよ・・・
454デフォルトの名無しさん
2020/05/01(金) 11:43:36.06ID:txiwXjh+ ああっ
The built-in functions len and cap take arguments of various types and return a result of type int.
だからなのか
いいのかそんな仕様で
The built-in functions len and cap take arguments of various types and return a result of type int.
だからなのか
いいのかそんな仕様で
455デフォルトの名無しさん
2020/05/01(金) 12:06:06.92ID:Ia4c8IgS Goではintのサイズと配列の最大長は環境依存だからそれで正しい
そして、CopyはWriteを一発呼ぶだけじゃなくて指定された長さをコピーし終えるまで読み書きを繰り返すように実装するもの
だから配列の最大長とか無関係
やってることが全然違うんだから一貫性もクソもない
そして、CopyはWriteを一発呼ぶだけじゃなくて指定された長さをコピーし終えるまで読み書きを繰り返すように実装するもの
だから配列の最大長とか無関係
やってることが全然違うんだから一貫性もクソもない
456デフォルトの名無しさん
2020/05/01(金) 12:20:25.30ID:OD5xAYpx Rob Pike interview: “Go has become the language of cloud infrastructure”
https://evrone.com/rob-pike-interview
https://evrone.com/rob-pike-interview
457デフォルトの名無しさん
2020/05/01(金) 13:10:50.80ID:txiwXjh+ >指定された長さ
ダウト
Copy見てきてください
こいつはReaderからバイトストリーム(厳密には意訳)をEOFに達するまでWriterに書き込み、その書き込みバイト数を返します
サイズなんて指定しません
Writerに書き出すソースが固定のスライスではないだけで、Writerに書き出すという目的から見ればWriteと同じでしょ
まあ違うとあえて言うなら、私とあなたは考え方が違うんでしょうね (私は「何をするか」という目的で言ったので)
ダウト
Copy見てきてください
こいつはReaderからバイトストリーム(厳密には意訳)をEOFに達するまでWriterに書き込み、その書き込みバイト数を返します
サイズなんて指定しません
Writerに書き出すソースが固定のスライスではないだけで、Writerに書き出すという目的から見ればWriteと同じでしょ
まあ違うとあえて言うなら、私とあなたは考え方が違うんでしょうね (私は「何をするか」という目的で言ったので)
458デフォルトの名無しさん
2020/05/01(金) 23:48:52.57ID:txiwXjh+ log.Logger の出力でファイル名も出させるようにして気づいたけど、ソースファイルのパスって実行ファイルの中にしっかりと記録されてる?
Loggerでファイル名を指定すると内部でruntime.Caller呼んでスタック情報拾うんだけど
ログにはソースファイルの完全パスがしっかりと出てくる
実行ファイルを別ディレクトリはにコピーして実行しても出るから、実行ファイルの置き場所を利用している訳じゃない
また、runtimeパッケージがソースファイル情報をもってる訳もないからリンカが埋め込んでるんだろうと推測
runtimeパッケージを使う使わないで、リンカが埋め込む埋め込まないを切り替えるなんて器用な真似はさせていないだろうし
だとすると、ソースファイルの情報って全て記録されているはず(stringsで実行ファイルの中を見た訳じゃないけど)
という推測
完全パスで困るのはユーザ名がしっかり出ちゃうことなんだよな
それが嫌ならユーザディレクトリで開発するなという事なのか
Loggerでファイル名を指定すると内部でruntime.Caller呼んでスタック情報拾うんだけど
ログにはソースファイルの完全パスがしっかりと出てくる
実行ファイルを別ディレクトリはにコピーして実行しても出るから、実行ファイルの置き場所を利用している訳じゃない
また、runtimeパッケージがソースファイル情報をもってる訳もないからリンカが埋め込んでるんだろうと推測
runtimeパッケージを使う使わないで、リンカが埋め込む埋め込まないを切り替えるなんて器用な真似はさせていないだろうし
だとすると、ソースファイルの情報って全て記録されているはず(stringsで実行ファイルの中を見た訳じゃないけど)
という推測
完全パスで困るのはユーザ名がしっかり出ちゃうことなんだよな
それが嫌ならユーザディレクトリで開発するなという事なのか
459デフォルトの名無しさん
2020/05/02(土) 08:59:25.19ID:+Au1iQ6P みんなはGW中は嫁さんとセックスしまくりなの?
独身の俺からすると羨ましいんだけど
独身の俺からすると羨ましいんだけど
460デフォルトの名無しさん
2020/05/02(土) 13:46:40.57ID:iDDOId/p 嫁さんとセクロスなんて1年で飽きるぞ
461デフォルトの名無しさん
2020/05/02(土) 14:11:11.13ID:H63qqmuN セクロスはセフレとしかしないな
462デフォルトの名無しさん
2020/05/02(土) 14:12:11.64ID:1t1QmWMu 疲れるだけだぞ
463デフォルトの名無しさん
2020/05/02(土) 14:21:57.66ID:z5TAOMiI 飽きるか?全然飽きないんだが。
嫁ともっとセクロスしたいわ。
嫁ともっとセクロスしたいわ。
464デフォルトの名無しさん
2020/05/02(土) 14:26:10.42ID:jSLKT64y ∧∧ ミ _ ドスッ
( ,,)┌─┴┴─┐
/ つ. 終 了 │
〜′ /´ └─┬┬─┘
∪ ∪ ││ _ε3
゛゛'゛'゛
( ,,)┌─┴┴─┐
/ つ. 終 了 │
〜′ /´ └─┬┬─┘
∪ ∪ ││ _ε3
゛゛'゛'゛
465デフォルトの名無しさん
2020/05/02(土) 16:06:20.88ID:3+K3/vn9 GoのスレなんだからせめてGopherくんで抜けるかどうかの議論しろよ
466デフォルトの名無しさん
2020/05/02(土) 16:30:21.85ID:1t1QmWMu gopherくんみたいな女いるよな
目がでかくて歯並び悪いやつ
抜ける
目がでかくて歯並び悪いやつ
抜ける
467デフォルトの名無しさん
2020/05/02(土) 17:53:36.77ID:+BhrZUVp 常駐しつつ標準入力からのコマンドを受け付ける構成のプログラム書いてる
だけど、デバッグターミナルからの標準入力はサポートされないんだな(vscode-go/
issues/219)
VScodeの問題かと探したのにdelveの問題?
だけど、デバッグターミナルからの標準入力はサポートされないんだな(vscode-go/
issues/219)
VScodeの問題かと探したのにdelveの問題?
468デフォルトの名無しさん
2020/05/02(土) 17:56:31.80ID:+BhrZUVp ちなみにシグナル使えという話は横に置いといてね
os.Interruptとかのハンドリングはもう入ってる
Windowsでkillしても受け取らないんだこれが
os.Interruptとかのハンドリングはもう入ってる
Windowsでkillしても受け取らないんだこれが
469デフォルトの名無しさん
2020/05/08(金) 09:06:51.86ID:+d3XVyIT470デフォルトの名無しさん
2020/05/08(金) 09:16:00.33ID:le9A8gSm どうでもいい内容なんだよなーそれ
471デフォルトの名無しさん
2020/05/08(金) 09:28:21.26ID:/imhMepR ところどころ抜けてて口頭説明前提の作りで肝心な内容が無い資料公開されてもな
472デフォルトの名無しさん
2020/05/08(金) 09:47:37.47ID:oIDbptWL473デフォルトの名無しさん
2020/05/08(金) 09:48:51.29ID:oIDbptWL474デフォルトの名無しさん
2020/05/08(金) 09:50:21.63ID:oIDbptWL475デフォルトの名無しさん
2020/05/08(金) 16:04:03.09ID:SpWQlQbz 言語仕様より標準ライブラリのクックブック的な本が充実して欲しいかな
結局Goのソースやテストコード読まなきゃ使い方がわからないのが多過ぎるし
結局Goのソースやテストコード読まなきゃ使い方がわからないのが多過ぎるし
476デフォルトの名無しさん
2020/05/08(金) 18:12:47.83ID:QcJ6udj9477デフォルトの名無しさん
2020/05/08(金) 22:59:05.96ID:tAyMPd7a Golang逆引きレシピ(version1.14対応)
って本出してくれ
kindleで5000円までなら買う
って本出してくれ
kindleで5000円までなら買う
478デフォルトの名無しさん
2020/05/09(土) 18:13:17.56ID:m4Vh3zrv 2.0はいつリリースされますのん?
479デフォルトの名無しさん
2020/05/09(土) 18:28:27.39ID:4jg1EkWA 予定は未定
480デフォルトの名無しさん
2020/05/09(土) 19:27:11.31ID:CUL9xwyE 開発陣のモチベーションはどうなんだろう。
なんかrubyと同じような臭いが。
なんかrubyと同じような臭いが。
481デフォルトの名無しさん
2020/05/10(日) 09:38:46.23ID:XQ0sO87J サーバで使われることが割と一般的なコンパイル言語(Java以外)って
Go以外になんかあったっけ
Go以外になんかあったっけ
482デフォルトの名無しさん
2020/05/10(日) 11:01:30.61ID:hDQHcieg apache は何でコンパイルされてる?
483デフォルトの名無しさん
2020/05/10(日) 11:02:41.97ID:ot41mX7+ C#
海外を含めるならWin鯖除外でも今やGoよりは多いんじゃないか
海外を含めるならWin鯖除外でも今やGoよりは多いんじゃないか
484デフォルトの名無しさん
2020/05/10(日) 11:59:28.84ID:XQ0sO87J485デフォルトの名無しさん
2020/05/10(日) 13:04:42.48ID:+Vdduh76 C++
486デフォルトの名無しさん
2020/05/10(日) 14:28:40.79ID:p9tAaMVr Javaじゃね?って言葉を無視するのであれば、Scalaは聞いたことある。
487デフォルトの名無しさん
2020/05/10(日) 15:35:37.07ID:FhPtT+Xo コンパイル言語で伸びそうなのはKotlin
488デフォルトの名無しさん
2020/05/10(日) 18:14:39.27ID:onDYsAIY javaがinnullable化すればいいんだ
いつ達成されるのか
いつ達成されるのか
489デフォルトの名無しさん
2020/05/10(日) 18:21:05.86ID:BbBbqgLD 凄いスレ違い
490デフォルトの名無しさん
2020/05/13(水) 07:56:28.24ID:p0Yu02SZ Goは学習コストが少ないっていう嘘に騙されてるやつとそう信じてる信者が多いのが最大の失敗
コード読むだけじゃ見落とすような罠が簡単につくれるし直感的に分かりづらい仕様と機能不足が多すぎる
書き捨てるだけなら簡単だがチーム開発で採用するには残念すぎる言語
コード読むだけじゃ見落とすような罠が簡単につくれるし直感的に分かりづらい仕様と機能不足が多すぎる
書き捨てるだけなら簡単だがチーム開発で採用するには残念すぎる言語
491デフォルトの名無しさん
2020/05/13(水) 08:32:08.19ID:Q3kP6cCa /\___/\
/ / ヽ ::: \
| (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ,,ノ(、_, )ヽ、,, | < まーたはじまった
| ,;‐=‐ヽ .:::::| \_______
\ `ニニ´ .:::/
/`ー‐--‐‐―´´\
/ / ヽ ::: \
| (●), 、(●)、 | / ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ,,ノ(、_, )ヽ、,, | < まーたはじまった
| ,;‐=‐ヽ .:::::| \_______
\ `ニニ´ .:::/
/`ー‐--‐‐―´´\
492デフォルトの名無しさん
2020/05/13(水) 08:34:54.68ID:+HM7ZWjz 見えない罠が多すぎる言語よりは数段マシなんだよな
493デフォルトの名無しさん
2020/05/14(木) 17:27:46.77ID:ljUxN++I >>447
ものすごく遅い話なんだけど
そっかー、インタフェース定義とファクトリの実装が同じパッケージにある必然性って全くなかったんだな
io.Reader の実装が到るところにあるように、定義と実装を分離させれば済む話だった
あーでもない、こーでもない
いつの間にかそうリファクタリングしていて、アレ?となった
ものすごく遅い話なんだけど
そっかー、インタフェース定義とファクトリの実装が同じパッケージにある必然性って全くなかったんだな
io.Reader の実装が到るところにあるように、定義と実装を分離させれば済む話だった
あーでもない、こーでもない
いつの間にかそうリファクタリングしていて、アレ?となった
494デフォルトの名無しさん
2020/05/15(金) 00:10:35.84ID:WhbhAQET >>490
他と比べたら、って話でしょ
他と比べたら、って話でしょ
495デフォルトの名無しさん
2020/05/15(金) 01:28:18.31ID:kU/eypzI >>493
ていうかinterfaceを返すファクトリというもの自体があまりGo的ではない
その辺は思想がJavaなんかと大きく違うところで、Goでは戻り値には具象型を使うのが基本
interfaceは関数の引数に使うもんで、その関数を使う側のパッケージが必要に応じてinterfaceを実装するんだよ
それに従えば結果的にファクトリとinterface定義は別パッケージになる
ていうかinterfaceを返すファクトリというもの自体があまりGo的ではない
その辺は思想がJavaなんかと大きく違うところで、Goでは戻り値には具象型を使うのが基本
interfaceは関数の引数に使うもんで、その関数を使う側のパッケージが必要に応じてinterfaceを実装するんだよ
それに従えば結果的にファクトリとinterface定義は別パッケージになる
496デフォルトの名無しさん
2020/05/15(金) 05:05:48.78ID:02fpr2+t497デフォルトの名無しさん
2020/05/16(土) 11:46:57.57ID:e+rgeli+ 1.12 の http/request.go に、でっかい落とし穴が
こいつは、1210 行目で ContextType == "multipart/form-data" の処理が未実装
そして、 Chrome は FormData オブジェクトを XMLHttpRequest で send() すると問題のマルチパートで送りつける
よって、FormData は使えない……
他のブラウザだとどうなんだろ?困るな
こいつは、1210 行目で ContextType == "multipart/form-data" の処理が未実装
そして、 Chrome は FormData オブジェクトを XMLHttpRequest で send() すると問題のマルチパートで送りつける
よって、FormData は使えない……
他のブラウザだとどうなんだろ?困るな
498デフォルトの名無しさん
2020/05/16(土) 12:28:15.83ID:bJ5k+aLx xmlHttpRequest.setRequestHeader( 'Content-Type', 'application/x-www-form-urlencoded' );
じゃダメなん?
じゃダメなん?
499デフォルトの名無しさん
2020/05/16(土) 12:29:08.12ID:e+rgeli+ うーん、コード追ってみたら未実装は間違いでParseMultipartFormを使うらしいけど、わけわかんない
単純にParseFormを置き換えたら、エラーかえしやんの
単純にParseFormを置き換えたら、エラーかえしやんの
500デフォルトの名無しさん
2020/05/16(土) 12:30:20.91ID:e+rgeli+501デフォルトの名無しさん
2020/05/16(土) 12:34:33.17ID:e+rgeli+ 普通、ParseForm が判定して取り込むよね
なんで分離してんの?
なんで分離してんの?
502デフォルトの名無しさん
2020/05/16(土) 13:02:51.76ID:e+rgeli+ エラーが起こる第一原因判明
ヘッダにContent-Typeが無いリクエストでParseMultipartFormすると、パースを打ち切るのではなくてエラーを返す
ショボい作りだ
ヘッダにContent-Typeが無いリクエストでParseMultipartFormすると、パースを打ち切るのではなくてエラーを返す
ショボい作りだ
503デフォルトの名無しさん
2020/05/16(土) 13:05:20.47ID:e+rgeli+ request.go の中身を初めて見たけど、エラー処理は雑だし残念すぎるなコレ
504デフォルトの名無しさん
2020/05/16(土) 13:11:02.15ID:bJ5k+aLx request.MultipartReader() の方を使ってみたら
505デフォルトの名無しさん
2020/05/16(土) 13:14:14.23ID:e+rgeli+506デフォルトの名無しさん
2020/05/16(土) 14:52:00.85ID:9I4cSVvN マルチパートって、要は多段formだっけ
507デフォルトの名無しさん
2020/05/16(土) 14:59:51.10ID:e+rgeli+ なのかな?よく知らない
でも、WebAPIでFormとしてデータを受けるときはParseFormの使用が罠なのは確実
それともbodyを自分で解析するのが定石だったりする?
でも、WebAPIでFormとしてデータを受けるときはParseFormの使用が罠なのは確実
それともbodyを自分で解析するのが定石だったりする?
508デフォルトの名無しさん
2020/05/16(土) 15:12:59.98ID:F08ATzLT >>502
>ヘッダにContent-Typeが無いリクエストでParseMultipartFormすると、パースを打ち切るのではなくてエラーを返す
これは正常な処理だよ
Context-Typeが"multipart/form-data" の場合
Context-Type のmultipart/form-dataの後に続くboundaryをキーにしてmultipartをパースするんだから
ParseMultipartFormがContext-Typeからパースに必要なboundaryを取得できなくてエラーになるのはいたって正常なことだよ
>ヘッダにContent-Typeが無いリクエストでParseMultipartFormすると、パースを打ち切るのではなくてエラーを返す
これは正常な処理だよ
Context-Typeが"multipart/form-data" の場合
Context-Type のmultipart/form-dataの後に続くboundaryをキーにしてmultipartをパースするんだから
ParseMultipartFormがContext-Typeからパースに必要なboundaryを取得できなくてエラーになるのはいたって正常なことだよ
509デフォルトの名無しさん
2020/05/16(土) 15:26:41.59ID:F08ATzLT >>508の補足
Content-Typeが無かったらboundaryが取得できないのにParseMultipartFormでパースしようとするからエラーを返す
Content-Typeが無かったらboundaryが取得できないのにParseMultipartFormでパースしようとするからエラーを返す
510デフォルトの名無しさん
2020/05/16(土) 15:30:06.54ID:9I4cSVvN 「この中にformがいっぱい入ってますよ」っていうformなんだよね
511デフォルトの名無しさん
2020/05/16(土) 15:43:30.65ID:F08ATzLT ヘッダーのContext-Typeで分岐して適切なParseなにがしを呼べってことです。
512デフォルトの名無しさん
2020/05/16(土) 16:52:50.26ID:e+rgeli+ >>511
何のメリットがあって呼ぶ方が判定しなければならないのか、教えてください
何のメリットがあって呼ぶ方が判定しなければならないのか、教えてください
513デフォルトの名無しさん
2020/05/16(土) 17:00:10.79ID:9I4cSVvN 駄々こねてるようにしか見えんぞ
514デフォルトの名無しさん
2020/05/16(土) 17:24:44.07ID:bJ5k+aLx う〜ん、Context-Type が指定されていないのに multipart を自動判別して
くれるライブラリとかフレームワークって他所の言語にあったりするのかな…?
くれるライブラリとかフレームワークって他所の言語にあったりするのかな…?
515デフォルトの名無しさん
2020/05/16(土) 17:34:03.50ID:e+rgeli+ 自動的に判定して分岐できるんだったら、それをライブラリがしないというのは手抜きだろ、と言っている
しかし、例えば文字コードの自動判定ではSJISとUTF-8のどちらでも有効であるマルチバイト文字が存在する
例)"【D"と"縲識"はどちらも E3 80 90 44
このようなケースがある課題では自動処理できないので、ライブラリの外側で何かしらの対応をしてやる必要がある
マルチパートFormという課題でも同じように呼ぶ方が対処してやらなければならない問題があるのだろうと思った
だから、その問題について教えてくださいと書いたんだ
駄々ではないと思うんだが間違っているか?
しかし、例えば文字コードの自動判定ではSJISとUTF-8のどちらでも有効であるマルチバイト文字が存在する
例)"【D"と"縲識"はどちらも E3 80 90 44
このようなケースがある課題では自動処理できないので、ライブラリの外側で何かしらの対応をしてやる必要がある
マルチパートFormという課題でも同じように呼ぶ方が対処してやらなければならない問題があるのだろうと思った
だから、その問題について教えてくださいと書いたんだ
駄々ではないと思うんだが間違っているか?
516デフォルトの名無しさん
2020/05/16(土) 17:40:18.88ID:e+rgeli+ 505で書いたように、一見問題がないような対処はできるけど(自分でも手抜きとはわかってる)、問題点の実体が見えてないと対処に漏れが無いという確証が持てないから
517デフォルトの名無しさん
2020/05/16(土) 17:40:39.14ID:is04b0b3 MIME Type
MIME Encoding
MIME Encoding
518デフォルトの名無しさん
2020/05/16(土) 17:45:07.11ID:GaPEU8I0 それはバウンダリの中身に、
Content-disposition: attachment; filename="xxxxx"
Content-Type: text/plain
なんかが書いてあるからできる動作であって、実はバウンダリの中身はかなり自由。
マルチパートの中にさらにマルチパートを入れるマトリョーシカのようなことをしてもかまわん。仕様上は。
これをきれいに自動でデシリアライズするのは結構難しいと思うけど。
そういう意味では、呼ぶ側が解釈を与えないといかんって割り切りは間違っちゃないんじゃないか?
他のコンパイル言語でどう対応してるのか気になるな。
Content-disposition: attachment; filename="xxxxx"
Content-Type: text/plain
なんかが書いてあるからできる動作であって、実はバウンダリの中身はかなり自由。
マルチパートの中にさらにマルチパートを入れるマトリョーシカのようなことをしてもかまわん。仕様上は。
これをきれいに自動でデシリアライズするのは結構難しいと思うけど。
そういう意味では、呼ぶ側が解釈を与えないといかんって割り切りは間違っちゃないんじゃないか?
他のコンパイル言語でどう対応してるのか気になるな。
519デフォルトの名無しさん
2020/05/16(土) 17:51:34.17ID:9I4cSVvN 仕事でAWSのAPI Gatewayって機能使った時に
マルチパートフォームデータだけは解釈してくれなかった
クラウドサービスの都合上外部のライブラリ入れるにはソースに同梱するしか無く、
それは嫌だったからバックエンドのLambda(goに対応しているけど仕事で使ったのは非go)で
自前でバウンダリのfrom-toを切り取った上でガン無視してリクエストbodyを拾うだけの処理を書いた記憶があるw
完全にスレチだけど
マルチパートフォームデータだけは解釈してくれなかった
クラウドサービスの都合上外部のライブラリ入れるにはソースに同梱するしか無く、
それは嫌だったからバックエンドのLambda(goに対応しているけど仕事で使ったのは非go)で
自前でバウンダリのfrom-toを切り取った上でガン無視してリクエストbodyを拾うだけの処理を書いた記憶があるw
完全にスレチだけど
520デフォルトの名無しさん
2020/05/16(土) 17:54:45.69ID:4LNE0T1O >>515
だってContent-Typeに現れるのはその2種類だけとは限らないから全部ライブラリ任せにはできんだろ。
だってContent-Typeに現れるのはその2種類だけとは限らないから全部ライブラリ任せにはできんだろ。
521デフォルトの名無しさん
2020/05/16(土) 17:55:54.20ID:e+rgeli+ ParseMultipartFormの説明で、必要に応じてParseFormを呼び出しますと書いてるのに、
ヘッダにContent-Typeが無ければエラーとするというParseFormにはない条件を入れてしまっているのがおかしいポイントだと思うんだけど
maxMemory引数はデフォルト値を中に持って、オプションとして変更できるようにするのが、こういったライブラリの定石だから(ソケットのタイムアウト時間設定とか)、これは問題点じゃない
いや引数の設計上の問題点だけど
ヘッダにContent-Typeが無ければエラーとするというParseFormにはない条件を入れてしまっているのがおかしいポイントだと思うんだけど
maxMemory引数はデフォルト値を中に持って、オプションとして変更できるようにするのが、こういったライブラリの定石だから(ソケットのタイムアウト時間設定とか)、これは問題点じゃない
いや引数の設計上の問題点だけど
522デフォルトの名無しさん
2020/05/16(土) 18:06:23.99ID:e+rgeli+ >>520
それが、parsePostForm関数ではその二種類しかハンドリングしてないんだよなぁ
ブラウザ側でとんでもない(サーバで汎用的な方法で解析できない)フォームデータを送るならブラウザの問題だろう
FormDataオブジェクトを使うと発生するContent-Typeくらい自動で処理しないライブラリってどうなの?
それが、parsePostForm関数ではその二種類しかハンドリングしてないんだよなぁ
ブラウザ側でとんでもない(サーバで汎用的な方法で解析できない)フォームデータを送るならブラウザの問題だろう
FormDataオブジェクトを使うと発生するContent-Typeくらい自動で処理しないライブラリってどうなの?
523デフォルトの名無しさん
2020/05/16(土) 18:13:07.38ID:bJ5k+aLx request.parsePostForm() は Content-Type が無ければ application/octet-stream と見なす様だ
func parsePostForm(r *Request) (vs url.Values, err error) {
:
ct := r.Header.Get("Content-Type")
// RFC 7231, section 3.1.1.5 - empty type
// MAY be treated as application/octet-stream
if ct == "" {
ct = "application/octet-stream"
}
ct, _, err = mime.ParseMediaType(ct)
:
func parsePostForm(r *Request) (vs url.Values, err error) {
:
ct := r.Header.Get("Content-Type")
// RFC 7231, section 3.1.1.5 - empty type
// MAY be treated as application/octet-stream
if ct == "" {
ct = "application/octet-stream"
}
ct, _, err = mime.ParseMediaType(ct)
:
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【速報】中国、水産物輸入停止と通達 「処理水」理由、日本政府へ ★5 [おっさん友の会★]
- 【速報】中国、水産物輸入停止と通達 「処理水」理由、日本政府へ ★6 [おっさん友の会★]
- 高市首相答弁を“引き出した”立民・岡田克也氏が改めて説明「なぜ慎重な答弁をされなかったのか。非常に残念に思っている」 [ぐれ★]
- 中国側が首相答弁の撤回要求、日本側拒否★7 [夜のけいちゃん★]
- NHK会長 新語・流行語大賞ノミネート「オールドメディア」に反論「言われる筋合いはない」「新しいメディアだと思っている」 [muffin★]
- 【速報】 米大使「はっきりさせておこう、米国は尖閣諸島含め日本の防衛に全面コミット、中国がどうしようが変わらない」 [お断り★]
- 【速報】高市首相「つい言い過ぎた」 存立危機事態の答弁について [237216734]
- 【総裁選】記者「進次郎メモ見過ぎ」高市早苗「w」小泉進次郎「責任ある者は適切な慎重さを備えるべき」 [175344491]
- 【速報】中国、水産物輸入停止★2 [989870298]
- 山上妹「統一信者から安倍自民への投票を求められた」法廷で証言 [947332727]
- 【悲報】トランプおやびん、高市有事にダンマリ [834922174]
- 【速報】中国、水産物輸入停止★3 [989870298]
