Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Goで英語ツイートを音声化するツイッターボットを作った

Morix
October 24, 2017

 Goで英語ツイートを音声化するツイッターボットを作った

Created by Shota Omori(@morix1500)
2017-10-24 GoビギナーズLT大会!「最近、Go言語始めました」の会

Morix

October 24, 2017
Tweet

More Decks by Morix

Other Decks in Programming

Transcript

  1. Botの仕組み GoApp Polly 1. Streaming 2. Get Speech Request 3.

    Get Speech 4. Encode Video 5. Upload Video & Tweet
  2. よくあるエラー処理(複数エラーの場合) var ( Err01 = errors.New("Output Error 01") Err02 =

    errors.New("Output Error 02") ) func main() { err := something() switch err { case Err01: fmt.Println("type is Err01") fmt.Printf("%+v\n", err) case Err02: fmt.Println("type is Err02") fmt.Printf("%+v\n", err) } } エラー定義しといて 返却されたerrで ハンドリングする
  3. この方法の問題点 ・エラーに追加情報を付与できない func hoge() error { return Err01 } func

    something() error { if err := hoge() ; err != nil { return fmt.Errorf("%+v from hoge", err) } return nil } 違うエラー(Err01ではない)になってしまう!
  4. エラー定義と追加情報の付与 import ( "fmt" "github.com/pkg/errors" ) var ( Err01 =

    errors.New("Output Error 01") Err02 = errors.New("Output Error 02") ) func hoge() error { return Err01 } func fuga() error { return Err02 } func something() error { if err := hoge() ; err != nil { return errors.Wrap(err, "from hoge") } if err := fuga() ; err != nil { return errors.Wrap(err, "from fuga") } return nil }
  5. エラー判定 func main() { err := something() switch errors.Cause(err) {

    case Err01: fmt.Println("type is Err01") fmt.Printfln(err) fmt.Printf("%+v\n", err) case Err02: fmt.Println("type is Err02") fmt.Println(err) fmt.Printf("%+v\n", err) } }
  6. エラー判定(前ページの出力結果) type is Err01 from hoge: Output Error 01 Output

    Error 01 main.init /home/ubuntu/go/pkg/src/github.com/morix1500/go-error-handling/04.go:9 runtime.main /home/ubuntu/go/current/src/runtime/proc.go:173 runtime.goexit /home/ubuntu/go/current/src/runtime/asm_amd64.s:2337 from hoge main.something /home/ubuntu/go/pkg/src/github.com/morix1500/go-error-handling/04.go:23 main.main /home/ubuntu/go/pkg/src/github.com/morix1500/go-error-handling/04.go:32 runtime.main /home/ubuntu/go/current/src/runtime/proc.go:185 runtime.goexit /home/ubuntu/go/current/src/runtime/asm_amd64.s:2337
  7. 最後に - Go言語を使ってみた感想 ・作りたいと思ったものがサクッと作れる  srm - 安全なrmコマンド https://github.com/morix1500/srm ruler -

    csv/tsv/ltsvを表形式に表示するコマンド https://github.com/morix1500/ruler ・パッケージが充実しており車輪の再発明をしなくていい ・とにかく読みやすい/書きやすい! ・ワンバイナリで配布できるのは非常に便利 ・どんどんGo言語の使用を進めていきたい!