var reBlank … var reGoroutine … var reCall … var rePos … var errBreakParse … type Scanner … // NewScanner creates a scanner on top of a reader. func NewScanner(r io.Reader) *Scanner { … } // Peek returns the next line without consuming it. func (s *Scanner) Peek() string { … } // Skip consumes the next line without looking at it. // Normally used after it has already been looked at using Peek. func (s *Scanner) Skip() { … } // Next consumes and returns the next line. func (s *Scanner) Next() string { … } // Done returns true if the scanner has reached the end of the underlying // stream. func (s *Scanner) Done() bool { … } // Err returns true if the scanner has reached the end of the underlying // stream. func (s *Scanner) Err() error { … } // Match returns the submatchs of the regular expression against the next line. // If it matched the line is also consumed. func (s *Scanner) Match(re *regexp.Regexp) []string { … } // SkipBlank skips any number of pure whitespace lines. func (s *Scanner) SkipBlank() { … } // Parse the current contiguous block of goroutine stack traces until the // scanned content no longer matches. func Parse(scanner *Scanner) (Dump, error) { … } func parseGoroutine(scanner *Scanner) (Goroutine, bool) { … } func parseFrame(scanner *Scanner) (Frame, bool) { … } func parseFunction(scanner *Scanner) (Function, bool) { … } func parsePosition(scanner *Scanner) (Position, bool) { … }