Goについて扱うスレッドです。
GoはGoogleによって開発された言語です。
公式ドキュメント
http://golang.org/doc/
日本語訳
http://golang.jp
※前スレ
Go language part 1
http://mevius.5ch.net/test/read.cgi/tech/1381374291/
探検
Go language part 2
■ このスレッドは過去ログ倉庫に格納されています
1あ
2017/11/11(土) 19:25:26.19ID:X8lWnCzG2あ
2017/11/11(土) 19:49:11.79ID:X8lWnCzG 書き込み待って読んでから8時まで待つべきだったかな。
不要なら立て直してね。
一応言い訳すると、スレタイも変わったしそっから長いから普通に二スレ目だと思っとったわ。
もっかい書いとくと、APIが不足してることはない。
995 あ sage 2017/11/11(土) 19:23:54.10 ID:X8lWnCzG
まあ、要らないカラムが多すぎるだけなら、
row,err:=sql.Queryで、
column,err:=row.Columns()
vals:=Make([]sql.RawBytes,len(column))
args:=Make([]interface,len(column))
for i:= range values {
args[i]=&vals[i]
}
でvalsとargsつくって、
Scanに(args...)で渡せば、
使うときにvals[i]をstring(vals[i])とかよしなにしちゃえるんじゃないの?
不要なら立て直してね。
一応言い訳すると、スレタイも変わったしそっから長いから普通に二スレ目だと思っとったわ。
もっかい書いとくと、APIが不足してることはない。
995 あ sage 2017/11/11(土) 19:23:54.10 ID:X8lWnCzG
まあ、要らないカラムが多すぎるだけなら、
row,err:=sql.Queryで、
column,err:=row.Columns()
vals:=Make([]sql.RawBytes,len(column))
args:=Make([]interface,len(column))
for i:= range values {
args[i]=&vals[i]
}
でvalsとargsつくって、
Scanに(args...)で渡せば、
使うときにvals[i]をstring(vals[i])とかよしなにしちゃえるんじゃないの?
2017/11/11(土) 19:52:22.20ID:proXGFSN
4あ
2017/11/11(土) 19:54:54.11ID:X8lWnCzG5あ
2017/11/11(土) 19:57:12.37ID:X8lWnCzG >>2
あ、これrangeでvals受ける所をvalues受けてる。あとからargsが4文字だからvaluesもvalsにしよう、とか文字数とか調整してはいかんかったな。
あ、これrangeでvals受ける所をvalues受けてる。あとからargsが4文字だからvaluesもvalsにしよう、とか文字数とか調整してはいかんかったな。
2017/11/11(土) 23:47:05.71ID:LLMRc4SD
(前スレ)>>984
> 同意する。Goでデータベース操作の決定版がでないのが物語ってる。
>
> 逆にGAE/goのdatastoreを使うときはGoとの相性の良さを感じる。
> スキーマがGo側に設定することが決まっているから。
再度調べて、また考えて、大体理解した。
RDBはKVSと比較されるからKeyValueではないと勘違いしていたが、実はKeyValueそのものだ。
一方、静的言語は基本的にValueだけの世界で、Keyはコンパイル時に落ちてしまい、リフレクションするしかない。
ここが絶望的に相性が悪い。これはGoの問題ではなく、静的言語一般の問題だ。
だったらもうORMにしてしまえ、ということで、GAE/Goのdatastoreは見る限りそれに近い(と思う)
というか、静的言語でDB操作の決定版って、ORMじゃないと無理だろ。
自前のリフレクションはかなり死ねるし、そこを隠蔽してくれないと意味がない。
ただ、ORMまで持ち出すのなら「速度の為に」わざわざ静的言語を選ぶ理由がなくなってしまう。
DBで律速するのなら、動的言語でも大して変わらないはずだし、
管理も楽なら、もう動的言語で組んでしまえ、ってことになる。
(型の問題を回避する為にmapを使っても、同様に速度優位性のない無駄なシステムに成り下がってしまう)
意識したことはなかったが、静的言語では「型」を通じてプログラム全体がゆるく密結合してる。
これは「自分のみ」の世界では全く問題ないのだが、
JSON/RDB等「KeyValue前提の他人」と組み合わせる時にはかなり最悪だ。
PHPが糞言語なのは事実として、何だかんだで他を圧倒して生き残っているのには当然理由があり、
この相性問題はかなり大きい。
また、PHPerやJavaScripterが馬鹿にされる割には何とかなってるのにもこれが寄与してる気がする。
Java鹿が「オブジェクト指向で粗結合化(キリッ」してるのは割とミクロな粗結合化で、実はあまり意味がない。
今回のようにReadとWriteを丸ごと粗結合化することは静的言語(の優位性を保ったまま)では基本的に出来ない。
動的言語では速度は最初から捨ててて、組みやすさだけを取っており、割り切り感がいい。
この点、Goは若干中途半端なポジションだが、
Go = C+GC+型システム+リフレクションかな?
C++がリフレクションしたらかなり被るね。
> 同意する。Goでデータベース操作の決定版がでないのが物語ってる。
>
> 逆にGAE/goのdatastoreを使うときはGoとの相性の良さを感じる。
> スキーマがGo側に設定することが決まっているから。
再度調べて、また考えて、大体理解した。
RDBはKVSと比較されるからKeyValueではないと勘違いしていたが、実はKeyValueそのものだ。
一方、静的言語は基本的にValueだけの世界で、Keyはコンパイル時に落ちてしまい、リフレクションするしかない。
ここが絶望的に相性が悪い。これはGoの問題ではなく、静的言語一般の問題だ。
だったらもうORMにしてしまえ、ということで、GAE/Goのdatastoreは見る限りそれに近い(と思う)
というか、静的言語でDB操作の決定版って、ORMじゃないと無理だろ。
自前のリフレクションはかなり死ねるし、そこを隠蔽してくれないと意味がない。
ただ、ORMまで持ち出すのなら「速度の為に」わざわざ静的言語を選ぶ理由がなくなってしまう。
DBで律速するのなら、動的言語でも大して変わらないはずだし、
管理も楽なら、もう動的言語で組んでしまえ、ってことになる。
(型の問題を回避する為にmapを使っても、同様に速度優位性のない無駄なシステムに成り下がってしまう)
意識したことはなかったが、静的言語では「型」を通じてプログラム全体がゆるく密結合してる。
これは「自分のみ」の世界では全く問題ないのだが、
JSON/RDB等「KeyValue前提の他人」と組み合わせる時にはかなり最悪だ。
PHPが糞言語なのは事実として、何だかんだで他を圧倒して生き残っているのには当然理由があり、
この相性問題はかなり大きい。
また、PHPerやJavaScripterが馬鹿にされる割には何とかなってるのにもこれが寄与してる気がする。
Java鹿が「オブジェクト指向で粗結合化(キリッ」してるのは割とミクロな粗結合化で、実はあまり意味がない。
今回のようにReadとWriteを丸ごと粗結合化することは静的言語(の優位性を保ったまま)では基本的に出来ない。
動的言語では速度は最初から捨ててて、組みやすさだけを取っており、割り切り感がいい。
この点、Goは若干中途半端なポジションだが、
Go = C+GC+型システム+リフレクションかな?
C++がリフレクションしたらかなり被るね。
7あ
2017/11/12(日) 00:34:07.92ID:nCH5w166 リフレクションせんでも、アサーションで十分じゃないの?
プリミティブ以外が入ってる事もほぼ無いだろうし、
型無しのinterfaceから、特定のinterfaceへアサーションした方が幸せになれるだろ。
Stringerであれば良いとか。
プリミティブ以外が入ってる事もほぼ無いだろうし、
型無しのinterfaceから、特定のinterfaceへアサーションした方が幸せになれるだろ。
Stringerであれば良いとか。
8あ
2017/11/12(日) 00:42:26.80ID:nCH5w166 まずORMって何か考えれば良いと思うが、Object Relational Mappingだ。
リレーショナルデータベースに入れないのであれば、ORMじゃない。
ORMを、単にデータベースにオブジェクトを入れる道具の代名詞にしてるが、全然違う。
DatastoreはRDBではない。
CouchやMongoみたいなオブジェクトを放り込めるDB。そういう部分には向いてなくはない。
リレーショナルデータベースに入れないのであれば、ORMじゃない。
ORMを、単にデータベースにオブジェクトを入れる道具の代名詞にしてるが、全然違う。
DatastoreはRDBではない。
CouchやMongoみたいなオブジェクトを放り込めるDB。そういう部分には向いてなくはない。
9あ
2017/11/12(日) 00:53:31.35ID:nCH5w166 JsonとRDBを同様にキーバリューと考えてるみたいだが、「RDBは同じ列で構成された行の集合」、Jsonは「「キーで表された値の集合」の集合」であって、キーと列はかなり違う。なぜかと言うと、Jsonは「キーで表された値の集合」単体で成立するが、
「値の集合」は列がないと存在できないし、全ての値の列は同じである必要がある。
だから、マッピングせなならん。
別に、RDBでもID,シーケンス,区分列,値列で持ってメタテーブルみたいにしても良いんだから。
そこがテキトーなのは、単に作り方が雑なだけ。
ちなみに、タグに書いとけば、コンパイル時に抜け落ちる事はないので、それこそreflectで取れる。
「値の集合」は列がないと存在できないし、全ての値の列は同じである必要がある。
だから、マッピングせなならん。
別に、RDBでもID,シーケンス,区分列,値列で持ってメタテーブルみたいにしても良いんだから。
そこがテキトーなのは、単に作り方が雑なだけ。
ちなみに、タグに書いとけば、コンパイル時に抜け落ちる事はないので、それこそreflectで取れる。
2017/11/12(日) 02:15:58.04ID:EpH8iSoP
GoでRDB使う時に本当にきついのはSELECTとかLEFTJOINとか駆使して
カラムの構造がquery毎に違う可能性があるからなんだよね。
結局クエリごとに構造体作るしかない。
つまるところGoとRDBの組み合わせは避けるのがベスト。かも。
queryの結果から構造体をコード生成する方法があると良いんだけど
カラムの構造がquery毎に違う可能性があるからなんだよね。
結局クエリごとに構造体作るしかない。
つまるところGoとRDBの組み合わせは避けるのがベスト。かも。
queryの結果から構造体をコード生成する方法があると良いんだけど
2017/11/12(日) 02:48:56.74ID:miP6tQAF
てか、staticメソッド無しかよ!これどうなのよ?
ファクトリ作りたいんだが、まさか外に転がせと?ひどくね?
とりあえずクラスメソッドをインスタンスnilで呼んでみたがアウトだし。
なんかもう、色々酷い。
この言語は多分、ベタにしか書けないし、それをよしとする言語だ。
Cだと思えばそんなものだとも思えるが、これは逆に言うと、
Cしかやってないか、Cで何も問題を感じない奴が使う言語だね。
確かにこれだとC並みの速度は出るだろうが、これでは開発効率もC並みでしかない。
新しい言語と言うよりは、新しいBetterCの提案、と考えるべきなのか?
というか、これまで20年ほどでだいぶ積み上げたソフトウェア産業の資産、
「ソースコードはどう書けば見やすい/将来に渡ってメンテ出来るか」
をここまでガン無視していいのか?とも思える。潔いと言えば潔いが、どうなのよこれ?
若干意識高い系共によって肥大化した感のあるソフトウェア方法論へのアンチテーゼかよ?
ミニマリズムというか。
最近は一周回ってCを知らない馬鹿も偉そうにしているわけだが、
そいつらにとってはGoは新鮮なのかな?最近の言語とはだいぶ違うから。
ただ、GoはほぼCだぞいろんな意味で。
ファクトリ作りたいんだが、まさか外に転がせと?ひどくね?
とりあえずクラスメソッドをインスタンスnilで呼んでみたがアウトだし。
なんかもう、色々酷い。
この言語は多分、ベタにしか書けないし、それをよしとする言語だ。
Cだと思えばそんなものだとも思えるが、これは逆に言うと、
Cしかやってないか、Cで何も問題を感じない奴が使う言語だね。
確かにこれだとC並みの速度は出るだろうが、これでは開発効率もC並みでしかない。
新しい言語と言うよりは、新しいBetterCの提案、と考えるべきなのか?
というか、これまで20年ほどでだいぶ積み上げたソフトウェア産業の資産、
「ソースコードはどう書けば見やすい/将来に渡ってメンテ出来るか」
をここまでガン無視していいのか?とも思える。潔いと言えば潔いが、どうなのよこれ?
若干意識高い系共によって肥大化した感のあるソフトウェア方法論へのアンチテーゼかよ?
ミニマリズムというか。
最近は一周回ってCを知らない馬鹿も偉そうにしているわけだが、
そいつらにとってはGoは新鮮なのかな?最近の言語とはだいぶ違うから。
ただ、GoはほぼCだぞいろんな意味で。
2017/11/12(日) 03:04:41.10ID:miP6tQAF
>>10
> queryの結果から構造体をコード生成する方法があると良いんだけど
evalだね。Goには当然ないが。
C#でLINQでevalモドキを作っていたのがあったはずだが、
(心はC++のExpressionTemplateみたいなノリで、
演算子と評価順をデータとして記録しとけば、式程度ならデータ側だけで出来る、というもの)
それと同じノリで上手くいけるか、だね。
フィールドのオフセットさえ決まればそれは構造体なわけで。
ただ一般的にはオフセットはコードに静的に埋め込まれているから、
回避するにはオブジェクト指向の仮想関数テーブル(vtbl)みたいな仕組みが必要になる。
逆に言えば、これさえあれば動的な構造体を簡単に扱えるようになる。
JavaScriptは無駄に速くなっているが、この手の仕組み持っているんじゃないかな?
V8はプロトタイプ毎に型扱いでnewしてるようだし。(正式名称があったが忘れた)
> queryの結果から構造体をコード生成する方法があると良いんだけど
evalだね。Goには当然ないが。
C#でLINQでevalモドキを作っていたのがあったはずだが、
(心はC++のExpressionTemplateみたいなノリで、
演算子と評価順をデータとして記録しとけば、式程度ならデータ側だけで出来る、というもの)
それと同じノリで上手くいけるか、だね。
フィールドのオフセットさえ決まればそれは構造体なわけで。
ただ一般的にはオフセットはコードに静的に埋め込まれているから、
回避するにはオブジェクト指向の仮想関数テーブル(vtbl)みたいな仕組みが必要になる。
逆に言えば、これさえあれば動的な構造体を簡単に扱えるようになる。
JavaScriptは無駄に速くなっているが、この手の仕組み持っているんじゃないかな?
V8はプロトタイプ毎に型扱いでnewしてるようだし。(正式名称があったが忘れた)
14あ
2017/11/12(日) 08:21:19.77ID:nCH5w166 なんで既存コードが読めないんだろう。
セルフホストされるようになってから長いぞ。
セルフホストされるようになってから長いぞ。
2017/11/12(日) 10:25:55.87ID:fotpQfC1
>>11
goにクラスの概念はないぞ、ドキュメント読んで勉強し直せ
goにクラスの概念はないぞ、ドキュメント読んで勉強し直せ
2017/11/12(日) 10:28:45.53ID:miP6tQAF
>>13
お、ポインタレシーバならnilで受けられるのか?
しかしまあ、ベタで書くことにした。
というか、どうもその手の「ちょっと綺麗に書くテクニック」を全力で否定するノリのようだし。
なまじ隠蔽出来るから無駄に肥大化するのであって、管理が厳しくなったらパッケージを分けろ、なんだろ、多分。
まあ分からなくもない。
JavaScriptの関数スコープは最初は戸惑ったが、結局のところ関数を小分けにすればいいだけであって、
Cとかはなまじブロックスコープなんてあるから無駄にでかい関数になってしまうのも事実だ。
Nodeのコーディングルールなんて段々短くなってて、どうも今は「関数は10行にしろ」と言っているようだし。
(以前は19行だったと思った。今ググったら15行(多分更新されてないだけ)ってのはあった)
同様に、基本的にパッケージ内にベタで転がしておき、無理ならパッケージを分割、というのも妥当な方法ではある。
そもそもメソッドも(見た目は)ベタで転がってる訳だし。
まあこれはいいとしても、generic的な物がもうちょっとないと、昔の定義のコピペプログラムが必要になってしまう。
この点については何で端折ったのかよく分からんなあ。
C++のテンプレートは暴走気味だし、そういうのを嫌ったのかな?
まあいずれにしても、俺にとってはGoはbetterCとして理解した方がいいというのはかなりはっきりしてきた。
お、ポインタレシーバならnilで受けられるのか?
しかしまあ、ベタで書くことにした。
というか、どうもその手の「ちょっと綺麗に書くテクニック」を全力で否定するノリのようだし。
なまじ隠蔽出来るから無駄に肥大化するのであって、管理が厳しくなったらパッケージを分けろ、なんだろ、多分。
まあ分からなくもない。
JavaScriptの関数スコープは最初は戸惑ったが、結局のところ関数を小分けにすればいいだけであって、
Cとかはなまじブロックスコープなんてあるから無駄にでかい関数になってしまうのも事実だ。
Nodeのコーディングルールなんて段々短くなってて、どうも今は「関数は10行にしろ」と言っているようだし。
(以前は19行だったと思った。今ググったら15行(多分更新されてないだけ)ってのはあった)
同様に、基本的にパッケージ内にベタで転がしておき、無理ならパッケージを分割、というのも妥当な方法ではある。
そもそもメソッドも(見た目は)ベタで転がってる訳だし。
まあこれはいいとしても、generic的な物がもうちょっとないと、昔の定義のコピペプログラムが必要になってしまう。
この点については何で端折ったのかよく分からんなあ。
C++のテンプレートは暴走気味だし、そういうのを嫌ったのかな?
まあいずれにしても、俺にとってはGoはbetterCとして理解した方がいいというのはかなりはっきりしてきた。
2017/11/12(日) 10:39:35.54ID:q/8e/fjb
もう「味見」は終わった様だし、やっぱり go は使わなくてもいいんじゃないかな
2017/11/12(日) 11:07:28.87ID:miP6tQAF
>>17
いやまだ終わってないんだなこれがw
道草食いまくってるからだが。
ただ、GoはWebには不向きというか、新規機能追加等で変更を迫られた場合、
PHP/JavaScript等と比べて3-5倍のコード変更が必要になりそうだ。
そしてこの、変更時のコード量がCと比べてほぼ同量だ。だから開発効率はかなり悪い。
パッケージが揃っているからとっつきやすいだけで、
(ライブラリを熟知している)バリバリのC++使いにとっては魅力はほぼ無いだろう。
とはいえ、「とっつきやすいC」という存在価値があるのかもしれない。
というか、C++は取っつきにくすぎる。あれは完全に暴走してる。Linusが毛嫌いしているのも分かる。
とはいえ、Goでプロトタイピングするのは辛いのは分かった。
というか、はっきり言ってろくな言語がないなこれについては。
JavaScriptは非同期のおかげでかつてのgoto文プログラムみたいな構造になってしまうし、
PHPは言語仕様が糞過ぎて思わぬところでバグって引っかかりまくるし。
RubyもPythonも前方宣言必須のゴミ言語だし。
同期JavaScript(マルチスレッドだよ!)が出れば一人勝ちじゃないのかな、と思うが、
あいつらの非同期はもはや宗教だし。
いやまだ終わってないんだなこれがw
道草食いまくってるからだが。
ただ、GoはWebには不向きというか、新規機能追加等で変更を迫られた場合、
PHP/JavaScript等と比べて3-5倍のコード変更が必要になりそうだ。
そしてこの、変更時のコード量がCと比べてほぼ同量だ。だから開発効率はかなり悪い。
パッケージが揃っているからとっつきやすいだけで、
(ライブラリを熟知している)バリバリのC++使いにとっては魅力はほぼ無いだろう。
とはいえ、「とっつきやすいC」という存在価値があるのかもしれない。
というか、C++は取っつきにくすぎる。あれは完全に暴走してる。Linusが毛嫌いしているのも分かる。
とはいえ、Goでプロトタイピングするのは辛いのは分かった。
というか、はっきり言ってろくな言語がないなこれについては。
JavaScriptは非同期のおかげでかつてのgoto文プログラムみたいな構造になってしまうし、
PHPは言語仕様が糞過ぎて思わぬところでバグって引っかかりまくるし。
RubyもPythonも前方宣言必須のゴミ言語だし。
同期JavaScript(マルチスレッドだよ!)が出れば一人勝ちじゃないのかな、と思うが、
あいつらの非同期はもはや宗教だし。
2017/11/12(日) 11:10:17.27ID:mnpiucg8
長文だらけで追い切れんけど
愚、言語がヘボでカラム分からんとDB操作が出来ません
賢、いやいや、アサーションでこう書けば出来るじゃん?
愚、他言語だとこんなので出来るんだけど
賢、じゃ好きなので書けよ、どうぞどうぞ
まとめるとこんな感じ?
愚、言語がヘボでカラム分からんとDB操作が出来ません
賢、いやいや、アサーションでこう書けば出来るじゃん?
愚、他言語だとこんなので出来るんだけど
賢、じゃ好きなので書けよ、どうぞどうぞ
まとめるとこんな感じ?
20あ
2017/11/12(日) 12:03:16.36ID:2U0xoSHY >>16
ちょっときれいに書くテクニック、が他の言語と違うだけだよ。可変長引数に参照のスライスを渡す、とか、
取り敢えず受けて.(type)でswitchしてcaseに型書いて処理するとか。
ジェネリックに関しては、あれば良いなと思う事もあるが、実際やってみたらrangeで事足りたり、
chanにとにかく突っ込んで、空selectとcase xxx<-xxxchでさらに事足りたりと、便利な読み方はある。
システムコールのselectで複数のファイルハンドル待つ感じ。
>>18
多分ウェブに関して言えば、ちゃんとしてればPHPの工数の4番の1くらいになると思うよ。
ちなみに、JavaScriptでマルチスレッドマルチコアは、クライアントならWebWorkerやら、nodeなサーバならclusterとか色々ある。
ちょっときれいに書くテクニック、が他の言語と違うだけだよ。可変長引数に参照のスライスを渡す、とか、
取り敢えず受けて.(type)でswitchしてcaseに型書いて処理するとか。
ジェネリックに関しては、あれば良いなと思う事もあるが、実際やってみたらrangeで事足りたり、
chanにとにかく突っ込んで、空selectとcase xxx<-xxxchでさらに事足りたりと、便利な読み方はある。
システムコールのselectで複数のファイルハンドル待つ感じ。
>>18
多分ウェブに関して言えば、ちゃんとしてればPHPの工数の4番の1くらいになると思うよ。
ちなみに、JavaScriptでマルチスレッドマルチコアは、クライアントならWebWorkerやら、nodeなサーバならclusterとか色々ある。
21あ
2017/11/12(日) 12:10:41.95ID:2U0xoSHY そもそも、クエリの結果イコール構造体にならない事の方が多いでしょ。
構造体の入れたいフィールド(と読み捨てるカラムを放り込む値)の参照を持ったinterfaceのスライス投げるのが一番手早い。
入れたいフィールドのカラムを集めてinterfaceのスライスを返す関数用意しときゃ済むじゃん、ゼロクリアは保証されてるんだから。
構造体の入れたいフィールド(と読み捨てるカラムを放り込む値)の参照を持ったinterfaceのスライス投げるのが一番手早い。
入れたいフィールドのカラムを集めてinterfaceのスライスを返す関数用意しときゃ済むじゃん、ゼロクリアは保証されてるんだから。
2017/11/12(日) 12:18:47.91ID:EpH8iSoP
>>21
ちょっとわかりづらいからサンプルコードある?
ちょっとわかりづらいからサンプルコードある?
23デフォルトの名無しさん
2017/11/12(日) 13:50:03.49ID:EHhowjYE 構造体を自動生成するとして中身のわからん構造体をどうやって使うんだ?
24デフォルトの名無しさん
2017/11/12(日) 13:57:51.09ID:EHhowjYE 結局リスレクション使った遅いもんになるだけでしょ
過度の抽象化は害しかないって偉い人が言ってた
過度の抽象化は害しかないって偉い人が言ってた
25あ
2017/11/12(日) 14:26:56.37ID:dH1+f21j2017/11/12(日) 15:10:02.64ID:miP6tQAF
つーか、これ、構造体のメンバ名を都合3回書く必要があるじゃねーかよ!
度を超したクソッぷりにビビる。つーか、お前らマゾなのか?
1回目:type struct 内 ← うーん、まあ静的言語なら仕方ないか
2回目:rows.Scan 内 ← 速度の為なら仕方ないか、、、
3回目:メンバ名は大文字で始めてjsonタグをいちいち書け ← 死ね
PHPやJavaScriptでは1回も書かなくていいんだぜ!
さすがにこれには切れたよマジで。
https://qiita.com/vvakame/items/6719b3c90dfaa8220e44
度を超したクソッぷりにビビる。つーか、お前らマゾなのか?
1回目:type struct 内 ← うーん、まあ静的言語なら仕方ないか
2回目:rows.Scan 内 ← 速度の為なら仕方ないか、、、
3回目:メンバ名は大文字で始めてjsonタグをいちいち書け ← 死ね
PHPやJavaScriptでは1回も書かなくていいんだぜ!
さすがにこれには切れたよマジで。
https://qiita.com/vvakame/items/6719b3c90dfaa8220e44
2017/11/12(日) 15:14:41.46ID:mnpiucg8
>PHPやJavaScript
どうぞどうぞ
どうぞどうぞ
28あ
2017/11/12(日) 15:22:14.00ID:dH1+f21j29あ
2017/11/12(日) 15:25:33.81ID:NnV+WxW3 これで、Cをやってたからついてける、お前はGCの動くタイミングが、とよく言えるな。
Scanの実装見て喋ってんのかなぁ。
Scanの実装見て喋ってんのかなぁ。
30あ
2017/11/12(日) 15:31:37.75ID:dH1+f21j dynamicとかnewtonsoft.JsonのJObjectで受けないC#でもクラスのフィールドに属性つけなきゃならんし、こいつが何を問題にしてるかわからん。
cやcppで書いたらライブラリ使ってももっと地獄じゃん。
動的言語しかやった事無いから辛いと言ってるだけに見える。
cやcppで書いたらライブラリ使ってももっと地獄じゃん。
動的言語しかやった事無いから辛いと言ってるだけに見える。
2017/11/12(日) 18:57:59.72ID:miP6tQAF
前スレ>>977
まさか3回も書かされるとは思っていなかったから今更ながらxoを試した。
が、これもちょっと冗長だな。
標準で go generate がついている時点で、公式も糞っぷりを認めてる。
ASTとか完全に屋上屋を架してる。
ろくな解がない。
構造体メンバを1回書くところまでは許すとして、
Scanは構造体を受けろ、JSONはlowerCamelスイッチをつけろ、ってとこだね。
まさか3回も書かされるとは思っていなかったから今更ながらxoを試した。
が、これもちょっと冗長だな。
標準で go generate がついている時点で、公式も糞っぷりを認めてる。
ASTとか完全に屋上屋を架してる。
ろくな解がない。
構造体メンバを1回書くところまでは許すとして、
Scanは構造体を受けろ、JSONはlowerCamelスイッチをつけろ、ってとこだね。
2017/11/12(日) 19:10:52.14ID:q/8e/fjb
(最初に戻って) sqlx 使えば良いんじゃない
33あ
2017/11/12(日) 19:12:41.31ID:I2Yxw4dL 新参を足蹴にするような真似はしたくないが、
3回も書いたのは自分だろ…。
3回も書いたのは自分だろ…。
34あ
2017/11/12(日) 19:18:34.25ID:I2Yxw4dL 可変長引数を受ける関数には、...でスライスを渡せる。
構造体渡したら構造体の(カラム名と同じ(!))メンバに入れてくれる事を望んでるんだろうが、
型がハマらなかったらとか、そもそもクエリでasで別名つけてるかもとか、キャストしたけどasで同名つけてる、とか、クエリ側が勝手な事するリスクを全部解決して構造体に入れる手段を考えてから考えれば良いのに。
まぁmap[string]interfaceが落としどころじゃねえの?フワフワ適当なクエリ投げたいなら。
クエリ自体もGoに書かせたいなら、最早SQLと繋げる意味なかろうて。
構造体渡したら構造体の(カラム名と同じ(!))メンバに入れてくれる事を望んでるんだろうが、
型がハマらなかったらとか、そもそもクエリでasで別名つけてるかもとか、キャストしたけどasで同名つけてる、とか、クエリ側が勝手な事するリスクを全部解決して構造体に入れる手段を考えてから考えれば良いのに。
まぁmap[string]interfaceが落としどころじゃねえの?フワフワ適当なクエリ投げたいなら。
クエリ自体もGoに書かせたいなら、最早SQLと繋げる意味なかろうて。
2017/11/12(日) 19:29:15.19ID:q/8e/fjb
>>31
> Scanは構造体を受けろ、JSONはlowerCamelスイッチをつけろ、ってとこだね。
ま、↓にでも投げてみたら
ExperienceReports
https://github.com/golang/go/wiki/ExperienceReports
> Scanは構造体を受けろ、JSONはlowerCamelスイッチをつけろ、ってとこだね。
ま、↓にでも投げてみたら
ExperienceReports
https://github.com/golang/go/wiki/ExperienceReports
2017/11/12(日) 19:30:43.54ID:miP6tQAF
>>32
構造体で受けるだけならそうだね。
ただ、毎回リフレクションはかなり厳しいから、うまくキャッシュしてくれるかどうか。
refrectを見る限りシグニチャは発行してくれないっぽいし。
ポインタ演算を禁止しているから、CみたいにOffsetofの結果を配列でキャッシュできないのも残念な所だね。
使うときは速度/ソース確認必要といったところか。
今回は速度の味見だし、とりあえずベタで書いた。
ただ2回書きまでは覚悟してたが、3回とはね、、、
構造体で受けるだけならそうだね。
ただ、毎回リフレクションはかなり厳しいから、うまくキャッシュしてくれるかどうか。
refrectを見る限りシグニチャは発行してくれないっぽいし。
ポインタ演算を禁止しているから、CみたいにOffsetofの結果を配列でキャッシュできないのも残念な所だね。
使うときは速度/ソース確認必要といったところか。
今回は速度の味見だし、とりあえずベタで書いた。
ただ2回書きまでは覚悟してたが、3回とはね、、、
37あ
2017/11/12(日) 19:34:45.85ID:I2Yxw4dL2017/11/12(日) 19:37:07.63ID:miP6tQAF
>>35
さすがにGo歴1週間もないのに投げないよ。背景等もよくわからんし。
てか、同意するなら誰か投げてどうぞ。
てか、Go信者はこの言語のどこに惹かれてるんだ?
特に目立ったメリットはないような。
さすがにGo歴1週間もないのに投げないよ。背景等もよくわからんし。
てか、同意するなら誰か投げてどうぞ。
てか、Go信者はこの言語のどこに惹かれてるんだ?
特に目立ったメリットはないような。
2017/11/12(日) 19:37:19.23ID:EpH8iSoP
40あ
2017/11/12(日) 19:37:36.02ID:I2Yxw4dL ただの別名も指定せんクエリなら、構造体渡して、参照がセットされた([]interface{})返す関数だけでいけると思うが、なんかいかんのかな。
2017/11/12(日) 19:44:29.82ID:miP6tQAF
2017/11/12(日) 19:47:24.84ID:EpH8iSoP
>>38
俺的に気に入ってる点。
* 構文規約が言語側で確定してるから誰のgoコードでも見やすい。
* コードの管理周り。 正直他の言語でもコード管理は真似してる(ghqをつかって)
* 標準ライブラリが学習教材になってる感じ。
* goaがある。
正直一番最初に使いたい理由になったgoroutineは一番最初に触って以降触ってないな。
色々欠点もあるけど、なんかコード生成によるメタプログラミングを体得すれば解決する問題かも。と思っていてAST周りを学習中
俺的に気に入ってる点。
* 構文規約が言語側で確定してるから誰のgoコードでも見やすい。
* コードの管理周り。 正直他の言語でもコード管理は真似してる(ghqをつかって)
* 標準ライブラリが学習教材になってる感じ。
* goaがある。
正直一番最初に使いたい理由になったgoroutineは一番最初に触って以降触ってないな。
色々欠点もあるけど、なんかコード生成によるメタプログラミングを体得すれば解決する問題かも。と思っていてAST周りを学習中
44あ
2017/11/12(日) 19:47:27.64ID:I2Yxw4dL なんで、リフレクションとアサーションと言葉が違うかわかる?
2017/11/12(日) 19:47:57.59ID:miP6tQAF
46あ
2017/11/12(日) 19:52:21.47ID:I2Yxw4dL かつ、interfaceが指す先の型がScanner実装してたらそれで勝手にやってくれんじゃないかなぁ、これは勘違いかもしれんが。
まぁ、やりもせず、パフォーマンス計測もせず、思い込みで「これはリフレクションである」と言われても困るわ。
空回りしてんの俺か?
まぁ、やりもせず、パフォーマンス計測もせず、思い込みで「これはリフレクションである」と言われても困るわ。
空回りしてんの俺か?
2017/11/12(日) 20:00:44.01ID:q/8e/fjb
>>38
> てか、Go信者はこの言語のどこに惹かれてるんだ?
> 特に目立ったメリットはないような。
ある種のシミュレーションプログラムを作るのに goroutine + channel
で割合と簡単に書けちゃって、32 core 使って並列化したら実行時間が
1/25 程度に抑えられて…といった経験からかな。
> てか、Go信者はこの言語のどこに惹かれてるんだ?
> 特に目立ったメリットはないような。
ある種のシミュレーションプログラムを作るのに goroutine + channel
で割合と簡単に書けちゃって、32 core 使って並列化したら実行時間が
1/25 程度に抑えられて…といった経験からかな。
48あ
2017/11/12(日) 20:04:43.25ID:I2Yxw4dL ちゃんと言うと、Goのinterfaceはメモリ上に型情報をそもそも持ってるから、リフレクションせんでもほぼノーコストでアサーションできる、はず。
https://research.swtch.com/interfaces
https://research.swtch.com/interfaces
2017/11/12(日) 20:06:46.98ID:miP6tQAF
>>43
go fmtとか、パッケージ管理/ディレクトリ構造が言語に密着とか、確かにいい割り切りっぷりではある。
しかし他挙げてくれた点も、Go言語自体ではなくて、エコシステムの話だよな?
いやもちろんエコシステムも重要なんだが。
gorutineはパンダだろ。その意見(最初だけしか使ってない)は割とよく見るよ。
> コード生成によるメタプログラミング
まあCのマクロやC++のテンプレートよりはましかも。ソースが直接見えるという点で。
go fmtとか、パッケージ管理/ディレクトリ構造が言語に密着とか、確かにいい割り切りっぷりではある。
しかし他挙げてくれた点も、Go言語自体ではなくて、エコシステムの話だよな?
いやもちろんエコシステムも重要なんだが。
gorutineはパンダだろ。その意見(最初だけしか使ってない)は割とよく見るよ。
> コード生成によるメタプログラミング
まあCのマクロやC++のテンプレートよりはましかも。ソースが直接見えるという点で。
50あ
2017/11/12(日) 20:08:42.80ID:I2Yxw4dL goroutineはAPIサーバ書いたり、システム内でメッセージ投げ合うたぐいの物書いたらめちゃくちゃ便利だけどな。
用途次第だろ。
用途次第だろ。
2017/11/12(日) 20:09:45.01ID:EpH8iSoP
2017/11/12(日) 20:10:17.01ID:miP6tQAF
54あ
2017/11/12(日) 20:17:42.78ID:I2Yxw4dL 前スレ974で良いところ行ってたのに、突然のシッタカでグダグダ言う上に読解力に欠けてて、しかもリフレクションだと決めつけてて、
人の話も聞かんと、言葉が理解できないならコードは読むだろうと解説代わり書いて、
Cがわかるなら.sに落として眺めるだろうという期待も裏切り、
何やってるかまったくわからん。
人の話も聞かんと、言葉が理解できないならコードは読むだろうと解説代わり書いて、
Cがわかるなら.sに落として眺めるだろうという期待も裏切り、
何やってるかまったくわからん。
2017/11/12(日) 20:19:14.44ID:miP6tQAF
>>51
> 正規表現で変更とかよりよっぽど安心できる。
確かに。自前よりは公式解釈済みの構文木をもらえた方が100倍いい。
しかしそれ、渡されましても、、、ってのが普通だと思うが。
てか、これ見せてる言語ってこれまであったっけ?
最近はflycheckみたいなリントも流行ってるみたいだし、見せる方向なのか?
> 正規表現で変更とかよりよっぽど安心できる。
確かに。自前よりは公式解釈済みの構文木をもらえた方が100倍いい。
しかしそれ、渡されましても、、、ってのが普通だと思うが。
てか、これ見せてる言語ってこれまであったっけ?
最近はflycheckみたいなリントも流行ってるみたいだし、見せる方向なのか?
2017/11/12(日) 20:19:33.62ID:EpH8iSoP
>>49
俺にとってgorutineはたしかにパンダだったな。
構文規約が言語側で確定って割と言語仕様よりなんじゃないの。
Go言語の言語仕様は物足りさは感じつつってのはある。
interfaceがGoにおけるキモなんだけど機能不足感があって
関数の引数がなんでも受け入れokな interface{} 型になるとかなり残念になる。
多分interfaceにプロパティをokにしたり
type interfceC =interfaceA | intrefaceB
(interfaceCはinterfaceA か intrefaceBどちらかを満たす 直和型ってやつ)
みたいな定義をokにしたり、シンタックスシュガーだけど
type interfceC =interfaceA & intrefaceB
みたいな定義もokにしたら幸せというかジェネリクスに進化できる気がする
俺にとってgorutineはたしかにパンダだったな。
構文規約が言語側で確定って割と言語仕様よりなんじゃないの。
Go言語の言語仕様は物足りさは感じつつってのはある。
interfaceがGoにおけるキモなんだけど機能不足感があって
関数の引数がなんでも受け入れokな interface{} 型になるとかなり残念になる。
多分interfaceにプロパティをokにしたり
type interfceC =interfaceA | intrefaceB
(interfaceCはinterfaceA か intrefaceBどちらかを満たす 直和型ってやつ)
みたいな定義をokにしたり、シンタックスシュガーだけど
type interfceC =interfaceA & intrefaceB
みたいな定義もokにしたら幸せというかジェネリクスに進化できる気がする
2017/11/12(日) 20:23:04.06ID:EpH8iSoP
2017/11/12(日) 20:23:55.55ID:q/8e/fjb
>>52
はまる、はまらないで言ったらやっぱり……いや、もう何も言わないよw
はまる、はまらないで言ったらやっぱり……いや、もう何も言わないよw
59あ
2017/11/12(日) 20:24:47.34ID:I2Yxw4dL 人の話きかねえからな。
2017/11/12(日) 20:26:12.38ID:EpH8iSoP
何か得意分野があるってだけでその言語は魅力的じゃないの?
rustとか言語ヲタじゃないと触ろうってならないし。
goはCLIツールを作るためのライブラリも揃ってるし
ツール作る系でもおすすめ
rustとか言語ヲタじゃないと触ろうってならないし。
goはCLIツールを作るためのライブラリも揃ってるし
ツール作る系でもおすすめ
61あ
2017/11/12(日) 20:35:12.41ID:I2Yxw4dL 他の人もそれを踏まえて、って誰も勘違いしてなくねえか?
呆れるやつ、ASTいじりはいいぞ、気に入ってる点、諸々。
語るに落ちられてバカさらされて、なんでこんな言われなならんのだ。
呆れるやつ、ASTいじりはいいぞ、気に入ってる点、諸々。
語るに落ちられてバカさらされて、なんでこんな言われなならんのだ。
2017/11/12(日) 20:47:41.28ID:miP6tQAF
>>57
まじかよ!JavaScriptならevalできるし無限増殖できるぜ!って思ったけど、
俺が思ってたASTのフォーマットとものすごく違ってた。
これ完全に文字ベースだよな。
もうちょっとファンクションベースなものを期待してた。
メトリックスをASTから抜いたツールもあるようだが、これ相当死ねるだろ。
http://azu.github.io/slide/JSojisan/#7
まああくまでパースした直後のデータで、だからこそすべての用途に使えるってことなんでしょうな。
ただ、ここからコード生成も相当死ねると思うが。
まじかよ!JavaScriptならevalできるし無限増殖できるぜ!って思ったけど、
俺が思ってたASTのフォーマットとものすごく違ってた。
これ完全に文字ベースだよな。
もうちょっとファンクションベースなものを期待してた。
メトリックスをASTから抜いたツールもあるようだが、これ相当死ねるだろ。
http://azu.github.io/slide/JSojisan/#7
まああくまでパースした直後のデータで、だからこそすべての用途に使えるってことなんでしょうな。
ただ、ここからコード生成も相当死ねると思うが。
2017/11/12(日) 21:02:31.33ID:miP6tQAF
>>56
interfaceのプロパティってのは何に使うんだ?
俺は一応、Goのインタフェースシステム「実装してたらその型として使える」はありだと思っている。
平べったいダックタイピングというか、C++のtemplateを野良で転がしているのに近い。
貧弱かどうかって所まではまだ味見できてないから分からない。
直和や直積(でいいのか?)は別名でテンプレート書け、って文化なんだろ多分。
割とベタが好きな言語なんだと思うよGoは。
interfaceのプロパティってのは何に使うんだ?
俺は一応、Goのインタフェースシステム「実装してたらその型として使える」はありだと思っている。
平べったいダックタイピングというか、C++のtemplateを野良で転がしているのに近い。
貧弱かどうかって所まではまだ味見できてないから分からない。
直和や直積(でいいのか?)は別名でテンプレート書け、って文化なんだろ多分。
割とベタが好きな言語なんだと思うよGoは。
66あ
2017/11/12(日) 21:05:16.25ID:I2Yxw4dL 虚しくなるわ。悪かったな。interfaceの実装知ってて。
2017/11/12(日) 21:22:49.77ID:miP6tQAF
2017/11/12(日) 21:30:04.35ID:LJndNP2M
とにかく汎用ライブラリを作ろうとするなり触ろうとするとinterface{}型が登場するのは機能不足によるものだからもっと頑張れ。
と言いたい。コード生成で頑張るべきなんだろう。
goaはコード生成に頼りまくりのおかげでinterface{}型に出くわすことがなくて幸せ。
と言いたい。コード生成で頑張るべきなんだろう。
goaはコード生成に頼りまくりのおかげでinterface{}型に出くわすことがなくて幸せ。
70あ
2017/11/12(日) 21:35:31.60ID:I2Yxw4dL■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【地震速報】青森県で震度6強 沿岸部に津波警報 ★6 [ぐれ★]
- 「日の丸にバツ印」掲げた大学生 あいまいな国旗損壊罪に「怖い」 The Mainichi [少考さん★]
- 【音楽】BARBEE BOYS・KONTAが事故で四肢麻痺を公表、新体制で活動は継続 [少考さん★]
- 【テレビ】25年ぶり復活「炎のチャレンジャー」南原清隆&菊池風磨がMC 懐かし「電流イライラ棒」も [湛然★]
- 中国「捜索レーダー起動は各国の通常の手法」 火器管制用か回答せず [蚤の市★]
- 【映画】「果てしなきスカーレット」入場者プレゼント実施 細田守監督描き下ろし「歴代ヒロイン」色紙7種をランダム配布 [muffin★]
- 色づく世界の明日からっておもろい?
- 【閲覧注意】ちずちんな
- ぺこーら、地震で同僚が次々配信を止めるなか強行し続けるので悪目立ちするwww [268244553]
- 高市総理、睡眠時間30分😢
- フェリーの魅力を語ろう。
- 引越したんだがかなり大変だな
