[過去ログ]
Go language part 1 (1002レス)
Go language part 1 http://mevius.5ch.net/test/read.cgi/tech/1381374291/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
973: デフォルトの名無しさん [sage] 2017/11/11(土) 07:08:21.29 ID:qi+awpQj >>972 Goにとっては、要素がポインタではなくてただの interface{} に見えている。 なのでデリファレンスできないというエラーになる。 方法としてあるのは、th := []*interface{}{...} にする方法。 ポインタの配列と宣言しているので、要素のデリファレンスが可能。 もしくは、要素ごとに、デリファレンスする前に、*intとかに型アサーション(ググって)をする。 その後でデリファレンスする。 http://mevius.5ch.net/test/read.cgi/tech/1381374291/973
974: デフォルトの名無しさん [sage] 2017/11/11(土) 09:52:19.27 ID: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周りでも同様のことが想定されますし、そのための型スイッチってのも何だかなあ、という気がします。 愚痴になってしまってすいません。 http://mevius.5ch.net/test/read.cgi/tech/1381374291/974
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.283s*