Goについて扱うスレッドです。
GoはGoogleによって開発された言語です。
探検
Go language part 1
レス数が1000を超えています。これ以上書き込みはできません。
1デフォルトの名無しさん
2013/10/10(木) 12:04:51.78978デフォルトの名無しさん
2017/11/11(土) 13:51:58.52ID:LLMRc4SD >>977
自動コード生成ツールか。まあPHPとGoを同時使用するのならありでしょうな。
ただまあ、俺の場合はそうではなく、Go内で二重管理するのが気に入らない。
俺が試しているのは掲示板なんだが、PHPの場合は結局、
echo json_encode(fetch_all($db,"SELECT * FROM threads;")); // fetch_allは全読み関数
だからリード側はDBの型依存が全くない。(何が入っていても中身を全部吐き出すだけ)
結果、新規機能追加の場合はライト側の変更だけでよく、変更は1箇所で済む。
Goだとリード側も変更が必要になるのが気に入らない。
だから構造体に押し込んで、リードもライトもその構造体ベースでやれれば変更は1箇所で済む、
ということを考えているのだが、これはSQLの構造上厳しそうだ。
今sqlx読んでいるが多分無理だね。
自動コード生成ツールか。まあPHPとGoを同時使用するのならありでしょうな。
ただまあ、俺の場合はそうではなく、Go内で二重管理するのが気に入らない。
俺が試しているのは掲示板なんだが、PHPの場合は結局、
echo json_encode(fetch_all($db,"SELECT * FROM threads;")); // fetch_allは全読み関数
だからリード側はDBの型依存が全くない。(何が入っていても中身を全部吐き出すだけ)
結果、新規機能追加の場合はライト側の変更だけでよく、変更は1箇所で済む。
Goだとリード側も変更が必要になるのが気に入らない。
だから構造体に押し込んで、リードもライトもその構造体ベースでやれれば変更は1箇所で済む、
ということを考えているのだが、これはSQLの構造上厳しそうだ。
今sqlx読んでいるが多分無理だね。
979デフォルトの名無しさん
2017/11/11(土) 14:03:02.50ID:rrUNs59d まぁでも、それだったら無理して go を使わなくてもいいんじゃ
980デフォルトの名無しさん
2017/11/11(土) 14:14:23.09ID:proXGFSN >>979
だよね。静的言語を使う限りどうしようもない。
スキーマ設定をどこに置くかという問題だと思うが。
goの構造体からsqlのスキーマを作る
or
sqlのスキーマからgoの構造体を作る
の二択しかない。リフレクションを駆使して動的にスキーマ解決したいって
結局実行時エラーの可能性が出るだけだし。
だよね。静的言語を使う限りどうしようもない。
スキーマ設定をどこに置くかという問題だと思うが。
goの構造体からsqlのスキーマを作る
or
sqlのスキーマからgoの構造体を作る
の二択しかない。リフレクションを駆使して動的にスキーマ解決したいって
結局実行時エラーの可能性が出るだけだし。
981デフォルトの名無しさん
2017/11/11(土) 14:27:57.90ID:LLMRc4SD >>979
今回は味見なんだよ。
だから糞でもとりあえずコードを書いてどれくらい速いか試すよ。
とはいえ、RawBytesとか用意して最下層のコピーもケチるくらいだから、完全にノリがCだね。
これで遅いわけがないが、結局は管理コストとの兼ね合いだろうね。
俺はC出身だから付いていけるけど、今時ではないよなこれは。
俺はPHPでも十分速いと思っている。
というか、SQLiteのラッパとしてしか使う気がないから、せいぜい100行程度しか実行しないし、
言語間の差異はほぼ無く、DBの性能が見えるだけだと思っている。
でもまあ、さんざん「PHPは糞だ」という奴が居るから味見中な訳だ。
選択肢が増えること自体は悪いことではないし。
Node.jsは既に味見終了して、データセットが小さい時はPHPよりは速い結果が出た。
しかし大きい時はPHPよりも遅くなった。これはclusterしてないのでシングルスレッドの限界かと思っている。
ただ、Nodeの場合は単一プロセスだからメモリ側にキャッシュ出来、これだと当然ぶっちぎりで速いので、
現実的にはこれかな、といった感じ。
で、Goはどうなの?ってのが今。興味あるのなら以下にどうぞ。
https://meguca.org/g/2724701
Haskellerが現れたので引っ張り込む方向で考えてる。
君らがGoのを書いてくれるのならこちらも助かるし歓迎する。
今回は味見なんだよ。
だから糞でもとりあえずコードを書いてどれくらい速いか試すよ。
とはいえ、RawBytesとか用意して最下層のコピーもケチるくらいだから、完全にノリがCだね。
これで遅いわけがないが、結局は管理コストとの兼ね合いだろうね。
俺はC出身だから付いていけるけど、今時ではないよなこれは。
俺はPHPでも十分速いと思っている。
というか、SQLiteのラッパとしてしか使う気がないから、せいぜい100行程度しか実行しないし、
言語間の差異はほぼ無く、DBの性能が見えるだけだと思っている。
でもまあ、さんざん「PHPは糞だ」という奴が居るから味見中な訳だ。
選択肢が増えること自体は悪いことではないし。
Node.jsは既に味見終了して、データセットが小さい時はPHPよりは速い結果が出た。
しかし大きい時はPHPよりも遅くなった。これはclusterしてないのでシングルスレッドの限界かと思っている。
ただ、Nodeの場合は単一プロセスだからメモリ側にキャッシュ出来、これだと当然ぶっちぎりで速いので、
現実的にはこれかな、といった感じ。
で、Goはどうなの?ってのが今。興味あるのなら以下にどうぞ。
https://meguca.org/g/2724701
Haskellerが現れたので引っ張り込む方向で考えてる。
君らがGoのを書いてくれるのならこちらも助かるし歓迎する。
982あ
2017/11/11(土) 14:53:58.14ID:X8lWnCzG Cでこれ書いたら絶望的にめんどくさくない?
そもそもSQLサーバができることはSQLサーバに任せてストアドにするか、
データベース自体Goで書くか、なんかそうしないと、
インピーダンス差がでかすぎるのに2重管理しない、は無理じゃない?
2重管理が絶対的な悪ではないと思うけど。
そもそもSQLサーバができることはSQLサーバに任せてストアドにするか、
データベース自体Goで書くか、なんかそうしないと、
インピーダンス差がでかすぎるのに2重管理しない、は無理じゃない?
2重管理が絶対的な悪ではないと思うけど。
983デフォルトの名無しさん
2017/11/11(土) 15:20:24.76ID:LLMRc4SD >>982
誰もCで書くとは言ってないが、仮にCで書くとして、
ライブラリが揃っていれば、大して苦労しないと思うよ。
Goとは大差ないだろう。
ほぼローカルで動作してしまうのでGCがないと苦労するってこともないし、
型システムも100行程度のプログラムならウザイくらいで大してメリットないし。
動的言語の場合は既に言われているようにスキーマ管理が一元化出来る
(正確にはやらなくてもそのまま動くだけだが)
分だけ書く量は少なくて済む。
プロトタイピングには動的言語の方が向いてる。
なお今回の場合はGoがCに劣ることもないので、わざわざCで書き直すメリットはない。
(GCをほぼ使わないから速度低下もないし)
誰もCで書くとは言ってないが、仮にCで書くとして、
ライブラリが揃っていれば、大して苦労しないと思うよ。
Goとは大差ないだろう。
ほぼローカルで動作してしまうのでGCがないと苦労するってこともないし、
型システムも100行程度のプログラムならウザイくらいで大してメリットないし。
動的言語の場合は既に言われているようにスキーマ管理が一元化出来る
(正確にはやらなくてもそのまま動くだけだが)
分だけ書く量は少なくて済む。
プロトタイピングには動的言語の方が向いてる。
なお今回の場合はGoがCに劣ることもないので、わざわざCで書き直すメリットはない。
(GCをほぼ使わないから速度低下もないし)
984デフォルトの名無しさん
2017/11/11(土) 15:36:08.28ID:proXGFSN >>983
>動的言語の場合は既に言われているようにスキーマ管理が一元化出来る
>(正確にはやらなくてもそのまま動くだけだが)
> 分だけ書く量は少なくて済む。
> プロトタイピングには動的言語の方が向いてる。
同意する。Goでデータベース操作の決定版がでないのが物語ってる。
逆にGAE/goのdatastoreを使うときはGoとの相性の良さを感じる。
スキーマがGo側に設定することが決まっているから。
>動的言語の場合は既に言われているようにスキーマ管理が一元化出来る
>(正確にはやらなくてもそのまま動くだけだが)
> 分だけ書く量は少なくて済む。
> プロトタイピングには動的言語の方が向いてる。
同意する。Goでデータベース操作の決定版がでないのが物語ってる。
逆にGAE/goのdatastoreを使うときはGoとの相性の良さを感じる。
スキーマがGo側に設定することが決まっているから。
985あ
2017/11/11(土) 15:56:16.25ID:X8lWnCzG >>983
まー、確かに。
正直すぐ死ぬプログラムならメモリ管理もしない()という選択肢もあるわけだしな。
外の世界と相性の悪い言語だと言うことは確か。
形が適当なjsonとかとも同様にいちいちキャストがしちめんどくさいし。
c#で言うdynamicみたいな型がありゃ良いなとは思うが、コンパイル時に解決してる事を善とするので無いのは仕方ない。向いてないわ。
まー、確かに。
正直すぐ死ぬプログラムならメモリ管理もしない()という選択肢もあるわけだしな。
外の世界と相性の悪い言語だと言うことは確か。
形が適当なjsonとかとも同様にいちいちキャストがしちめんどくさいし。
c#で言うdynamicみたいな型がありゃ良いなとは思うが、コンパイル時に解決してる事を善とするので無いのは仕方ない。向いてないわ。
986デフォルトの名無しさん
2017/11/11(土) 16:18:54.52ID:LLMRc4SD というか、これはAPIが足りてないんだね。
(以下コードは文法があやふやなので参考程度で)
database/sqlはScanを使うのが定番のようだが、Scanではargsの可変長指定しかないのがいけない。
だから構造体の中身を確認するのにリフレクションが必要になってしまう。
type Thread struct {
no int
time int
body string
}
th := Thread{}
rows, err := db.Query("SELECT * from threads;")
err = rows.Scan(&th.no, &th.time, &th.body) // ここでばらすから中身を知らないといけない
とりあえずScanが構造体を受け、その構造体にScannerインタフェースを実装する方式なら、
リフレクションは回避出来るし、おそらく最高速度で動く。
ただ、このためのAPIがない。
err = rows.Scan(&th) // ばらさずに構造体を与える
func (th Thread) Scan(src interface{}) err // 各構造体でばらす。手間は増えるが最速のはず
DBを生で叩いたことがないから知らないが、DBからの出力が既に配列なのか?
或いは同様のことはポインタ配列で受ければいいので割り切ったか。(972参照)
>>984
GAE/Goはググってみたがよく分からん。
ただ今回はCREATE TABLE部分も自前で持つ為、スキーマ管理はGo側でも「本来は」出来る。
SQLの構造上、CREATE TABLE と INSERT はほぼ同じなのでPHP等ではSQL文字列を共有出来る。
だから1箇所にしか書かずに済んでた。ところがGoはリード側も必要だからぐぬぬ、ってなってる。
(以下コードは文法があやふやなので参考程度で)
database/sqlはScanを使うのが定番のようだが、Scanではargsの可変長指定しかないのがいけない。
だから構造体の中身を確認するのにリフレクションが必要になってしまう。
type Thread struct {
no int
time int
body string
}
th := Thread{}
rows, err := db.Query("SELECT * from threads;")
err = rows.Scan(&th.no, &th.time, &th.body) // ここでばらすから中身を知らないといけない
とりあえずScanが構造体を受け、その構造体にScannerインタフェースを実装する方式なら、
リフレクションは回避出来るし、おそらく最高速度で動く。
ただ、このためのAPIがない。
err = rows.Scan(&th) // ばらさずに構造体を与える
func (th Thread) Scan(src interface{}) err // 各構造体でばらす。手間は増えるが最速のはず
DBを生で叩いたことがないから知らないが、DBからの出力が既に配列なのか?
或いは同様のことはポインタ配列で受ければいいので割り切ったか。(972参照)
>>984
GAE/Goはググってみたがよく分からん。
ただ今回はCREATE TABLE部分も自前で持つ為、スキーマ管理はGo側でも「本来は」出来る。
SQLの構造上、CREATE TABLE と INSERT はほぼ同じなのでPHP等ではSQL文字列を共有出来る。
だから1箇所にしか書かずに済んでた。ところがGoはリード側も必要だからぐぬぬ、ってなってる。
987デフォルトの名無しさん
2017/11/11(土) 16:29:51.83ID:LLMRc4SD >>985
お前他スレも荒らしてた荒らしだろ。
この程度のプログラムで「メモリ管理(キリッ」とか言っちゃう時点でお前はCを知らないし、
お前みたいな馬鹿にはCは無理だ。
それで何故Cに話を振る?だれもCで実装しようともしてないのに。
普通にCが出来る奴なら鯖でDB読んでJSON返すだけのプログラムでリークはしないし、
リークしないように管理する(程のこともないが)に苦労することもない。
そもそもそれはGoで書いた時にGCがどこで動くか見えていれば分かるはず。
君はそこにも達していない。
お前他スレも荒らしてた荒らしだろ。
この程度のプログラムで「メモリ管理(キリッ」とか言っちゃう時点でお前はCを知らないし、
お前みたいな馬鹿にはCは無理だ。
それで何故Cに話を振る?だれもCで実装しようともしてないのに。
普通にCが出来る奴なら鯖でDB読んでJSON返すだけのプログラムでリークはしないし、
リークしないように管理する(程のこともないが)に苦労することもない。
そもそもそれはGoで書いた時にGCがどこで動くか見えていれば分かるはず。
君はそこにも達していない。
988デフォルトの名無しさん
2017/11/11(土) 17:10:37.92ID:ZUnF3Lay うめようず
989デフォルトの名無しさん
2017/11/11(土) 17:56:09.07ID:LLMRc4SD というか void* がないのね。
これではどうやっても fetch_all で隠蔽出来そうにない。
まあ void* なんて認めたら型システムは崩壊するから致し方無しか。
そしていきなりunsafeに手を出そうかと考えているわけだが、
これって Offsetofがあるって事は基本的にはマーシャル用なのかな?
これではどうやっても fetch_all で隠蔽出来そうにない。
まあ void* なんて認めたら型システムは崩壊するから致し方無しか。
そしていきなりunsafeに手を出そうかと考えているわけだが、
これって Offsetofがあるって事は基本的にはマーシャル用なのかな?
991あ
2017/11/11(土) 18:58:21.35ID:X8lWnCzG992あ
2017/11/11(土) 18:59:31.42ID:X8lWnCzG 嫌味が荒らしになるとは、ネットは京都より平和な場所になったんだなぁ。
993あ
2017/11/11(土) 19:03:39.05ID:X8lWnCzG994デフォルトの名無しさん
2017/11/11(土) 19:16:58.98ID:TpLoCFAx 次スレよろ
995あ
2017/11/11(土) 19:23:54.10ID: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])とかよしなにしちゃえるんじゃないの?
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])とかよしなにしちゃえるんじゃないの?
996デフォルトの名無しさん
2017/11/11(土) 19:26:08.40ID:LLMRc4SD997あ
2017/11/11(土) 19:26:19.52ID:X8lWnCzG1000あ
2017/11/11(土) 19:34:53.44ID:X8lWnCzG まあ、可変長受ける関数に実体を指すinterfaceの参照のスライスを...で渡せるのはと割と便利。
10011001
Over 1000Thread このスレッドは1000を超えました。
新しいスレッドを立ててください。
life time: 1493日 7時間 30分 2秒
新しいスレッドを立ててください。
life time: 1493日 7時間 30分 2秒
レス数が1000を超えています。これ以上書き込みはできません。
ニュース
- 【熊本】園児に強制性交か 保育所勤務の男を逮捕「性的な欲望が我慢できなかった」警察は余罪を調べる [七波羅探題★]
- 【前橋市】小川晶前市長とラブホテルで打ち合わせをした54歳男性職員を停職処分 今月末で依願退職するという [シャチ★]
- 【サッカー】元日本代表DF冨安がオランダ1部アヤックスと大筋合意か 現地メディア報じる [久太郎★]
- 日銀「歴史的」利上げ迫る 35年ぶりの年間上げ幅、0.5%の壁を突破 [蚤の市★]
- 【未成年NISA】つみたて枠、18歳未満は600万円上限 12歳で引き出し可能 [蚤の市★]
- 【埼玉】「無免許で高速道路で事故」トラックの追突事故で10代男性死亡 無免許過失運転致死の疑いでトルコ国籍の男(22)逮捕 戸田市 [ぐれ★]
- 高市早苗「竹島は日本領土」 [834922174]
- 中国の日本向けレアアースの輸出止まる、高市のせいで日本終了のお知らせ [931948549]
- あくたんのおまんこって甘そうだよな🤤
- e安倍晋三vs山上徹也にありがちなこと [452056903]
- 暖房やめて湯たぼんにしようと思ってる
- 🏡
