code: func extractMessages(buf []byte) ([]*i18n.Message, error) {
  	fset := token.NewFileSet()
  	file, err := parser.ParseFile(fset, "", buf, parser.AllErrors)
  	if err != nil {
  		return nil, err
  	}
  	extractor := newExtractor(file)
  	ast.Walk(extractor, file)
  	return extractor.messages, nil
  }
docs: // extractMessages extracts messages from the bytes of a Go source file.