Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Gunosy.Go#5 index/io/log
Search
shunsukeaihara
July 10, 2014
200
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Gunosy.Go#5 index/io/log
shunsukeaihara
July 10, 2014
More Decks by shunsukeaihara
See All by shunsukeaihara
BONXを支える技術:発話区間検出(VAD)の話/Akerun & BONX Tech Talk
shunsukeaihara
4
7.8k
Goのnet.TCPConnの話/shibuya.go01
shunsukeaihara
3
890
Norikra in Gunosy Network Ads@Norikra meetup #2
shunsukeaihara
1
6.1k
LevelDB on S3 As A KVS
shunsukeaihara
1
3k
色恒常性仮説に基づく色補正ライブラリcolorcorrect / 2015-01-31-kantocv27
shunsukeaihara
3
2.6k
Sparkによる分散処理 / 2015-01-16 PyData.Tokyo#3
shunsukeaihara
11
3.6k
ゼロから始めた Gunosyアドサーバ開発運用記 / 2014-12-16-dots
shunsukeaihara
6
1.2k
Gunosy.go#2 package/compress
shunsukeaihara
0
150
Featured
See All Featured
SEO for Brand Visibility & Recognition
aleyda
0
4.7k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Scaling GitHub
holman
464
140k
How STYLIGHT went responsive
nonsquared
100
6.3k
Are puppies a ranking factor?
jonoalderson
2
3.9k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
2
270
The Mindset for Success: Future Career Progression
greggifford
PRO
0
490
Making Projects Easy
brettharned
120
6.8k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2.1k
Automating Front-end Workflow
addyosmani
1369
210k
ラッコキーワード サービス紹介資料
rakko
1
4.9M
Jess Joyce - The Pitfalls of Following Frameworks
techseoconnect
PRO
1
410
Transcript
Gunosy.go#5 index/io/log Shunsuke Aihara
Index pacakge • Indexって… – ⽂文字列列検索索の索索引の意味でのindexらしい • Suffix Arrayだけが実装されている •
普通に実装すると、記号異異なり数を無視すれば元デー タサイズがn、検索索⽂文字列列⻑⾧長がmならO(m log n)で検 索索可能 • Larsson Sadakane法でSuffix Arrayを構築 – O(N log N)の時間で構築 – http://golang.org/src/pkg/index/suffixarray/ qsufsort.go » 読みやすい良良い実装 » マルチバイトコードの⽂文字列列検索索とかはバイト列列単位 のインデックスなので変になりそう
index/suffixarray • type Index – func New(data []byte) *Index
– func (x *Index) Bytes() []byte – func (x *Index) FindAllIndex(r *regexp.Regexp, n int) (result [][]int) – func (x *Index) Lookup(s []byte, n int) (result []int) – func (x *Index) Read(r io.Reader) error – func (x *Index) Write(w io.Writer) error
index/suffixの使い⽅方 • sufffixarray.Newにバイト配列列を⼊入⼒力力してsuffixarrayを構築 – 構築時間はおおよそバイト数Nに対してO(N log N) –
普通にQuickSortしてるだけっぽい • read/writeでインデックスを保存・読み込み可能
io package • 今まで頻出していたBytes.Readerとか Bytes.Writerのインターフェイス型が定義 – データ読み込み/書き込み系のインターフェイス と、それの操作を⾏行行う関数が定義されている
• io/iouPls – Reader、Writerに対するユーティリティ関数群 – ファイル読んだり書いたりディレクトリからファ イル⼀一覧取得したりtempファイル処理理したり
io packageのVariables • Variables – EOF以外はエラー – EOF – ErrClose
– ErrNoProgress – ErrShortBuffer – ErrShortWrite – ErrUnexpectedEOF
io packageのfuncPon • func Copy(dst Writer, src Reader) (wriWen int64,
err error) – ReaderからWriterにコピー • func CopyN(dst Writer, src Reader, n int64) (wriWen int64, err error) – 指定バイト数分コピー • func ReadAtLeast(r Reader, buf []byte, min int) (n int, err error) – 最低でもminバイトコピー。最低値以下だとエラー • func ReadFull(r Reader, buf []byte) (n int, err error) – 指定したバッファサイズ分コピー。バッファ・サイズ以下だと エラー • func WriteString(w Writer, s string) (n int, err error) – ⽂文字列列を書き込み
io packageのType • 基本のインターフェイス – type Closer – type Reader
– type Writer – type ReadWriter – type Seeker
io packageのType • 基本のインターフェイス – type ReadCloser –
type ReadSeeker • seekできるリーダー – type ReaderAt • 任意の⼀一から読み込み – type ReaderFrom • リーダーからバッファに読み込み – type SecPonReader • read, seek, readatが使える物
io packageのType • 基本のインターフェイス – type WriteCloser –
type WriteSeeker • seekができる – type WriterAt • 指定した位置に書き込み – type WriterTo • WriteTo関数のラッパ。引数に与えたバッファが空にな るかエラーが出るまで書き込み
io packageのType • 基本のインターフェイス – バイト単位の読み込みをする場合 • type
ByteReader • type ByteScanner • type ByteWriter – Rune(⽂文字列列)の読み込みをする場合 • type RuneReader • type RuneScanner – パイプ • type PipeReader • type PipeWriter – type LimitedReader • 指定値分読む
io/iouPl package • Variablees – Discard (何も返さないライター) •
func NopCloser(r io.Reader) io.ReadCloser – 何もしないCloserを返す • func ReadAll(r io.Reader) ([]byte, error) – エラーがでるかEOFまで読み込み • func ReadDir(dirname string) ([]os.FileInfo, error) – ディレクトリからファイルの⼀一覧を取得 • func ReadFile(filename string) ([]byte, error) – 指定したファイル名のファイルを読み込んで内容を返す • func TempDir(dir, prefix string) (name string, err error) – 指定したディレクトリに指定したprefixの名前の⼀一時ファイル⽤用ディレクトリを作成 • func TempFile(dir, prefix string) (f *os.File, err error) – 指定したディレクトリに指定したprefixの名前の⼀一時ファイルを作成 • func WriteFile(filename string, data []byte, perm os.FileMode) error – 指定したファイルにバイト列列を書き込み – ファイルが存在しない時は、指定したパーミッションで新規作成
log pacakge • 普通のloggerとlogging⽤用関数群 – 標準ロガーに出⼒力力する関数群 – 標準ロガーの出⼒力力先やフラグを切切り替える関 数 – 独⾃自に定義するロガー • ⼀一つのロガーは複数のgoroutineから利利⽤用
可能 • logelevelみたいな概念念が無いのが不不便便
logのユーティリティ関数 • 標準ロガーに出⼒力力する関数群 • func Print(v ...interface{}) • func Printf(format
string, v ...interface{}) • func Println(v ...interface{}) – 標準ロガーにそれぞれPrint、Printf、Printlnする • func Fatal(v ...interface{}) – Printしてos.exit(1)を呼ぶ • func Fatalf(format string, v ...interface{}) – Printfしてos.exit(1) • func Fatalln(v ...interface{}) – Printlnしてos.exit(1) • func Panic(v ...interface{}) – printしてpanicを呼ぶ • func Panicf(format string, v ...interface{}) – Printfしてpanic • func Panicln(v ...interface{}) – Printlfしてpanic
logの標準ロガーの挙動切切り替え関数 • func Prefix() string – 標準ロガーのprefixを取得 • func Flags()
int – 標準ロガーのFlagを取得 • func SetFlags(flag int) – 標準ロガーにFlagを指定 • func SetOutput(w io.Writer) – 標準ロガーの出⼒力力先を変更更 • func SetPrefix(prefix string) – 標準ロガーのPrefixを指定
log.Logger • 独⾃自にロガーを定義可能。挙動は標準ロガーと同じ • type Logger – func New(out io.Writer,
prefix string, flag int) *Logger – func (l *Logger) Fatal(v ...interface{}) – func (l *Logger) Fatalf(format string, v ...interface{}) – func (l *Logger) Fatalln(v ...interface{}) – func (l *Logger) Flags() int – func (l *Logger) Output(calldepth int, s string) error – func (l *Logger) Panic(v ...interface{}) – func (l *Logger) Panicf(format string, v ...interface{}) – func (l *Logger) Panicln(v ...interface{}) – func (l *Logger) Prefix() string – func (l *Logger) Print(v ...interface{}) – func (l *Logger) Printf(format string, v ...interface{}) – func (l *Logger) Println(v ...interface{}) – func (l *Logger) SetFlags(flag int) – func (l *Logger) SetPrefix(prefix string)