[過去ログ] Go language part 1 (1002レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
973(1): デフォルトの名無しさん [sage] 2017/11/11(土) 07:08:21.29 ID:qi+awpQj(1) AAS
>>972972(1): デフォルトの名無しさん [sage] 2017/11/11(土) 00:39:24.57 ID:LLMRc4SD(1/9) AAS
質問です。
先日始めたばかりでデリファレンスの仕方が分からなくて困ってます。
超初歩的ですが教えてください。
コードは以下と同類です。
外部リンク[html]:go-database-sql.org
これの 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使ってもいいのですが、そもそもデリファレンス出来ないのがよく分かりません。
Goにとっては、要素がポインタではなくてただの interface{} に見えている。
なのでデリファレンスできないというエラーになる。
方法としてあるのは、th := []*interface{}{...} にする方法。
ポインタの配列と宣言しているので、要素のデリファレンスが可能。
もしくは、要素ごとに、デリファレンスする前に、*intとかに型アサーション(ググって)をする。
その後でデリファレンスする。
974: デフォルトの名無しさん [sage] 2017/11/11(土) 09:52:19.27 ID:LLMRc4SD(2/9) AAS
>>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周りでも同様のことが想定されますし、そのための型スイッチってのも何だかなあ、という気がします。
愚痴になってしまってすいません。
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.235s*