Slide 1

Slide 1 text

Gunosy.go#5   index/io/log Shunsuke  Aihara  

Slide 2

Slide 2 text

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 »  読みやすい良良い実装 »  マルチバイトコードの⽂文字列列検索索とかはバイト列列単位 のインデックスなので変になりそう

Slide 3

Slide 3 text

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  

Slide 4

Slide 4 text

index/suffixの使い⽅方 •  sufffixarray.Newにバイト配列列を⼊入⼒力力してsuffixarrayを構築   –  構築時間はおおよそバイト数Nに対してO(N  log  N)   –  普通にQuickSortしてるだけっぽい   •  read/writeでインデックスを保存・読み込み可能

Slide 5

Slide 5 text

io  package •  今まで頻出していたBytes.Readerとか Bytes.Writerのインターフェイス型が定義   –  データ読み込み/書き込み系のインターフェイス と、それの操作を⾏行行う関数が定義されている   •  io/iouPls   –  Reader、Writerに対するユーティリティ関数群   –  ファイル読んだり書いたりディレクトリからファ イル⼀一覧取得したりtempファイル処理理したり

Slide 6

Slide 6 text

io  packageのVariables •  Variables   – EOF以外はエラー   – EOF   – ErrClose   – ErrNoProgress   – ErrShortBuffer   – ErrShortWrite   – ErrUnexpectedEOF  

Slide 7

Slide 7 text

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)   –  ⽂文字列列を書き込み

Slide 8

Slide 8 text

io  packageのType •  基本のインターフェイス   – type  Closer   – type  Reader   – type  Writer   – type  ReadWriter   – type  Seeker  

Slide 9

Slide 9 text

io  packageのType •  基本のインターフェイス   –  type  ReadCloser   –  type  ReadSeeker   •  seekできるリーダー   –  type  ReaderAt   •  任意の⼀一から読み込み   –  type  ReaderFrom   •  リーダーからバッファに読み込み   –  type  SecPonReader   •  read,  seek,  readatが使える物  

Slide 10

Slide 10 text

io  packageのType •  基本のインターフェイス   –  type  WriteCloser   –  type  WriteSeeker   •  seekができる   –  type  WriterAt   •  指定した位置に書き込み   –  type  WriterTo   •  WriteTo関数のラッパ。引数に与えたバッファが空にな るかエラーが出るまで書き込み  

Slide 11

Slide 11 text

io  packageのType •  基本のインターフェイス   –  バイト単位の読み込みをする場合   •  type  ByteReader   •  type  ByteScanner   •  type  ByteWriter   –  Rune(⽂文字列列)の読み込みをする場合   •  type  RuneReader   •  type  RuneScanner   –  パイプ   •  type  PipeReader   •  type  PipeWriter   –  type  LimitedReader   •  指定値分読む  

Slide 12

Slide 12 text

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   –  指定したファイルにバイト列列を書き込み   –  ファイルが存在しない時は、指定したパーミッションで新規作成  

Slide 13

Slide 13 text

log  pacakge •  普通のloggerとlogging⽤用関数群 – 標準ロガーに出⼒力力する関数群 – 標準ロガーの出⼒力力先やフラグを切切り替える関 数 – 独⾃自に定義するロガー •  ⼀一つのロガーは複数のgoroutineから利利⽤用 可能 •  logelevelみたいな概念念が無いのが不不便便

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

logの標準ロガーの挙動切切り替え関数 •  func  Prefix()  string –  標準ロガーのprefixを取得 •  func  Flags()  int –  標準ロガーのFlagを取得 •  func  SetFlags(flag  int) –  標準ロガーにFlagを指定 •  func  SetOutput(w  io.Writer) –  標準ロガーの出⼒力力先を変更更 •  func  SetPrefix(prefix  string) –  標準ロガーのPrefixを指定

Slide 16

Slide 16 text

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)