code: func (p Property) GoType(basename string, name string) string {
  
  	if p.IsPolymorphic() {
  
  		generatePolymorphicProperty(basename+"_"+name, p)
  		return basename + "_" + name
  
  	}
  
  	if p.IsMap() {
  
  		if p.IsMapOfPrimitives() {
  			return "map[string]" + convertTypeToGo(p.PrimitiveItemType)
  		}
  
  		if p.ItemType == "Tag" {
  			return "map[string]Tag"
  		}
  
  		return "map[string]" + basename + "_" + p.ItemType
  
  	}
  
  	if p.IsList() {
  
  		if p.IsListOfPrimitives() {
  			return "[]" + convertTypeToGo(p.PrimitiveItemType)
  		}
  
  		if p.ItemType == "Tag" {
  			return "[]Tag"
  		}
  
  		return "[]" + basename + "_" + p.ItemType
  
  	}
  
  	if p.IsCustomType() {
  		return basename + "_" + p.Type
  	}
  
  	// Must be a primitive value
  	return convertTypeToGo(p.PrimitiveType)
  
  }
docs: // GoType returns the correct type for this property
  // within a Go struct. For example, []string or map[string]AWSLambdaFunction_VpcConfig