Skip to content

Instantly share code, notes, and snippets.

@tokubass
tokubass / re_bench.exs
Last active October 11, 2017 05:49
elixirの正規表現ベンチマーク
# TASKS=1000 elixir re_bench.exs pure_re.txt trie_re.txt
# elixirの正規表現実装がtrieなら速度に違いはないはず
# pureはhoge|fooと単純にパイプで繋いだ正規表現
# trieはPerlのRegexp::Assembleで生成した正規表現
[pure,trie|_] = System.argv
pure_regexp = File.read!(pure) |> Regex.compile!
trie_regexp = File.read!(trie) |> Regex.compile!

7.10 typ assertionによる分析的エラー

osパッケージのfileオペレーションによって返却されたエラーの組について考える。 I/Oはいくつかの理由で失敗することがあるが、3つの種類の障害を頻繁に処理する必要がある。

  • file already exists (create)
  • file not found (read)
  • permission denied

os packageはこれらをerror 値で示される失敗を分類するhelper関数を提供します。

7.6 Sorting With sort.Interface

https://golang.org/src/sort/sort.go

文字列整形のように、ソートはよく使われる。 最小のクイックソートは15行でかけるとはいえ、強固な実装はもっと長くなるし、欲しい種類のコードではなかった場合、新しく書くことになる。

sortパッケージ

sort.Sortは連続なデータ型でなくてもいい。

#7 Interfeace interface型は、他の型のふるまいについて、汎化や抽象を表す。 汎化によって、特定のひとつの実装に日も付かないので、interfaceは私たちにmore flexibleで、adaptableな関数を書かせてくれる。

多くのオブジェクト志向言語はいくつかのinterfaceの概念をもっているが、Goのinterfaceが独特なのは、それらが暗黙的に満たされている点。つまり、与えられた具象型を満たす、すべてのinterfaceを宣言する必要がない。単純に必要なメソッドを所持するだけです。このデザインは 既存の型(特にあなたがコントロールできないpackage内に定義されている型に有用)の変更なしに、既存の具象型によって満たされる新しいインタフェースを作らせてくれる。

この章では、interface型の基本的な仕組みと値をみることから始めます。 途中で、standard libraryからいくつかの重要なinterfaceを学びます。多くのGo プログラムはそれら自身がそうであるように、多くの標準的なインタフェースを多く使おうとします。

@tokubass
tokubass / cmp_timepiece_datecalc.pl
Created September 4, 2016 16:56
timepieceとDateCalcの速度比較。昔はtimepieceが遅かったらしいが、今は逆転している。
#!/usr/bin/env perl
use strict;
use warnings;
use Time::Piece;
use Time::Seconds;
use Date::Calc;
use Benchmark qw(cmpthese);
warn $^V;

Text and HTML Templates

actionと呼ばれるdouble brace {{ }}

  • 構造体フィールド選択
  • 関数呼び出し
  • メソッド呼び出し
  • 制御構文(if-eles)
  • range loop
@tokubass
tokubass / go4_json.md
Last active July 10, 2016 16:06
go4_json.md

JSON

  • JSON
  • XML
  • ASN.1
  • Protocol Buffers

いろいろあるけどJSONはシンプルで読みやすいし、 サポートしてる環境が多い

@tokubass
tokubass / gist:a66c87c7a896a4418fb33a609cd6e3fb
Created June 28, 2016 18:35
Class::Inspector結果をハッシュにまとめる
my %seen_pkg;
my %result;
for my $method_struct (@{Class::Inspector->methods(ref $self, 'expanded')}) {
my $pkg_name = $method_struct->[1];
my $method_name = $method_struct->[2];
if (exists $seen_pkg{$pkg_name}) {
$result{$pkg_name} //= [];
push @{$result{$pkg_name}}, $method_name;
}
@tokubass
tokubass / go4_struct.md
Created June 8, 2016 09:58
The Go Programming Language - ch4 struct

4.4 Structs

  • 名前付きの値の集合を表すdata type.
  • それぞれの値をfiledと呼ぶ。
  • filedにはdotでアクセスできる。

宣言

var dilbert Employee
dilbert.Name
@tokubass
tokubass / go4_map.md
Created June 8, 2016 09:58
The Go Programming Language - ch4 map

4.3 Maps

宣言

map [K] V //Kがkeyのtype、Vがvalueのtype

比較

  • Keyは==で比較する。