code: func (s *Scanner) peekN(n int) string {
  	if s.i >= len(s.b) {
  		return ""
  	}
  	b := s.b[s.i:]
  
  	var buf bytes.Buffer
  	for i := 0; i < n && len(b) > 0; i++ {
  		ch, sz := utf8.DecodeRune(b)
  		b = b[sz:]
  		buf.WriteRune(ch)
  	}
  	return buf.String()
  }
docs: // peekN reads the next n runes but does not move the position forward.