Go Conference 2018 Spring @pei0804
• twitter/github @pei0804
• Hatena tikasan
• VOYAGE GROUP

2018
• OSS

swaggo: GoDoc Swagger
•
•
•




database/sql Scan
github.com/variadico/scaneo
$ scaneo hoge.go

scans.go
Scan 

github.com/variadico/scaneo
• 

func ScanCategory

func ScanCategories
• 

func ScanCategory

func ScanCategorys


Category 

Categorys


tmpl.go 

PR
OSS


Fork
Fork 

&&



OSS 



github.com/swaggo/swag
github.com/swaggo/swag
Go 

Swagger
Swagger API 

※Go
Getting started
$ go get -u github.com/swaggo/swag/cmd/swag
API
$ swag init
docs/swagger/swagger.json
Swagger UI 

swaggo Middleware
http://localhost:8080/swagger/index.html




•
•
• API
•
• Swagger spec
•
•
• API
•
• Swagger spec


※
• @title
• @version
• @basepath URI
• @host
•
parser.go
parser.go
AST go/parser
• : abstract syntax tree AST


wikipedia
• Go AST Hello,
World #golang

https://qiita.com/tenntenn/items/
0cbc6f1f00dc579fcd8c
• Go Go

https://motemen.github.io/go-for-go-book/
ParseFile
• Go
• 

fset *token.FileSet, filename string, src
interface{}, mode Mode
• 

*ast.File, error
ast.File
ast.File
parser.go
•
•
• API
•
• Swagger spec
API ( )

※
• @param
• @success
• @failure
• @router
• @accept, @produce MimeType
parser.go
parser.go
parser.go
parser.go
parser.go
parser.go
parser.go
OK



// @Success 200 {array} model.Account "User"

@Success {param } 

α 







// @Param default query string false "string
default" default(A)
Swagger


// @Param default query string false "string default"
Enums(A, B ,C) default(A)




🤔
// @Param default query string false "string
default" Enums(A, B ,C) default(A)
// @Param default query string false "string
default" Enums(A, B ,C) default(A)




😇
Model
@Param account body model.Account ~~
model Account 



Model
AST
TypeDefinitions map[string]map[string]*ast.TypeSpec

map[ ][ ] AST
model 





TypeDefinitions["model"]["Account"] model
Account AST 

•
•
•
•
•
•
parser.go
parser.go
parser.go
parser.go
parser.go
•
•
•
parser.go
parser.go








😇
User Family
User
Family User
Family
User
Family User
panic
•
•
•
🤔
• 



•
•
parser.go
parser.go
User Family
User
Family User
Family
User
Family User
panic
User Family
User
Family User
Family
User
Family User
panic
😂
•
•
• API
•
• Swagger spec
github.com/go-openapi/spec
github.com/go-openapi/spec
Swagger2.0 spec 

go-swagger/go-swagger


Swagger
3.0 

github.com/go-openapi/spec3


Swagger 



•


• 

•








OSS
swaggo welcome
• github.com/mercari/go-httpdoc

• github.com/goadesign/goa

DSL Swagger
• github.com/cheekybits/genny

Go
• Go 

https://www.slideshare.net/lestrrat/go-86436442
• go generate go/ast 

https://speakerdeck.com/masashisalvador57f/ast-falsezatukuritositahua
• go generate 

http://agtn.hatenablog.com/entry/2017/08/06/015813
コードジェネレートとの付き合い方 @Go Conference 2018 Spring

コードジェネレートとの付き合い方 @Go Conference 2018 Spring