どうも、@CreatorQsFです。我が家にもやっと春が舞い戻ってまいりました。
さて、僕はもともとCとPHPとMySQLでサービス作ってた人です。そんな中で世紀末ぐらい困ったことが会ったので記しておきます。
まず、PHPでの時わたしはDB関連は全て自作していました。これでも一応SQLかけるので。
ですが、Goに変えてからgithubなどのLibraryを積極的に使うようにしています。フレームワークも今はrevelを使ってます(╹◡╹)
そして、当然のごとくgorpを使いはじめるわけなんですが…これが意外と難しい。というよりPHPの成り上がり下克上果たせなかった系Goプログラマには結構問題点が多くて。私自身にですが。
まず、DBを使うのに、structと組み合わせるためにマッピングしなきゃならない。いや正確に言うと、今まではDBから取得したらそれが自動的にオブジェクトに落とし込めていたので、なんか気にすることなかったんですな。
だけど、最近のモダンなやつ見てるとどうもそうでもないらしい。構造体を作ってそこに落としこむのが主流なのかな。
ってことで、やってみたのはいいものの…
…動かないっす先輩。
思ったとおりに行かないっす
原因は、MySQLのcolumnにNULLが含まれているためでした。そこで、sql.NullStringの存在を知ります。
で、それを
for _, l := range list {
p := l.(*models.A)
fmt.Printf("%d,%t, %s\n", p.Id,p.Status,p.Url)
}
さて、僕はもともとCとPHPとMySQLでサービス作ってた人です。そんな中で世紀末ぐらい困ったことが会ったので記しておきます。
まず、PHPでの時わたしはDB関連は全て自作していました。これでも一応SQLかけるので。
ですが、Goに変えてからgithubなどのLibraryを積極的に使うようにしています。フレームワークも今はrevelを使ってます(╹◡╹)
そして、当然のごとくgorpを使いはじめるわけなんですが…これが意外と難しい。というよりPHPの成り上がり下克上果たせなかった系Goプログラマには結構問題点が多くて。私自身にですが。
まず、DBを使うのに、structと組み合わせるためにマッピングしなきゃならない。いや正確に言うと、今まではDBから取得したらそれが自動的にオブジェクトに落とし込めていたので、なんか気にすることなかったんですな。
だけど、最近のモダンなやつ見てるとどうもそうでもないらしい。構造体を作ってそこに落としこむのが主流なのかな。
ってことで、やってみたのはいいものの…
…動かないっす先輩。
思ったとおりに行かないっす
原因は、MySQLのcolumnにNULLが含まれているためでした。そこで、sql.NullStringの存在を知ります。
で、それを
for _, l := range list {
p := l.(*models.A)
fmt.Printf("%d,%t, %s\n", p.Id,p.Status,p.Url)
}
こんなかんじに調理したとします。
この青四角のところが大問題なわけで、最初こう書きました。
result string = p.Url
そうすると、みんな大好き型エラー。
で、次にこう。
result string = fmt.Sprintf("%v",p.Url)
いや、動いたんですけど…。問題はそうじゃなくて、吐出されたものがめちゃめちゃに汚い。オエッの方じゃなくて。
で、なんじゃこりゃと思って、次にこう。
result string = fmt.Sprintf("%T",p.Url)
ちなみに、%Tは型を表示します。
そうして、どうも構造体っぽいやつだな、と。
で、その中でもStringにほしい値が入っていたので、こう。
result string = smt.Sprintf("%s",p.Url.String)
万事解決。多分Cとかならすぐに気づいたんでしょうけど、どうもGoにまだ体がついて行かなくて…。そういう問題じゃないかも。w
というわけで、sql.NullStringを使ったら、最後にStringをつけると綺麗に値が出力できて幸せになれるよ、というお話でした。めっちゃ初心者っぽいなw
コメント
コメントを投稿