code: func defaultStart(typ reflect.Type, finfo *fieldInfo, startTemplate *StartElement) StartElement {
  	var start StartElement
  	// Precedence for the XML element name is as above,
  	// except that we do not look inside structs for the first field.
  	if startTemplate != nil {
  		start.Name = startTemplate.Name
  		start.Attr = append(start.Attr, startTemplate.Attr...)
  	} else if finfo != nil && finfo.name != "" {
  		start.Name.Local = finfo.name
  		start.Name.Space = finfo.xmlns
  	} else if typ.Name() != "" {
  		start.Name.Local = typ.Name()
  	} else {
  		// Must be a pointer to a named type,
  		// since it has the Marshaler methods.
  		start.Name.Local = typ.Elem().Name()
  	}
  
  	// Add type attribute if necessary
  	if finfo != nil && finfo.flags&fTypeAttr != 0 {
  		start.Attr = append(start.Attr, Attr{xmlSchemaInstance, typeToString(typ)})
  	}
  
  	return start
  }
docs: // defaultStart returns the default start element to use,
  // given the reflect type, field info, and start template.