code: func (c *cmd) detailedOutput(members []*consulapi.AgentMember) []string {
  	result := make([]string, 0, len(members))
  	header := "Node|Address|Status|Tags"
  	result = append(result, header)
  	for _, member := range members {
  		// Get the tags sorted by key
  		tagKeys := make([]string, 0, len(member.Tags))
  		for key := range member.Tags {
  			tagKeys = append(tagKeys, key)
  		}
  		sort.Strings(tagKeys)
  
  		// Format the tags as tag1=v1,tag2=v2,...
  		var tagPairs []string
  		for _, key := range tagKeys {
  			tagPairs = append(tagPairs, fmt.Sprintf("%s=%s", key, member.Tags[key]))
  		}
  
  		tags := strings.Join(tagPairs, ",")
  
  		addr := net.TCPAddr{IP: net.ParseIP(member.Addr), Port: int(member.Port)}
  		line := fmt.Sprintf("%s|%s|%s|%s",
  			member.Name, addr.String(), serf.MemberStatus(member.Status).String(), tags)
  		result = append(result, line)
  	}
  	return result
  }
docs: // detailedOutput is used to dump all known information about nodes in
  // their raw format