code: func (s *Sublist) Subjects() []string {
  	s.RLock()
  	defer s.RUnlock()
  	subjects := make([]string, 0, s.count)
  	getSubjects(s.root, "", &subjects)
  	return subjects
  }
docs: // Subjects returns an array of all subjects in this sublist
  // ordered from the widest to the narrowest of subjects.
  // Order between non wildcard tokens in a given level is
  // random though.
  //
  // For instance, if the sublist contains (in any inserted order):
  //
  // *.*, foo.>, *.>, foo.*.>, >, bar.>, foo.bar.>, bar.baz
  //
  // the returned array will be one of the two possibilities:
  //
  // >, *.>, *.*, foo.>, foo.*.>, foo.bar.>, bar.>, bar.baz
  //
  // or
  //
  // >, *.>, *.*, bar.>, bar.baz, foo.>, foo.*.>, foo.bar.>
  //
  // For a given level, the order will still always be from
  // wider to narrower, that is, foo.> comes before foo.*.>
  // which comes before foo.bar.>, and bar.> always comes
  // before bar.baz, but all the "bar" subjects may be
  // before or after all the "foo" subjects.