emahiro/b/logs

勉強記録と書評とたまに長めの呟きを書きます

go

【Golang】部分文字列を抽出する

go

golangの文字列から特定の位置の文字を取り出したい時に [:] を使えます。 package main import ( "fmt" ) func main() { s := "abcdefg" fmt.Printf("%+v\n", s[:]) fmt.Printf("%+v\n", s[1:3]) } /* output > abcdefg > bc */ cf. https://play.golang.or…

GoLandでriotのtagファイルをシンタックスハイライトする

Overview GoLand(というかIntelliJ)がデフォルトで対応していないtemplateファイルをカスタム登録する方法 以前tmplファイルの設定方法は書きました ema-hiro.hatenablog.com 手順 前回と同様です。 Preference ▶ Editor ▶ FileType ▶ HTMLを選択。 riot.js…

Use httpmock with fmt

go

Summary golangのhttpのmocking packageである httpmock で fmt packageを使ってstring型に変換したときにハマった話を書きます。 httpmock packageはこちら github.com How to Use var resJson = ` { "id": 1, "name": "taro" } ` func TestHttpMock(t *tes…

GraphQLを書いてみた話

仕事ではjson-shemaを使ったRESTを使っています。 API定義がドキュメント化されていることの意義 マイクロサービスアーキテクチャを元に開発していると、コンポーネント間のインターフェースの定義なしにはやっていけないと感じています。 もしjson-schemaが…

Goにおける簡易だけど最低限の情報が入っているerror出力方法の知見

go

errorについての検討 golangはerrorまで含めて愚直に書くことが求められたりして、それはそれで慣れではあるなーと感じているのですが、errorのformatが人に依存したり、1人で個人開発とかしているとerrorをちゃんと書いてるのがめんどくさくなったりするの…

structのomitemptyの挙動と使い所の検討

go

golangのstructでjsonのencodingのためのpropertyに omitempty をつけた時の挙動とその使いどこを検討します。 omitemptyタグとは https://golang.org/pkg/encoding/json/#Marshal には以下の用に記載されている。 The "omitempty" option specifies that th…

structに埋め込んだmapの要素を上書きする

go

やりたいこと struct内に埋め込んだmapのfieldの値を上書きするという処理を考えます。 下記のようなサンプルコードがあったときに originalSamples のItemsの中身を上書きするような処理です。 type Samples struct { Items map[string]string } originalSa…

goで任意引数でtemplateでの表示を変えたりしたい場合の考察

go

golangで関数に任意引数を取り、その任意引数にmapを指定することで、template場でmapで定義したinterfaceを見て表示を変えたいという実装を考えます。 やりたいこと 以下のようなことをしたいと想定します。 func RendarHTML (flags ...map["string"]interf…

goのテストのカバレッジを計測する

go

関わっているプロダクトでテストのカバレッジ取得してみようと思ったので、標準で動作している機能を使ってgoのテストカバレッジを計測してみました。 coverageを計測する coverageを測定するpackageを指定して、カバレッジを図るオプション -cover を指定し…

【学習】「GOならわかるシステムプログラミング」~Chapter 3~

go

※「GOならわかるシステムプログラミング」の3章の学習記録です。 主に PNGファイルを分析してみる PNGファイルに秘密のテキストを入れてみる の2節の内容の学習記録です。 sample sampleコードは以下 package main import ( "bytes" "encoding/binary" "fmt"…

json.Unmarshalではnilの参照型へのmappingはできない

go

httpレスポンスを構造体にmappingする際に以下のようなコードを書くケースは多々あると思います。 ※ error handlingは割愛 // responseの取得 resp, _ := http.Get(url) body := resp.Body defer body.Close() // []byteへの変換 b, _ := ioutil.ReadAll(bod…

これからはgoのstreamを使っていこうと思った話

go

これからgoでjson形式のデータをstructにmappingする際にはstreamを使うことを決意した話です。 経緯 下記のエントリーに触発されました。 christina04.hatenablog.com goでjsonをstructにmappingすることをはじめ、 io.Reader のデータを扱うときは一度 []b…

goでAPIのスケルトンを作成する

以前書いた以下のエントリーからさらい一歩進めました。 ema-hiro.hatenablog.com ema-hiro.hatenablog.com 内容は net/http かgorilla/mux を使ってroutingを作る超薄いAPIサーバーを作成する際にこれだけコピれば簡単にapiサーバーを立てることができるみ…

GolangではてなのRSSを取得するクライアントを作成する

go

仕様 はてなのRSSのfeedのURLを登録する 登録したURLでRSSを取得する RSSをparseする 実装 sampleでは、はてなの「テクノロジー」のホットエントリーを使用する。 http://b.hatena.ne.jp/hotentry/it.rss 実際に叩いてみる $ curl -i http://b.hatena.ne.jp/…

goでmecabを動かす

go

簡単な分かち書きのCLIツール作ってみようと思ったのでmecabをgoで動かして見ました。 やったこと goでmecabを動かすこと mecab-golangのinstall 以下のmecabのクライアントを使いました。 github.com 最初に mecab をinstallし、mecab-config が入っている…

Amazon Product Advertising APIのレスポンスをパースする

go

やったこと Amazon Product Advertising APIを使ってISBNから書籍情報を取得するプログラムを書く際に、AmazonのAPIのレスポンスは json ではなく、xmlでデータが帰ってくるので、このxmlをGolangでparseするためにしました。 ※ 今時xmlかよ!っと思ってちょ…

Amazon Product Advertising APIを使ってISBNコードから書籍情報を取得する

go

やったこと Amazon Product Advertising APIを使って書籍情報を取得すること 書籍情報の検索フックにはISBNコードを使ったこと 利用する際にハマったこと 事前準備 以下は事前にやってあるものとします。 Amazon Associate への登録 Associate TagにこのIDを…

os.Openするときの相対パスの書き方

go

goで os.Open(filename string) を実行するときに読み取りファイルを特定のディレクトリにまとめておいたときに os.Open で指定する相対パスがどう決まるかのメモです。 答えはmain.goからの相対パスになります。 例えば以下のようなディレクトリ構成のとき …

depでginを入れる

go

やったこと depをつかってginをinstallして動かすまで。 depのinstall方法 以下を見て下さい。 ema-hiro.hatenablog.com depでginを入れる depでginをinstallします。 # projectのROOTにいるとする。 $ cd ./src/{project_name} $ dep init $ dep ensure -ad…

go ✕ ajaxを書いてみた

go

サマリ goで簡易的なajax通信するアプリを作ったのでそのメモ 構成 環境 jquery 3.2.1 go 1.9.2 ディレクトリ構成 - src - app - main.go - handler - handler.go - render - render.go - templates - index.tmpl sampleコード main.go var port = "8080" fu…

GoLandの設定をremoteで管理する

Golandの設定をremoteで管理したかったので、その設定方法をメモとして書いておきます。 背景 PC変えたりすると使っていたPCの設定が全て初期化されて1から作り直すのめんどくさいです。 PCやeditorくらいであればもしかしたら、設定ファイルをgithub等にあ…

QiitaのAPIで遊ぶ

go

サマリ APIで遊びながらgoの学習をするシリーズ第二弾で、Qiitaで記事を検索するクライアント goota をgoで書きました。 コードはこちら github.com demo ざっくり仕様 Requirement tagを指定できる。 tagはカンマ区切りでOR条件で検索出来る。 ストック数が…

githubのSearchAPIで遊んだ話

go

githubのsearchAPIを簡単にラップしたGUI作りました。 久しぶりにjqueryとか触ったらすごい懐かしい匂いがして色々つまりました。 request処理とかしててハマったところがあるので別でエントリでまとめようと思います。 コードは以下 github.com refs: はま…

Goでファイル読み込みを調べた話

go

サマリ io.Readerの読み込みついて調べた io.ReaderをWrapして文字列置換 io.Readerが一括読み込みでなくstream的な動作で順次読み込みされている io.Readerについて refs: io - The Go Programming Language io.ReaderはデフォルトのReadのWrap。 ioパッケ…

GAE/GOのversionを上げたらContextが違ってコードが動かなくなってた話

go

有名な話です。が、いざ自分が体験したので備忘録としてまとめます。 github.com 上記で上げられている netcontextとcontext周りで死ぬ というのに引っかかりました。 課題 go1.6上で以下のようなリクエスト比較するコードを書いてました。 ※ コードはあくま…

time.IsZero()の挙動でハマった話

go

サマリ goのtimeパッケージの IsZero() はUnixTime = 0ではない GAEのdatasotreのdefaultの時刻で IsZero() を使ってもtrueを返さない IsZero()メソッドについて refs: time - The Go Programming Language IsZero reports whether t represents the zero ti…

【続】FWに頼らないオレオレroutingを実装する

go

前回書いた記事の中でオレオレroutingを実装する際に標準の net/http パッケージだけだと足りないと書いてましたがこれ、間違いでした。 ema-hiro.hatenablog.com 標準の net/http パッケージだけでオレオレroutingを実装する方法は以下 main.go package mai…

GogLandでtmplファイルをhtmlのシンタックス対象に加える

いつからはわからないですが、GogLand EAPをアップデートしたらtmplファイルがhtmlのシンタックス対象から外れてて、htmlを開いてもxmlと判別されてエラーがうるさくなってしまったので、カスタムファイルとしてtmplファイルのときは、htmlのシンタックスを…

【go】FWに頼らないオレオレroutingを実装する

go

goでFWに頼らず、net/http だけで簡単なWeb Serverを立てたいと思ったので作ってみた。 routing設定 まず躓いたのはroutingをどうするかということ。 net/httpパッケージを使用する場合、全てmain.goにroutingを書いてしまうことになりますが、FWの構造に則…

depを使ってみる

go

golangのオフィシャル謹製パッケージマネージャ「dep」 github.com 個人プロジェクトではglideから乗り換えました。 install 公式の手順に則っておけば問題ないです。 Macでは brew でインストール出来ます。 $ brew install dep ディレクトリ構成 - $GOPATH…