2015-07-22 2 views
1

У меня есть таблица в моей БД, что имена столбцов начинаются с кепок (то есть: FMR_Number, Primary_Value). Имя столбца вне моего контроля Все остальные столбцы в БД (в других таблицах) являются нижним регистром.Я сопоставил структуру с таблицей, но я все время получаю недостающую ошибку назначения из запроса. Я полагаю, что это потому, что для параметра mapper выбрано ToLower (которая является то, что нужно для везде). Я пытался использовать этот форматКаков правильный способ использования «и» для указания имен столбцов db?

StructField string 'db:"RealColumnName"' 

указать отображение явно, но я получаю нелегальное руно буквальным. Когда я иду посмотреть на примерах в коде других народов я вижу его представленный в том, как я только что попробовал. Если я отменил ' и "

StructField string "db:'RealColumnName'" 

Я не получаю нелегальное руно опечатки, но я получаю недостающую ERR назначения. Что я здесь делаю неправильно? Я использую sqlx.

Мои Struct

type pah struct { 
    FMR_Fund_Number     string 'db:"FMR_Fund_Number"' 
    Business_Data_Date    string 'db:"Business_Data_Date"' 
    Outbound_Composition_Code  string 'db:"Outbound_Composition_Code"' 
    Composition_Sub_Code    string 'db:"Composition_Sub_Code"' 
    Composition_Sub_Code_Description string 'db:"Composition_Sub_Code_Description"' 
    Position_Name     string 'db:"Position_Name"' 
    Primary_Value     float64 'db:"Primary_Value"' 
    Record_Order      int  'db:"Record_Order"' 
    Tier_Indicator     string 'db:"Tier_Indicator"' 
} 

Мой дб вызов

func loadAssetAllocation() AssetAllocations { 
    pahGroup := []pah{} 
    pahQuery := "SELECT FMR_Fund_Number,Business_Data_Date,Outbound_Composition_Code,Composition_Sub_Code,Composition_Sub_Code_Description,Primary_Value,Tier_Indicator,Record_Order FROM PAH WHERE FMR_Fund_Number = \"312\" AND Outbound_Composition_Code = \"MDCAT\" AND Business_Data_Date = (SELECT Business_Data_Date FROM PAH ORDER BY Business_Data_Date DESC LIMIT 1) AND Composition_Sub_Code <> \"TAXADV\" ORDER BY Record_Order ASC" 
    assetAlloc := AssetAllocations{} 
    err := ffDB.Select(&pahGroup, pahQuery) 
    fmt.Println("pahQuery AssetAllocation error: ", err) 
    assetAlloc.AssetAll = pahGroup 
    return assetAlloc 
} 

ответ

2

Struct теги использовать кавычку - символ `(обычно под ключ Esc на раскладки клавиатуры США) - не одиночные кавычки.

Ваша структура должна выглядеть следующим образом, отмечая, что подчеркивания в именах переменных не особенно идиоматичны в Go.

Причина, по которой вы используете теги struct, часто состоит в том, чтобы сопоставить экспортированные (заглавные) имена полей Go struct с именами, используемыми другими вещами (JSON, базы данных, формы HTML и т. Д.).

type pah struct { 
    FMRFundNumber     string `db:"FMR_Fund_Number"` 
    BusinessDataDate    string `db:"Business_Data_Date"` 
    OutboundCompositionCode  string `db:"Outbound_Composition_Code"` 
    CompositionSubCode    string `db:"Composition_Sub_Code"` 
    CompositionSubCodeDescription string `db:"Composition_Sub_Code_Description"` 
    PositionName     string `db:"Position_Name"` 
    PrimaryValue     float64 `db:"Primary_Value"` 
    RecordOrder      int  `db:"Record_Order"` 
    TierIndicator     string `db:"Tier_Indicator"` 
} 

Смотрите документацию: http://golang.org/pkg/reflect/#StructTag и http://golang.org/pkg/encoding/json/#Marshal

+2

структура тег просто должен быть строковым. Обычно люди используют синтаксис backtick, потому что он устраняет необходимость избежать встроенных кавычек, но такой тег, как '' db: \ "FMR_Fund_Number \" "', будет таким же правильным. –

+1

@JamesHenstridge Да, правильно. Пытался сдержать замешательство - я не думаю, что видел случай с недействительным «в дикой природе», но все же (никогда не говори никогда). – elithrar