emahiro's ProgrammingBlog

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

【go】QiitaのAPIで遊ぶ

go

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

githubのAPIで遊んだ話 その1

go

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

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…

goのsortで複数条件でのsortを実現する上で考えたこと

go

サマリ 特定のModelに対して複数条件でsortしたい場合の実装方法についての考察 実装方法 sortしたいfield毎にモデルにsortのinterfaceを実装をする - ➀ embedで親のsortパッケージを継承する(sort条件を上書きする) - ➁ ➀のとき sortしたいStructのfield毎…

goでprivateメソッドをテストする

go

サマリ go でのprivate methodをテストでcallする方法 テスト手順 goでprivateメソッドをテストファイルからcallする場合には、同一package内においてはファイルが異なっても、同じpackage内に存在するprivate methodを呼ぶことができる というgoの仕様を利…

(続)goでのhttpの書き方あれこれ

以前書いたこれの続き ema-hiro.hatenablog.com 以前書いたgoでのhttpの書き方の内容の続編です。 Postの書き方とAutorizationヘッダーを付けたリクエストを構築するときの方法を備忘録としてまとめました。 標準パッケージはこちら https://golang.org/pkg/…

AbemaTV Developer Conference に参加してきました。

ちょっと遅刻してしまったけど、21日にAbemaTV Developer Conferenceに参加してきました。 (ほとんど個人のメモです。) 感想 先に感想だけ書いておきます。 ※ 僕向けのメモよりスライド探したほうがわかりやすいと思うので(笑) 感想としては、 Abemaのモニ…

webpack + typescript

なぜtypescript? MSが作ってGoogleが採用したので、フロントエンド界隈でtypescriptがしばらく積極的に使われて来そうな気が予感がしたのと、そろそろフロントエンドのキャッチアップしとかないとなーと感じ始めていたので... typescriptの導入 typescript…

webpackでhtmlファイルも出力する

ema-hiro.hatenablog.com 昨日の上記エントリへの追記 TODO htmlファイルをdist以下に作成していましたが、frontendのファイルはsrc以下に管理します。 webpackでコンパイルしたらdist以下にhtmlファイルも出力させます html-webpack-pluginを使います insta…

いまさらだけどyarn + webpackを試す

仕事の中でjsの開発環境を構築する機会があったので、自前でes6をコンパイルする環境をととえてみた備忘録。 jsは動きが早くて色んなツールが出て来るなか、一定出尽くして落ち着いてきそうな感じをここ最近感じていたので、ようやく少しずつキャッチアップ…

goでのhttpの書き方あれこれ

goの標準 goでhttpの処理を書きたいときはnet/httpパッケージを使う。 強力なパッケージなので、基本これを使うで、やりたいことの殆どはまかなえてしまうと思う http.Get(url) package main import ( "fmt" "io/ioutil" "net/http" ) func main() { resp, e…

The Twelve-Factor App を読む

ちょっと前にはてブで上位に上がっていた以下のスライド speakerdeck.com の中に出てきていた「The Twelve-Factor App」を読んだ感想を書く。 原典の邦訳はこちら ▶ https://12factor.net/ja/ 今更感があるがちょっと最近基礎が揺らいでいるなという感覚もあ…

goで一時的なスクリプトを書く方法

go

Goで開発しているときに 標準パッケージの動作確認したい ライブラリの動作確認したい 簡単なスクリプト(HTTPやgoroutineなど)を書きたい と思って調べてみました。 Rubyならirbやpryを使ってコンソールで簡単な動作検証を行えたり、変数の内部見ることが…

GoonのGet()とGetAll()の違いでハマる

Go+GAEの環境でCloudDataStoreからデータを取得するときに Get() GetMulti() GetAll() の挙動の違いでハマったので備忘録として挙動をまとめておきます。 Datasotreのライブラリ datastore https://godoc.org/google.golang.org/appengine/datastore googlea…

appengineのmemcacheを使う

GAEではmemcache一択 appengineのmemcacheパッケージを使ってみました。 リファレンスはこちら https://cloud.google.com/appengine/docs/standard/go/memcache/reference goでキャッシュを扱うときに最初 go-cache を使おうと思っていたのだけれど、GAEでキ…

Goglandでソフトラップを消す

Preference ▶ Editor ▶ Appearance で show right margin をoffにする これでソフトラップがoffになる。 goは変なところでソフトラップがかかって改行されるとコンパイルエラーになるのが嫌なので、ソフトラップをオフにしてます。 参考 http://samuraism.co…

IDEを使うという選択肢

※ IDE…統合開発環境 エディタをカスタマイズすること エディタをバリバリカスタマイズしてこそエンジニアだ(# ゚Д゚) なんてことを思っていた時期もありました。 (今でも少し思ってます) バリバリエディタをカスタマイズして、キーバインドバチバチで、開発効…

lsに変わってexaを使う

少し前に以下の記事をはてブで見つけたので、いい機会だったので使ってみました。 http://wonderwall.hatenablog.com/entry/2017/08/07/222350 普段はfishを使っているので、fish上では ls コマンドを拡張して exa コマンドを叩けるようにしました。 インス…

GoglandでFWのsrc配下のvendorを参照しなくなった時

前置き ginやechoと言ったgoのwebフレームワーク(FW)を使って開発するときに、glideみたいなパッケージ管理ツールを使って依存パッケージを管理しているケースはよくあると思います。 その依存パッケージの管理ディレクトリはプロジェクトルートではなく、…

GQLでプライマリーキーのwhere句指定を行う

GoogleCloudStrageでkey(RDBでいうところのprimarykey)をフックにしてentityをselectしようと思ったらちょっとハマったのでそのメモ 最初に書いたクエリ SELECT * FROM KIND_NAME where ID = 123 この形式ではentityを取得できない。 正しいクエリ SELECT * …

参照型を作成するmake

go

goには2つの値の型があります 値型 参照型 値型と参照型 関数に渡されるときにコピーされる。 そのため、呼び出し元で引数に指定した値型の変数は関数に渡されるタイミングでコピーされ、コピーされた値が関数の呼び出しに使用されるので、呼び出し元の値は…

shell二刀流を試してみてる

shellを二重で使ってみてます。 使っているshell fish zsh 用途によって分ける 普段使いのshellはfishです。 もともとzsh使っていたのですが、なんとなく使っていてもっさり感が出てきたのと、いちいちrcファイルでカスタマイズするのがめんどくさくなってき…

Goのtemplateにおける値の評価の書き方

Golangのtemplateファイルでisやnot equal、and条件、or条件の書き方を調べたので備忘録。 is評価 {{ if eq num 1 }} // if num == 1 // 以下同義 {{ if eq ( .num, 1 ) }} not equel評価 {{ if ne .num 1 }} // if num != 1 //以下同義 {{ if ne (.num, 1) …

Golangでの抽象化について

理解がなんとなく浅いと感じていたGolangの抽象化について簡単にまとめました。 goのサンプル package main import "fmt" type Stringer interface { String() string } // Stringerを実装する type Hex int func (h Hex) String() string { return fmt.Spri…