Go generate everything

Go generate everything

4618c5e97c59abd315cc2d7dc809f8c8?s=128

Alexey Palazhchenko

November 08, 2016
Tweet

Transcript

  1. None
  2. None
  3. go generate everything

  4. Зачем?

  5. Зачем? • Парсеры, лексеры

  6. Зачем? • Парсеры, лексеры • Конвертация данные (Unicode-таблицы)

  7. Зачем? • Парсеры, лексеры • Конвертация данные (Unicode-таблицы) • Встраивание

    бинарных данных
  8. Зачем? • Парсеры, лексеры • Конвертация данные (Unicode-таблицы) • Встраивание

    бинарных данных • Bailerplate, автодополнение в редакторе
  9. Зачем? • Парсеры, лексеры • Конвертация данные (Unicode-таблицы) • Встраивание

    бинарных данных • Bailerplate, автодополнение в редакторе • Mocks
  10. Зачем? • Парсеры, лексеры • Конвертация данные (Unicode-таблицы) • Встраивание

    бинарных данных • Bailerplate, автодополнение в редакторе • Mocks • Generics?!
  11. Как?

  12. Как? • go/build

  13. Как? • go/build • go/token, go/scanner

  14. Как? • go/build • go/token, go/scanner • go/ast, go/parser

  15. Как? • go/build • go/token, go/scanner • go/ast, go/parser •

    go/constants, go/types
  16. Как? • go/build • go/token, go/scanner • go/ast, go/parser •

    go/constants, go/types • go/printer, go/format
  17. Как проще?

  18. Как проще? • text/template

  19. Как проще? • text/template • golang.org/x/tools/go/buildutil

  20. Как проще? • text/template • golang.org/x/tools/go/buildutil • golang.org/x/tools/go/ast/astutil

  21. Как проще? • text/template • golang.org/x/tools/go/buildutil • golang.org/x/tools/go/ast/astutil • golang.org/x/tools/go/loader

  22. github.com/josharian/impl $ impl 'c *Connected' events.Event func (c *Connected) String()

    string { panic("not implemented") } func (c *Connected) Type() string { panic("not implemented") }
  23. golang.org/x/tools/cmd/stringer $ stringer -type Type func (i Type) String() string

    { i -= 1 if i < 0 || i >= Type(len(_index)-1) { return fmt.Sprintf("Type(%d)", i+1) } return _name[_index[i]:_index[i+1]] }
  24. //go:generate -type Type $ go generate foo/bar/baz

  25. Generics func NewQueue() *Queue { return &Queue{items: make([]T, 0)} }

    func (q *Queue) Push(item T) {} func (q *Queue) Pop() T {}
  26. gopkg.in/reform.v1 type Struct interface { String() string Values() []interface{} Pointers()

    []interface{} View() View }
  27. Вопросы?

  28. Сообщество 12 golang-ru.slack.com 4gophers.ru/slack gophers.slack.com meetup.com/Golang-Moscow meetup.com/GolangNSK meetup.com/Golang-Peter golangshow.com