[Golang] [凡ミス] json.Marshal() の返り値が空になる


猛烈に凡ミスなので恥ずかしいのですが、やらかしてしばらく「???」となっていたので公開。

次のようなコードで json.Marshal() すると中身が空になります。 https://play.golang.org/p/8p56Yit9S5

type Hoge struct {
 uuid string
 body string
}
func main() {
 h := Hoge{uuid:"foo",body:"bar"}
 fmt.Println("struct:",h)
 j,_ := json.Marshal(h)
 fmt.Println(string(j))
}

結果:

struct: {foo bar}
{}

おわかりでしょうか。おわかりですよね。

構造体の変数がPrivateになっているせいですよね。 https://play.golang.org/p/0HTf4x7KWc

type Hoge struct {
 Uuid string
 Body string
}
func main() {
 h := Hoge{Uuid:"foo",Body:"bar"}
 fmt.Println("struct:",h)
 j,_ := json.Marshal(h)
 fmt.Println("json:",string(j))
}

結果:

struct: {foo bar}
json: {"Uuid":"foo","Body":"bar"}

最新記事

すべて表示

SQLite(sqlite3)で “no such table”

小ネタです。 SQLiteを使っていて "no such table" とエラーが出た場合、 DBファイル名の指定が空になっている、という凡ミスを起こしていないかを確認してみましょう。 ・・・ そういう凡ミスをしてしばし悩んだので… ファイル名の指定が空になっている場合、一時的なインメモリDBとして保存されます(※1)。 つまりDB接続を切断すると中身は消えます。 なので接続

アプリケーションサーバにポートを指定せずに起動すると?

最近、 Goで書かれたアプリケーションサーバが起動しない! ->原因: .env ファイルが欠けていた というドタバタがありました。 結局Goと関係ないですが、この時、 「あまりGoに慣れてないのでGoの問題かと…」「DockerまだよくわかってなくてDockerの問題かと…」 というような声があったのて、あえてGoで検証してみようと思ったわけです。 さて、Goでサーバサイドのシステムを作

GitLab 9.1.2 (MySQL) を 11.4.0 (PostgreSQL) にアップグレード

弊社ではかなり前からGitLab(CE)を自社環境で運用しているのですが、ふと気付くと、バージョンがだいぶ先に行ってしまっていました。 とくに最近のバージョンでは Auto DevOps なども使えるようになっていたりするので、さすがにそろそろキャッチアップしたいと考えたわけです。 現行の環境は次の通りです: GitLab 9.1.2 sameersbn/gitlab 使用 MySQL 5.6