我的数据库中有一个表,列名都以大写字母开头(即:FMR_Number,Primary_Value)。列名不受我的控制。 DB中的所有其他列(在其他表中)都是小写的。我已经将一个结构映射到表中,但我不断从查询中找到错误的目标错误。我相信这是因为名称映射器设置为ToLower(这是其他地方所需要的)。我试图使用这种格式
StructField string 'db:"RealColumnName"'
明确指定映射,但我得到一个非法的符文字面值。当我查看其他人代码中的示例时,我发现它以我刚试过的方式表示。如果我将'和'反转为
StructField string "db:'RealColumnName'"
我没有得到非法的符文字面错误但我确实错过了目的地错误。我在这做错了什么?我正在使用sqlx。
我的结构
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
}
答案 0 :(得分:2)
struct标签使用反引号 - '字符(通常在美国键盘布局下的Esc键下) - 不是单引号。
你的结构应该如下所示,注意变量名中的下划线在Go中并不是特别惯用的。
使用struct标签的原因通常是将导出的(大写的)Go结构字段名称映射到其他东西使用的名称(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