Goについて扱うスレッドです。
GoはGoogleによって開発された言語です。
探検
Go language part 1
レス数が1000を超えています。これ以上書き込みはできません。
1デフォルトの名無しさん
2013/10/10(木) 12:04:51.78903デフォルトの名無しさん
2017/07/18(火) 21:22:05.30ID:UMkIx05v >>902
ライブラリは対応してなかったりで面倒だぞ
ライブラリは対応してなかったりで面倒だぞ
904デフォルトの名無しさん
2017/07/20(木) 16:06:01.17ID:TTDKN4T0 The Go Blog Toward Go 2
ttps://blog.golang.org/toward-go2
ようやくこれを読んだけど面白いこと発表したわけじゃないのな
何にも決まってないけどGo 2リリースに向けて手伝って!とか言ってるから信者は助けてあげればいいんじゃないかなぁ
問題提起だけでも助かるって言ってるからnull安全だのジェネリクスがないからダメって言ったら聞いてくれるはずだよ
ttps://blog.golang.org/toward-go2
ようやくこれを読んだけど面白いこと発表したわけじゃないのな
何にも決まってないけどGo 2リリースに向けて手伝って!とか言ってるから信者は助けてあげればいいんじゃないかなぁ
問題提起だけでも助かるって言ってるからnull安全だのジェネリクスがないからダメって言ったら聞いてくれるはずだよ
905デフォルトの名無しさん
2017/07/20(木) 16:14:08.52ID:hN2WxidD そうそう、ダメダメなんて抽象的なこと言ってても放置されるだけだってね
具体的な体験レポートを提出して説得しろってさ頑張れよ
具体的な体験レポートを提出して説得しろってさ頑張れよ
906デフォルトの名無しさん
2017/07/20(木) 21:02:59.35ID:9ngnJ+y5 goってcode generete推奨って感じだけど
generete自体はtemplate文字列とか使ってて
ライブラリ開発者は辛い思いしてるよね。
(xoのテンプレートいじるの辛い)
だから時期パージョンではAST出力とASTからbin生成をサポートして欲しいな。
そうするとaltGoみたいのが作り安くなって言語ごとカスタマイズ出来るようになるし
generete自体はtemplate文字列とか使ってて
ライブラリ開発者は辛い思いしてるよね。
(xoのテンプレートいじるの辛い)
だから時期パージョンではAST出力とASTからbin生成をサポートして欲しいな。
そうするとaltGoみたいのが作り安くなって言語ごとカスタマイズ出来るようになるし
907デフォルトの名無しさん
2017/07/23(日) 02:23:00.81ID:22lpzJ7z ジェネリクスの追加で、みんなハッピーになるのかな
仕様の変更や削減はいいけど、追加を最小限にとどめられるかが勝負だね
あと2進数リテラルは、重要だと思うんだけど、そんなことないの?
8進より、よほど役に立つと思うんだけど、8進リテラルって何か特種用途があるの?
ってか8進数なんて切り捨てて、アンダーバー付きの2進リテラルを追加した方が良かったと思うんだ
8進数なんて、誰が求めているのかよく分からないし、せめて0oにしてくれた方が・・・
こういうのを排除するのが、この言語の正しい姿勢だと思うんだけどね
仕様の変更や削減はいいけど、追加を最小限にとどめられるかが勝負だね
あと2進数リテラルは、重要だと思うんだけど、そんなことないの?
8進より、よほど役に立つと思うんだけど、8進リテラルって何か特種用途があるの?
ってか8進数なんて切り捨てて、アンダーバー付きの2進リテラルを追加した方が良かったと思うんだ
8進数なんて、誰が求めているのかよく分からないし、せめて0oにしてくれた方が・・・
こういうのを排除するのが、この言語の正しい姿勢だと思うんだけどね
908デフォルトの名無しさん
2017/07/23(日) 16:17:42.71ID:knasDU4O >>907
けっこう賛成
けっこう賛成
909デフォルトの名無しさん
2017/07/26(水) 10:18:59.22ID:ENBFGRGX >>907
合議制になるんだから提案してみたらいいんじゃない。
おれとしても賛成だよ。
個人的にはelixirのパターンマッチングでバイナリにもマッチングできる仕組みに感動して、
goでバイナリ操作したいならelixirみたいなパターンマッチング欲しいって思った。
ジェネリクスはほしいけどrustでいいかなって気もしてる。
合議制になるんだから提案してみたらいいんじゃない。
おれとしても賛成だよ。
個人的にはelixirのパターンマッチングでバイナリにもマッチングできる仕組みに感動して、
goでバイナリ操作したいならelixirみたいなパターンマッチング欲しいって思った。
ジェネリクスはほしいけどrustでいいかなって気もしてる。
910デフォルトの名無しさん
2017/07/28(金) 16:54:15.48ID:9dM+xDfx >>907
3bit区切りのデータを表現する時とかに判りやすい
3bit区切りのデータを表現する時とかに判りやすい
911デフォルトの名無しさん
2017/07/29(土) 13:11:38.29ID:7d+TUsbq 8進数……昔PC-88のCMD PAL文で使ったぐらいだな。
912デフォルトの名無しさん
2017/08/05(土) 12:25:03.33ID:ggnuHEiJ ジェネリクスじゃなくていいから
interfaceの結合型が簡単に作れるようにして欲しい
func Xxxx(readWriter io.Reader & io.Writer)
func Xxxx(readerOrWriter io.Reader | io.Writer)
とりあえずinterface{} が 関数のパラメータになってるの辛すぎだからそこを解消して欲しいわ
interfaceの結合型が簡単に作れるようにして欲しい
func Xxxx(readWriter io.Reader & io.Writer)
func Xxxx(readerOrWriter io.Reader | io.Writer)
とりあえずinterface{} が 関数のパラメータになってるの辛すぎだからそこを解消して欲しいわ
913sage
2017/08/07(月) 01:18:22.11ID:ncmD/ymY ちょっと触ってみた
一撃でランタイムなくても動くバイナリができたときはびっくりした
一撃でランタイムなくても動くバイナリができたときはびっくりした
914デフォルトの名無しさん
2017/08/08(火) 19:23:17.89ID:ljoKaOtb おめ
915デフォルトの名無しさん
2017/08/09(水) 13:45:53.99ID:tJ5llPZ8 そのバイナリだけでサーバーが起動するのも感動する
916デフォルトの名無しさん
2017/08/17(木) 01:04:47.91ID:5a8n6tS4 Go2ではコレクション操作の機能をもっと豊富に用意してほしい
forループ文だらけになるわ
forループ文だらけになるわ
917デフォルトの名無しさん
2017/08/17(木) 01:23:28.75ID:lKqFMmqx 本当これ
mapとfilterよこせや
mapとfilterよこせや
918デフォルトの名無しさん
2017/08/17(木) 08:19:52.91ID:7NUjepJC \ ループだらけフォォォーーーーッ! /
919デフォルトの名無しさん
2017/08/17(木) 09:19:08.10ID:wX4L2Jep >>917
これデファクトスタンダードなライブラリってないのかな
これデファクトスタンダードなライブラリってないのかな
920デフォルトの名無しさん
2017/08/17(木) 09:24:39.67ID:vK4PZ24H Ruby でも使ってればいいんじゃない
921デフォルトの名無しさん
2017/08/17(木) 09:43:34.47ID:EtIXwQlG なぜRustとかでなくRubyなのか
922デフォルトの名無しさん
2017/08/17(木) 09:46:20.42ID:lKqFMmqx >>919
ジェネリクスがないから型安全じゃなくなる
ジェネリクスがないから型安全じゃなくなる
923デフォルトの名無しさん
2017/08/17(木) 10:57:10.38ID:wX4L2Jep924デフォルトの名無しさん
2017/08/17(木) 11:47:09.52ID:lJ+MJ24Q ジェネリクス追加せずとも型推論強化でなんとかかんとか
925デフォルトの名無しさん
2017/08/17(木) 23:51:48.55ID:JDyXRi5Q golangで2chに書き込めない
クッキーの設定エラーが出る。ヘッダに入れてるんだけどな
あとレスポンスのsjis to utf8は出来たけどリクエストをutf8 to sjisする方法が分からない
クッキーの設定エラーが出る。ヘッダに入れてるんだけどな
あとレスポンスのsjis to utf8は出来たけどリクエストをutf8 to sjisする方法が分からない
926デフォルトの名無しさん
2017/08/18(金) 00:03:21.95ID:c33/jNGO いきなりgolangで書き込むんじゃなくて
主導の対話通信(telnetあたり)で2chへ書き込んで通信の内容でも確認してみたらよいんでない?
主導の対話通信(telnetあたり)で2chへ書き込んで通信の内容でも確認してみたらよいんでない?
927デフォルトの名無しさん
2017/08/18(金) 00:05:54.58ID:c33/jNGO go - Goで[]byteをshift-jisの文字列に変換する - スタック・オーバーフロー
https://ja.stackoverflow.com/questions/6120/go%e3%81%a7byte%e3%82%92shift-jis%e3%81%ae%e6%96%87%e5%ad%97%e5%88%97%e3%81%ab%e5%a4%89%e6%8f%9b%e3%81%99%e3%82%8b
https://ja.stackoverflow.com/questions/6120/go%e3%81%a7byte%e3%82%92shift-jis%e3%81%ae%e6%96%87%e5%ad%97%e5%88%97%e3%81%ab%e5%a4%89%e6%8f%9b%e3%81%99%e3%82%8b
928デフォルトの名無しさん
2017/08/18(金) 00:07:29.39ID:c33/jNGO Go言語で文字コード変換 - Qiita
http://qiita.com/uchiko/items/1810ddacd23fd4d3c934
Golang による文字エンコーディング変換 - Qiita
http://qiita.com/spiegel-im-spiegel/items/2e475b48226330aa5570
http://qiita.com/uchiko/items/1810ddacd23fd4d3c934
Golang による文字エンコーディング変換 - Qiita
http://qiita.com/spiegel-im-spiegel/items/2e475b48226330aa5570
929デフォルトの名無しさん
2017/08/18(金) 00:17:02.43ID:bO8OoBBY Set-Cookieが複数あったのが原因だった
すまん
すまん
930デフォルトの名無しさん
2017/08/18(金) 00:44:00.14ID:bO8OoBBY あ、書き込みは出来るけど文字化けするのか
>>926
node.jsでしかしたことなかった
>>927
>>928
http.NewRequest("POST", "https://"+params.server+".2ch.net/test/bbs.cgi?guid=ON", transform.NewReader(strings.NewReader(values.Encode()), japanese.ShiftJIS.NewEncoder()))
ってしてみたけど文字化けして書けない
>>926
node.jsでしかしたことなかった
>>927
>>928
http.NewRequest("POST", "https://"+params.server+".2ch.net/test/bbs.cgi?guid=ON", transform.NewReader(strings.NewReader(values.Encode()), japanese.ShiftJIS.NewEncoder()))
ってしてみたけど文字化けして書けない
931デフォルトの名無しさん
2017/08/18(金) 01:33:09.70ID:bO8OoBBY values.Encode()の時点でURLエンコーディング(UTF8)されるからそれをSJISにしても意味ないのか
やっと原因分かった
やっと原因分かった
932デフォルトの名無しさん
2017/08/18(金) 01:45:45.20ID:bO8OoBBY SJISのURLエンコードを出来るライブラリが見つからないのですが、何かないですか?
933デフォルトの名無しさん
2017/08/18(金) 04:24:15.42ID:Wk6Gpf/O strings.NewReader(values.Encode())
これ何やってんのさ
これ何やってんのさ
934デフォルトの名無しさん
2017/08/18(金) 05:00:28.28ID:Wk6Gpf/O こんなんで通らんの?
https://play.golang.org/p/WIuVrc6hL5
https://play.golang.org/p/WIuVrc6hL5
935デフォルトの名無しさん
2017/08/18(金) 05:03:09.61ID:Wk6Gpf/O >>934
あ、間違えた、URLエンコードじゃねえ
あ、間違えた、URLエンコードじゃねえ
936デフォルトの名無しさん
2017/08/18(金) 05:16:20.81ID:Wk6Gpf/O937デフォルトの名無しさん
2017/08/18(金) 06:41:42.32ID:mSCO2cNh 頑なにgoにgenericsはいらないって主張してた人たちの立場はどうなってるの?
938デフォルトの名無しさん
2017/08/18(金) 09:03:43.27ID:+X0+m8dy >>937
あれは要らないって言ってるわけじゃなくて無くても筋力で頑張るって言ってる
あれは要らないって言ってるわけじゃなくて無くても筋力で頑張るって言ってる
939デフォルトの名無しさん
2017/08/18(金) 11:29:59.19ID:vRHq3miw 別に立場変わらずgoにgenericsはいらないって主張してるでしょ
genericsが必要だって主張してる人たちが
Go2ならgenericsを採用してくれる機会があるはず!って盛り上がってる(?)だけで
ついでに例外とAssertも盛り上がってくれねぇかな
genericsが必要だって主張してる人たちが
Go2ならgenericsを採用してくれる機会があるはず!って盛り上がってる(?)だけで
ついでに例外とAssertも盛り上がってくれねぇかな
940デフォルトの名無しさん
2017/08/18(金) 11:33:40.78ID:+X0+m8dy 個人的にはinterface{}型が関数パラメータに多用されてしまう状況を改善してくれるだけでいい。
例外は別に無くてもいいかな。
例外は別に無くてもいいかな。
941デフォルトの名無しさん
2017/08/18(金) 12:04:12.59ID:eIpnBeVf 2ちゃんもutf-8化はよ
942デフォルトの名無しさん
2017/08/18(金) 12:09:30.77ID:bO8OoBBY943デフォルトの名無しさん
2017/08/18(金) 18:47:51.91ID:rPePw4sf944デフォルトの名無しさん
2017/08/18(金) 19:03:33.52ID:PB7aU8rD945デフォルトの名無しさん
2017/08/25(金) 10:47:42.16ID:+IyaXioz Go 1.9 is released
https://blog.golang.org/go1.9
https://blog.golang.org/go1.9
946デフォルトの名無しさん
2017/08/25(金) 16:47:51.80ID:a5MHugSq ついに1.9!
もう少しで2.0やん
もう少しで2.0やん
947デフォルトの名無しさん
2017/08/25(金) 18:58:27.43ID:eQ9TUNW0 次は1.10でしょ
948デフォルトの名無しさん
2017/08/25(金) 19:08:15.57ID:a5MHugSq あ、そっか
949デフォルトの名無しさん
2017/08/25(金) 21:04:31.34ID:wqoYH6g/ 1.20 = 2.0 になるって言ってんだろ
まだ先はなげーよな
まだ先はなげーよな
950デフォルトの名無しさん
2017/08/26(土) 00:46:54.39ID:8IY83KqL 某言語では、0.100とかいうことになってたね…
951デフォルトの名無しさん
2017/08/26(土) 01:02:11.77ID:UaCnfxPk >>950
何その言語
何その言語
952デフォルトの名無しさん
2017/08/26(土) 09:39:10.71ID:zUqg3XaP 言語じゃなくwineじゃないの?
953デフォルトの名無しさん
2017/08/26(土) 10:09:59.64ID:8IY83KqL D言語です、D言語
954デフォルトの名無しさん
2017/08/26(土) 10:36:59.91ID:XF+FkSFR golangを基礎から学ぶためにrubyのhttps://docs.ruby-lang.org/ja/2.4.0/doc/index.htmlに載ってる言語仕様みたいなのをgolangのドキュメントで探してるんですけど
どこをみたらいいですか?
どこをみたらいいですか?
955デフォルトの名無しさん
2017/08/26(土) 10:49:06.08ID:gyHjYOL6 Documentation - The Go Programming Language
https://golang.org/doc/
https://golang.org/doc/
956デフォルトの名無しさん
2017/08/26(土) 13:10:28.24ID:1Xp/S2sl957デフォルトの名無しさん
2017/08/26(土) 19:58:41.27ID:7lTOqKMJ >>956
golang.jpは古いしメンテされてなくて放置されてるので見ないように
golang.jpは古いしメンテされてなくて放置されてるので見ないように
958デフォルトの名無しさん
2017/08/27(日) 08:21:25.17ID:gv0iyIef 今更だけどGoglandアプデしたらmainパッケージ内で複数ファイルのビルドができるようになてた
言語専用のIDEがあるって理由で使ってる人はあんまりいないか
俺の開発の8割はIDEに支えられている…
言語専用のIDEがあるって理由で使ってる人はあんまりいないか
俺の開発の8割はIDEに支えられている…
959デフォルトの名無しさん
2017/08/27(日) 11:36:53.98ID:Fy+qgg0G GOPATH=~/goって設定してるんですけど
depを使うようになったのでGOPATH=~/foo:~/goな風に設定したんですよ
これでdep ensureすると自動的に~/foo/以下の適当な場所に人様のパッケージがインストールされるんですが
binコマンドが生成されないんです
depを使わずgo getでインストールするとbinコマンドが生成されるんですがdep使ってインストールしたらbinコマンドが生成されないんでしょうか?
例えばhttps://github.com/spf13/cobra
depを使うようになったのでGOPATH=~/foo:~/goな風に設定したんですよ
これでdep ensureすると自動的に~/foo/以下の適当な場所に人様のパッケージがインストールされるんですが
binコマンドが生成されないんです
depを使わずgo getでインストールするとbinコマンドが生成されるんですがdep使ってインストールしたらbinコマンドが生成されないんでしょうか?
例えばhttps://github.com/spf13/cobra
960デフォルトの名無しさん
2017/08/28(月) 00:07:23.17ID:d332SnKK961デフォルトの名無しさん
2017/08/28(月) 05:58:13.56ID:4ejthJEF >>956-957
改訂2版 基礎からわかる Go言語、古川昇(エイベル)、2015
golang.jp は、古川氏とエイベルの社員達が、翻訳していたらしいけど、
最近は、翻訳していないのか
Go Tour 日本語訳
https://go-tour-jp.appspot.com/welcome/1
改訂2版 基礎からわかる Go言語、古川昇(エイベル)、2015
golang.jp は、古川氏とエイベルの社員達が、翻訳していたらしいけど、
最近は、翻訳していないのか
Go Tour 日本語訳
https://go-tour-jp.appspot.com/welcome/1
962デフォルトの名無しさん
2017/09/12(火) 00:58:09.78ID:hQHe5647 誰が書いてもまどろっこしいコードになるのがGoの最大の強み
963デフォルトの名無しさん
2017/09/13(水) 23:59:51.38ID:NpFfvGPs >>362
逆でしょ。
逆でしょ。
964デフォルトの名無しさん
2017/09/14(木) 00:08:12.58ID:6Rx4F0Vi goto 推奨?
965デフォルトの名無しさん
2017/09/24(日) 03:36:18.82ID:I7KEdc5J 日本のおっさん共のgoコミュニティー気持ち悪いなぁ
966デフォルトの名無しさん
2017/09/24(日) 05:52:40.41ID:Kg+0Au0P 友達探しにコミュニティに参加するつもりでいて
気持ち悪いと思うのなら参加しなければ良い
技術的な事をもっと深く知りたくて
コミュニティに参加したいと思ってるなら
人見てコミュニティ選んでるコミュ障のお前の方が気持ち悪い
気持ち悪いと思うのなら参加しなければ良い
技術的な事をもっと深く知りたくて
コミュニティに参加したいと思ってるなら
人見てコミュニティ選んでるコミュ障のお前の方が気持ち悪い
967デフォルトの名無しさん
2017/09/24(日) 16:08:08.18ID:ZXx1BO+p 朝鮮のおっさん共だと気持ち悪く無いって意味じゃない?、同胞の精神だね
968デフォルトの名無しさん
2017/09/24(日) 19:43:27.73ID:W4+6Kt87 言語マニアが出した批判記事にクソヘボいコードが載ってて笑った
969デフォルトの名無しさん
2017/09/24(日) 23:14:09.61ID:7raCX1cz こんなとこで場外乱闘か
970デフォルトの名無しさん
2017/09/28(木) 12:31:06.65ID:h8WKWHlz type fSlice []float64
var pool = sync.Pool{
New: func() interface{} {
return make(fSlice, 0, 100)
},
}
go func(){
n := pool.Get().(fSlice)
...
pool.Put(n)
}()
20回に1回くらい
panic: interface conversion: interface {} is *main.fSlice, not main.fSlice
pool.Get().(*fSlice)なんてすると
panic: interface conversion: interface {} is main.fSlice, not *main.fSlice
で仕方なく
n,ok := pool.Get().(fSlice)
if !ok {...}した時に気づいたのだけど、Falseでも下の処理には影響しない
Falseだと100回のappendで何故かCapが128になる(Trueだと100)
この謎分かる?
var pool = sync.Pool{
New: func() interface{} {
return make(fSlice, 0, 100)
},
}
go func(){
n := pool.Get().(fSlice)
...
pool.Put(n)
}()
20回に1回くらい
panic: interface conversion: interface {} is *main.fSlice, not main.fSlice
pool.Get().(*fSlice)なんてすると
panic: interface conversion: interface {} is main.fSlice, not *main.fSlice
で仕方なく
n,ok := pool.Get().(fSlice)
if !ok {...}した時に気づいたのだけど、Falseでも下の処理には影響しない
Falseだと100回のappendで何故かCapが128になる(Trueだと100)
この謎分かる?
971デフォルトの名無しさん
2017/09/28(木) 13:36:21.42ID:h8WKWHlz 原因分かりました
pool.Put(n)の所、端折って書きましたが、実際はresetメソッド作ってそっちで(*n)[:0]してましたが
func(f *fSlice)reset(){
*f= (*f)[:0]
pool.Put(f) → pool.Put(*f)にすべきでした
}
サーセン
pool.Put(n)の所、端折って書きましたが、実際はresetメソッド作ってそっちで(*n)[:0]してましたが
func(f *fSlice)reset(){
*f= (*f)[:0]
pool.Put(f) → pool.Put(*f)にすべきでした
}
サーセン
972デフォルトの名無しさん
2017/11/11(土) 00:39:24.57ID:LLMRc4SD 質問です。
先日始めたばかりでデリファレンスの仕方が分からなくて困ってます。
超初歩的ですが教えてください。
コードは以下と同類です。
http://go-database-sql.org/varcols.html
これの dest:= の部分を
th := []interface{}{ new(int), new(string), new(string)}
にして読み込んだところ、
確かにポインタのスライスになっているようなのですが、デリファレンス出来ません。
(単に書き方が分からないだけですが)
試した結果は以下です。
fmt.Println(*th[0], " ", *th[1], " ", *th[2]) // invalid indirect of th[0] (type interface {})
fmt.Println(*(th[0]), " ", *(th[1]), " ", *(th[2])) // invalid indirect of th[0] (type interface {})
fmt.Println(th[0], " ", th[1], " ", th[2]) // 0x11f09b08 0x11ea1468 0x11ea1470
fmt.Println(th) // [0x11f09b08 0x11ea1468 0x11ea1470]
よろしくお願いします。
sqlx使ってもいいのですが、そもそもデリファレンス出来ないのがよく分かりません。
先日始めたばかりでデリファレンスの仕方が分からなくて困ってます。
超初歩的ですが教えてください。
コードは以下と同類です。
http://go-database-sql.org/varcols.html
これの dest:= の部分を
th := []interface{}{ new(int), new(string), new(string)}
にして読み込んだところ、
確かにポインタのスライスになっているようなのですが、デリファレンス出来ません。
(単に書き方が分からないだけですが)
試した結果は以下です。
fmt.Println(*th[0], " ", *th[1], " ", *th[2]) // invalid indirect of th[0] (type interface {})
fmt.Println(*(th[0]), " ", *(th[1]), " ", *(th[2])) // invalid indirect of th[0] (type interface {})
fmt.Println(th[0], " ", th[1], " ", th[2]) // 0x11f09b08 0x11ea1468 0x11ea1470
fmt.Println(th) // [0x11f09b08 0x11ea1468 0x11ea1470]
よろしくお願いします。
sqlx使ってもいいのですが、そもそもデリファレンス出来ないのがよく分かりません。
973デフォルトの名無しさん
2017/11/11(土) 07:08:21.29ID:qi+awpQj >>972
Goにとっては、要素がポインタではなくてただの interface{} に見えている。
なのでデリファレンスできないというエラーになる。
方法としてあるのは、th := []*interface{}{...} にする方法。
ポインタの配列と宣言しているので、要素のデリファレンスが可能。
もしくは、要素ごとに、デリファレンスする前に、*intとかに型アサーション(ググって)をする。
その後でデリファレンスする。
Goにとっては、要素がポインタではなくてただの interface{} に見えている。
なのでデリファレンスできないというエラーになる。
方法としてあるのは、th := []*interface{}{...} にする方法。
ポインタの配列と宣言しているので、要素のデリファレンスが可能。
もしくは、要素ごとに、デリファレンスする前に、*intとかに型アサーション(ググって)をする。
その後でデリファレンスする。
974デフォルトの名無しさん
2017/11/11(土) 09:52:19.27ID:LLMRc4SD >>973
最終的にはいけました。ありがとうございました。
> th := []*interface{}{...} にする方法
th := []*interface{}{new (int32), new(string), new(string)}
// cannot use new(int32) (type *int32) as type *interface {} in array or slice literal: *interface {} is pointer to interface, not interface
// cannot use th (type []*interface {}) as type []interface {} in argument to rows.Scan
これは駄目でした。new (int32)がポインタ配列に何故か入れられないという謎仕様?
全ての型はemptyインタフェース interface{} を実装しているのに、
全てのポインタ型はemptyインタフェースへのポインタを実装してない?
(rows.Scanでは受けられないというのはこちらの話ですが)
まあ今の段階ではよく分かりません。
> 要素ごとに、デリファレンスする前に、*intとかに型アサーション
fmt.Println(*(th[0].(*int32)), " ", *(th[1].(*string)), " ", *(th[2].(*string)))
こちらはいけたのですが、しかしこれではなあと。個別べた書きでは意味無いんですよね。
本当は構造体で受けたいのですが、sqlxしかないのかなあと。
(sqlxは内部で使用しているであろうリフレクションが遅そうでいや)
Goはリフレクションが遅くないとかいう落ちってあります?
リフレクション用のタグを別装備しているし、静的にリフレクションしてたりします?
というか動的言語(PHP/JavaScript)からの移植がこんな初歩的なところで躓くのは想定外でした。
動的言語前提の構造になっているとかなり辛いですね。
json周りでも同様のことが想定されますし、そのための型スイッチってのも何だかなあ、という気がします。
愚痴になってしまってすいません。
最終的にはいけました。ありがとうございました。
> th := []*interface{}{...} にする方法
th := []*interface{}{new (int32), new(string), new(string)}
// cannot use new(int32) (type *int32) as type *interface {} in array or slice literal: *interface {} is pointer to interface, not interface
// cannot use th (type []*interface {}) as type []interface {} in argument to rows.Scan
これは駄目でした。new (int32)がポインタ配列に何故か入れられないという謎仕様?
全ての型はemptyインタフェース interface{} を実装しているのに、
全てのポインタ型はemptyインタフェースへのポインタを実装してない?
(rows.Scanでは受けられないというのはこちらの話ですが)
まあ今の段階ではよく分かりません。
> 要素ごとに、デリファレンスする前に、*intとかに型アサーション
fmt.Println(*(th[0].(*int32)), " ", *(th[1].(*string)), " ", *(th[2].(*string)))
こちらはいけたのですが、しかしこれではなあと。個別べた書きでは意味無いんですよね。
本当は構造体で受けたいのですが、sqlxしかないのかなあと。
(sqlxは内部で使用しているであろうリフレクションが遅そうでいや)
Goはリフレクションが遅くないとかいう落ちってあります?
リフレクション用のタグを別装備しているし、静的にリフレクションしてたりします?
というか動的言語(PHP/JavaScript)からの移植がこんな初歩的なところで躓くのは想定外でした。
動的言語前提の構造になっているとかなり辛いですね。
json周りでも同様のことが想定されますし、そのための型スイッチってのも何だかなあ、という気がします。
愚痴になってしまってすいません。
975デフォルトの名無しさん
2017/11/11(土) 11:11:10.62ID:rrUNs59d new している意味がよく分からないけど、予め変数を割り当ててしまえば良いような?
rows, err := db.Query("select id, first_name, last_name from users")
:
var (
id int
firstName, lastName string
)
rows.Next()
err = rows.Scan(&id, &firstName, &lastName)
:
rows, err := db.Query("select id, first_name, last_name from users")
:
var (
id int
firstName, lastName string
)
rows.Next()
err = rows.Scan(&id, &firstName, &lastName)
:
976デフォルトの名無しさん
2017/11/11(土) 13:21:37.63ID:Zhof0cH3 >>975
それだとDBのレコード個別にコードが必要になる。
だから当然困るし、当然同じように困っている人も居て、ググると出てくる。
https://stackoverflow.com/questions/17840963/create-a-map-in-golang-from-database-rows
それでsqlxなのだが、見る限りこれ裸のGoでも出来るのではないかと思って試していたわけ。
newしている意味はない、というか見ての通り今は文法もあやしいので、
動くコードを探してそこからスタートしてる。
ただそもそもsqlでレコードをいちいち走査することもないから、やりたいのはまさにsqlxのこれで、
> pp := []Place{}
> err = db.Select(&pp, "SELECT * FROM place WHERE telcode > ?", 50)
> http://jmoiron.github.io/sqlx/ より抜粋
何故これが標準でないのかがよく分からない。
(ついでに言えば三項演算子がないのも変だと思うが。)
とはいえ、自前でsqlxバリの環境を整えるなら結局リフレクションしか(多分)なく、
これが静的言語の限界というか当然で、それならsqlxを使った方が多分マシ。
楽して速い言語かと期待していたが、正直プログラミングレベルはCと大して変わらないし、
1970年代で止まっている言語と揶揄されるのも分かる。
C+GC+型システムと考えた方がいいのかなこれは。
それだとDBのレコード個別にコードが必要になる。
だから当然困るし、当然同じように困っている人も居て、ググると出てくる。
https://stackoverflow.com/questions/17840963/create-a-map-in-golang-from-database-rows
それでsqlxなのだが、見る限りこれ裸のGoでも出来るのではないかと思って試していたわけ。
newしている意味はない、というか見ての通り今は文法もあやしいので、
動くコードを探してそこからスタートしてる。
ただそもそもsqlでレコードをいちいち走査することもないから、やりたいのはまさにsqlxのこれで、
> pp := []Place{}
> err = db.Select(&pp, "SELECT * FROM place WHERE telcode > ?", 50)
> http://jmoiron.github.io/sqlx/ より抜粋
何故これが標準でないのかがよく分からない。
(ついでに言えば三項演算子がないのも変だと思うが。)
とはいえ、自前でsqlxバリの環境を整えるなら結局リフレクションしか(多分)なく、
これが静的言語の限界というか当然で、それならsqlxを使った方が多分マシ。
楽して速い言語かと期待していたが、正直プログラミングレベルはCと大して変わらないし、
1970年代で止まっている言語と揶揄されるのも分かる。
C+GC+型システムと考えた方がいいのかなこれは。
977デフォルトの名無しさん
2017/11/11(土) 13:33:59.14ID:proXGFSN phpと同じ感覚でgoでdatabase使おうとすると死ぬよね。
結局go側とsql側のスキーマ二重管理になるから、そのままphpと同じノリで使えない。動的言語と静的言語の差だね。
じゃあどうするかというとsql側のスキーマからgoの構造体をコード生成する。
xo とか使う。
http://tdoc.info/blog/2016/07/06/xo.html
結局go側とsql側のスキーマ二重管理になるから、そのままphpと同じノリで使えない。動的言語と静的言語の差だね。
じゃあどうするかというとsql側のスキーマからgoの構造体をコード生成する。
xo とか使う。
http://tdoc.info/blog/2016/07/06/xo.html
978デフォルトの名無しさん
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を超えています。これ以上書き込みはできません。
ニュース
- バリ島で男子生徒ら集団万引きか、防犯カメラ映像が拡散 京都の大谷中学・高校が「窃盗行為」謝罪★4 [七波羅探題★]
- 中国軍機レーダー照射、トランプ氏沈黙突く 試される日本外交 [蚤の市★]
- 【地震】青森県で震度6強 長周期地震動も 津波注意報すべて解除 ★7 [ぐれ★] [ぐれ★]
- 【広島】「万引きした人を追跡」コンビニ店員の男性(46)を果物ナイフで刺したか 中国籍の少年(17)を殺人未遂容疑で現行犯逮捕 [ぐれ★]
- トランプ大統領 エヌビディア製AI半導体の中国輸出許可 安全保障重視の方針転換 [蚤の市★]
- 【サッカー】58歳カズ「オファーが来ている」 J3福島と近日中にも交渉 早ければ年内にも決断 [征夷大将軍★]
- 【悲報】高市早苗の擬人化がXで大バズりwwwwwwwwwwww [455031798]
- 高市が早くあの発言を撤回しないと、中国からもっと大きな制裁が飛んでくるぞ [805596214]
- 【動画】ファッションモデルまんこ、裸でランウェイを歩く。これがファッションだと言われて [749674962]
- 【画像】髙市さん「無職のシンママ支援を手厚くするため、世帯年収900万円以上の控除をカットします🙂」 [881878332]
- 早大名誉教授「高市内閣の高支持率はデータ操作か、支持している日本人がアホなのか」👈核心を突いてしまう [868050967]
- こんぺこ!こんぺこ!こんぺこ!🐰🏡
