ちりもつもればミルキーウェイ

好奇心に可処分時間が奪われる

2021-03-01から1ヶ月間の記事一覧

Goのreflectでこんなときどうする?集

Go

はじめに reflectでゴニョゴニョしたいときに毎回沼にハマってすごく時間をつかうので、使うパターンをメモっておく。 随時更新(したい)です それではレッツゴー 任意の値があるプリミティブ型か確認したい if reflect.ValueOf(v).Kind() == reflect.Int64 {…

自作のprotobuf unmarshalerで固定長64bit/32bitフィールドをパースできるようにした

はじめに 前に簡易的なunmarshalerかいたので それに機能追加した話 この時点では、対応するtypeはVarintとLength-delimitedだけだったので、固定長64bit/32bitフィールドをパースできるようにしました。 差分は以下 https://github.com/convto/protowire/co…

152行でprotobufの簡易的なunmarshalerかいた

はじめに protobufのエンコーディングはwireという名前で以下に仕様がある developers.google.com 最近仕様を読んだりproto定義から生成される成果物を読んだりいろいろしていて、Unmarshalerかける気がしたので書いてみた。 すべての仕様に準拠するものは大…

zigzag encodingとは

はじめに 符号付き整数は2の補数表現で表されることが多いが、エンコーディングによっては zigzag encoding なるものを使っている場合もある。 2の補数表現と比較した上で、zigzag encodingとはどういうバイト表現でどのような特徴があるかまとめる zigzag e…

算術シフトと論理シフト

はじめに エンコーディング周りを調べていたら、Goの場合は左辺のオペラントがintかuintかで処理が違うことがわかった。 ドキュメントにも明記されていて、算術シフトと論理シフトというやつを使い分けているらしい。 シフト演算を多用する処理は書いたこと…

2の補数表現

はじめに エンコーディングとかをしらべていたら2の補数表現なる概念があることを知った 個人用メモとしてどういう仕組みなのかまとめておく ざっくりまとめ 2の補数表現とは、ある値の補数bitをその値の負数として扱おうというもの (正確には、0を正数とし…

Goのnet/httpでtimeout指定したときにどう制御されるのか追ってみた

Go

はじめに net/httpを使ったhttpリクエストでは2つの方法でtimeout管理ができます。 Client.Timeout 値の設定( コメントを読む感じrequestにcontextを入れてもOKだぞいというのは言及されてる Request.WithContext なり NewRequestWithContext なりでcontext…