実行環境は linux/arm
Go言語でBattlefield4のバトルログAPIからユーザ情報を取得するライブラリを作りました。
bf4-stats
これはjsonから構造体にマッピングしてそれを返すだけのライブラリです。
これを使ったソフトウェアを手動で実行するとエラーはでませんが、cronに実行させると下記のエラーがでました。
panic: json: cannot unmarshal number 17179869184 into Go value of type int
これは、構造体のこの部分の変換で起こっていました。現在は修正したので、mapの値が[]int64
になっていますが、エラーが出ていた時は[]int
型になっていました。
つまり、手動で実行した時は[]int
型が64ビットintスライスとして評価され、cronで実行した時は32ビットintスライスとして評価されていたようです。
CPUアーキテクチャは同じはずなのでint型も手動と同じビット数で扱われると考えていましたが違うようでした。
まとめ
もしかしたらアーキテクチャがarmだからかもしれませんが、このようなことがあったので、大体のビット数がわかっていればちゃんとオーバーフローしないように型を定義したほうがいいみたいです。