Month: August 2018

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()をお呼び出し。 参照できないと怒られる。。。 以上

Gitの基本操作_その2

Gitの基本操作の続き 前提 Githubは複数名で開発ができるツールであり、Branchというそれぞれのリポジトリを持つことができる それぞれがそれぞれのBranchで開発を進めて、よきところで合体させるというイメージ ただし、今回は、他の人(someone)が同じファイルを編集していて、うまいこと合体(merge)できなかったので、 fetchとmerge toolを使ってうまいことmergeさせる、というシナリオもやる ブランチを作る 何はともあれ、まずはbranchを作る 名前はyoshiとする 変更してpushしたりするとremote repositoryの方でもbranchができたのが確認できる 選択すると、yoshi branchの変更点が反映されている pullリクエストとmaster branchへのmerge yoshi branchで変更した内容をmaster branchへmergeさせる Githubの画面で操作となる yoshi branchの画面で「Compare & pull request」をクリック 適当に変更についてのコメントをつけつつ、「Create pull request」をクリック Pull requestのレビュー画面へ飛ぶ 本当はここでレビュアーがやんやコメントを書きつつ、修正しつつ、やんややんや議論をする そして良ければ、「Merge pull request」 これでMaster branchにyoshi branchの変更内容がMergeされる 変更してpush失敗まで そしてここからは、自分が編集しているうちに他の人がMaster branchを変更して、自分の変更がpushできないケース 変更差分を作る git pushしようとすると失敗する git fetch こんな時は、一度fetchを使って、他の人の変更差分をダウンロードする branchはyoshiのまま merge toolで変更編集 このままでは、mergeできないので、どのように合体させるか編集させる必要がある 色々やり方があると思うが、git merge toolを使う ※前提としてvimが使えるようになっている必要がある あと、以下の設定も入れておく …

Gitの基本操作_その2 Read More »

Gitの基本操作

Gitの基本についてまとめ 前提 なるべくCLIでの操作(SourceTreeとか使わない) GitHubを使う https://github.com 基本 リポジトリを作成する GitHubの画面でリポジトリ作成 ※GitHub使うにはアカウント登録が必要 作成すると以下のような画面になるので、インストラクションの通り操作すれば良いのですが、 一応以下より詳細メモ、CLIで操作します 操作概要 これから操作する概要は以下の通り、右のWorkSpaceでの変更を左のRemote Repositoryに送って行くイメージ なぜこんなに多段になっているかというと、変更点などを後々管理しやすくするためで、特にチーム開発などをすると利点を理解できるらしい gitを始める 試しにREADME.mdファイルを作ってみる git addとgit commit リモートブランチの追加とgit push 確認 これで晴れてリポジトリが作成できた 参考:Commitまでの作業で確認するためのコマンド ステージング (git add)状況を確認する時には「git status」、変更差分を確認したい時には「git diff」を使う git add前のステージング状況確認 git add前の変更差分確認 git addとステータス確認 Git Clone 次は、もともとあるリモートリポジトリをローカルにダウンロードする作業 GitHubのリポジトリ画面からURLをコピー コピーしたURLをgit cloneに続けて入力すればローカルにリモートリポジトリをダウンロードすることができる Commitを消したい Commitをしてしまったが、消したい時 例えば、こんな感じで先ほどのREADMEファイルに一行ずつ追加→Commitを繰り返したとする commit履歴は「git log」で確認できる change3に戻したいとして、一旦Commit IDを使って差分を確認する よければ戻したいCommit IDを指定して戻す 直前ならHEAD^とかで戻せるが、自分的にはIDをしっかり指定した方が良いと思っている logを確認すると戻っている addを消したい addを消すのはcommitを消すより簡単で「git …

Gitの基本操作 Read More »