Go

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も同様に実際にダウンロードした場所までパスを通して、動かして見る。 完成。

goのバージョン管理(goenvのインストール)

pythonのpyenvのように、goにもバージョン管理ができる「goenv」があったのでインストール 以下エラーが出たので、 homebrewアップデート 何も起こらなかったが、これで無事にインストールできた 何もインストールされていない状態 せっかくなので、いくつか入れてみる まずはどんなバージョンがあるかチェック どのバージョンが流行っているのかわからないので適当に入れてみる 入っている

golangでbot作成

兎にも角にもgoに慣れよう、とのことで、slack botをgoで作ってみた。 以下の記事を大変参考にしました。 今更やけど、Go言語でSlack APIを使ってみた!! 動きとしては、とあるキーワード(今回は#golang)のtweetsを拾ってslackにポストするもの。 # go get anaconda tweet apiを使うにはanacondaがいいらしい。 # GOPATH/GOROOTの定義 # goのファイル構造 ファイル構造はこんな感じに。 実行ファイルはsrcの下に置くのがお決まり Goコードの書き方 Goコードはワークスペース内に置いておく必要があります。ワークスペースはルートに以下の3つのディレクトリを持つディレクトリ階層です。 srcはパッケージに構成された(1ディレクトリに1パッケージ)Goのソースファイルを含み、 pkgはパッケージオブジェクトを含み、 binは実行形式コマンドを含みます。 # 実行ファイルの用意 # 変数を他パッケージから読み込む 先ほどの引用、よく見ると「1ディレクトリに1パッケージ」と書いてある。 srcはパッケージに構成された(1ディレクトリに1パッケージ)Goのソースファイルを含み、 素直に、src配下にディレクトリを作成して変数を収めるファイルを配置 変数を収めるコードの冒頭にパッケージ名を定義する(goファイルはどれもパッケージの必要) この時、変数の冒頭は必ず「大文字」で記述する! じゃないとこうなる 読み込むファイルでは、packageとしてimportすること、 「パッケージ名.変数名」で記載することを忘れない # 実行 これで問題なく動くはず 意味はわからないがtweetは拾えている。

go tourをmacで動かす

何か以下のエラーが出てきてgotourをローカルで動かせないよ。という話。 オンラインのは以下 A Tour of Go goのバージョン やること これで実行できる  

Go始め

pythonより速いと噂のgoをインストールしてみる。 インストール hello worldのコード作成 エラー 当初、ファイル名をgo_test.goにしていたから動かなかった。 http://stackoverflow.com/questions/29136488/go-no-buildable-go-source-file-in ビルド 今度は成功 何かできてる 実行 環境づくりの続きは以下を参考に。 goのバージョン管理(goenvのインストール) goのパッケージ管理(glideのインストール)