Close

JSON-to-Goを使ってGoでjsonを扱う話(TOML-to-Goも)

JSON-to-Goを使ってGoでjsonを扱う話。 Open Weather Mapを使って、取得したjson形式の情報をGoで扱う。 https://openweathermap.org Open Weather MapのAPI叩くためにアカウント登録 まずは、こちらからOpen Weather Mapのアカウント登録をして、App IDを入手する。 https://openweathermap.org/appid 登録画面への遷移。 App IDの入手。 tomlのダウンロード こちらよりtomlをgoで読み込むためのパッケージをダウンロードしておく。 https://github.com/BurntSushi/toml 今回はApp IDの情報は外出しでtomlファイルに書いておいて、呼び出す動きにする。 コード作成 ディレクトリ構造は以下の通り。 password.cfgには、入手したApp IDの情報を記載しておく。 メインのコード全体は以下。 ポイントは、以下のjson構造をstructにて定義しているところ。 jsonの構造が複雑になればなるほど、一から、これを書くのは厳しいので、JSON-to-Go というツールを使う。 https://mholt.github.io/json-to-go/ 返ってきたjsonデータをコピペするだけで、Structを生成してくれる。 実行 あとは、実行すると、特定の値をとってきたりできる。 今回は、Weather配下のMain(天気情報)を取得した。 同様に、TOML-to-Goというツールもあるので便利。 https://xuri.me/toml-to-go/

goで、無ければディレクトリを作成した上で、ディレクトリ内のファイルに追記と上書きをする

goで、無ければディレクトリを作成した上で、ディレクトリ内のファイルに追記と上書きをする 最初は動かすコードのみワークスペースにある状態。 中身は以下の通り。 check_dir ()で、無ければディレクトリを作成する。 make_line ()は、ファイルに書き込む情報を作成しているだけで、今回はタイムスタンプを書き込むこととする。 append_file()は、ファイルに追記をする関数で、対象ファイルはappend_file.txt。 overwrite_file()、ファイルに上書きをする関数で、対象ファイルoverwrite_file.txt。 os.OpenFile(<対象ファイル>, <オプション>) はファイルを操作する関数で、いくつかオプションが設定できる。 O_RDONLY、O_WRONLY、O_RDWRのどれかは必ず指定しなければならない。 O_RDONLY:読み取り専用 O_WRONLY:書き込み専用 O_RDWR:読み書き可能 O_APPEND:追記 O_CREATE:無ければファイル作成する O_EXCL:O_CREATEと共に使われ、ファイルはすでにある場合はエラー O_TRUNC:上書き O_EXCLを使って、すでにファイルがある場合は、以下のようなエラーが生成される。 詳細はこちら。 https://golang.org/src/os/file.go それでは、先ほどのコードを実行。 このようにディレクトリとファイルが作成される。 append_file()関数は追記をしているため、実行するたびにファイルの行が増えていく。 overwrite_file()は上書きのため、何度実行しても、最新の行のみが記載される。

goで、関数名は大文字で始まらなければ、外部パッケージの関数は呼び出せない

結構ハマったのでメモ。 goで、関数名は大文字で始まらなければ、外部パッケージの関数は呼び出せない。 例えば以下のような構造のファイルがあるとする。 main-package.go内で、sub-package.go内の関数を呼び出したい。 sub-packageの中身は以下の通り。 大文字で始まるHellohello()は呼び出せるが、小文字で始まるhellohello()は呼び出せないことを確認する。 まずは、大文字で始まるHellohello()をお呼び出し。 正常に実行できる。 次に、小文字で始まるhellohello()をお呼び出し。 参照できないと怒られる。。。 以上

オフライン環境にgo環境を構築する

オフライン環境にgo環境を構築したいときの手順メモ。 インターネット環境のMacまたはLinuxに必要なものをダウンロード(Xインストール)して、オフライン環境のLinuxに持っていき、オフライン環境でgolang環境を構築するイメージ。 まずはインターネット環境のあるマシンで必要なものをダウンロードする。 必要モジュールをダウンロード (1)Golangそのもの こちらからお好きなものをインストール。 https://golang.org/dl/ curlでもwgetでも良いのでローカルに落としておく。 (2)goenv 無くても良いものだけど一応ダウンロード。開発環境に入れるので必要かも。バージョン管理用。 こちらにある。 https://github.com/wfarr/goenv (3)glide こちらも無くても良いものだけどダウンロードしておく。パッケージ管理用。 必要モジュールをオフライン環境へ持って行く これは環境依存になるので、なんらかの方法でオフライン環境へ、ダウンロードしたファイルたちを持って行く。 こちらを参考に。 ファイルやりとり方法整理整頓 GOを動かす ここからは、オフライン環境のLinuxから操作。 まずはgoから動くようにする。 GOPATHとGOROOTにパスを張る。 go_workが実際のコードを置いたりする場所、GOROOTがダウンロードしたgoを置いた場所とする。 ※今回はオフライン環境であり、好きな場所にコードをおきたいのでこのようにしているため、Goの思想とはあっていないかもしれません。。 動かしてみる。 動いた。 あとは、goコマンドが直接使えるようにパスを通しておく。 動かす。 Goenvを動かす Goenvも実際にダウンロードした場所までパスを通して、動かして見る。 Glideを動かす Glideも同様に実際にダウンロードした場所までパスを通して、動かして見る。 完成。