{"record":{"id":"94c707b8682cc451","repo":"kataras/iris","slug":"convert-struct-field-name-q-w","errorCode":null,"errorMessage":"convert struct: field name: %q: %w","messagePattern":"convert struct: field name: %q: %w","errorType":"error_code","errorClass":null,"httpStatus":null,"severity":"error","filePath":"x/sqlx/struct_row.go","lineNumber":33,"sourceCode":"type ColumnNameFunc = func(string) string\n\nfunc convertStructToColumns(typ reflect.Type, nameFunc ColumnNameFunc) (map[string]*Column, error) {\n\tif kind := typ.Kind(); kind != reflect.Struct {\n\t\treturn nil, fmt.Errorf(\"convert struct: invalid type: expected a struct value but got: %q\", kind.String())\n\t}\n\n\t// Retrieve only fields valid for database.\n\tfields := reflex.LookupFields(typ, \"\")\n\n\tcolumns := make(map[string]*Column, len(fields))\n\tfor i, field := range fields {\n\t\tcolumn, ok, err := convertStructFieldToColumn(field, DefaultTag, nameFunc)\n\t\tif !ok {\n\t\t\tcontinue\n\t\t}\n\n\t\tif err != nil {\n\t\t\treturn nil, fmt.Errorf(\"convert struct: field name: %q: %w\", field.Name, err)\n\t\t}\n\n\t\tcolumn.Index = i\n\t\tcolumns[column.Name] = column\n\t}\n\n\treturn columns, nil\n}\n\nfunc convertStructFieldToColumn(field reflect.StructField, optionalTag string, nameFunc ColumnNameFunc) (*Column, bool, error) {\n\tc := &Column{\n\t\tName:       nameFunc(field.Name),\n\t\tFieldIndex: field.Index,\n\t}\n\n\tfieldTag, ok := field.Tag.Lookup(optionalTag)\n\tif ok {\n\t\tif fieldTag == \"-\" {","sourceCodeStart":15,"sourceCodeEnd":51,"githubUrl":"https://github.com/kataras/iris/blob/7bedaf55a0b64bbb2248a5845a2c60d81a30996a/x/sqlx/struct_row.go#L15-L51","documentation":"While converting each struct field to a column, a per-field error (usually from parsing the struct tag options) is wrapped with the offending field name via %w. This pinpoints which field's tag is malformed. Registration fails entirely when any field tag cannot be parsed.","triggerScenarios":"Register on a struct where one field's tag contains options that parseOptions rejects, e.g. `db:\"name:users,extra\"` (malformed separator) or multiple '=' parts.","commonSituations":"Hand-written tags with typos (comma instead of semicolon, missing '='); copying tags from other ORMs with different option syntaxes.","solutions":["Fix the tag on the named field to valid syntax (name=xxx, semicolon-separated options)","Remove unsupported options from the tag","Use `db:\"-\"` to exclude the field from mapping if it needs no column"],"exampleFix":"// before\nName string `db:\"name:users,primary\"`\n// after\nName string `db:\"name=users\"`","handlingStrategy":"validation","validationCode":"for _, f := range reflect.VisibleFields(reflect.TypeOf(Model{})) {\n\ttag := f.Tag.Get(\"db\")\n\tif tag != \"\" && tag != \"-\" && strings.Contains(tag, \",\") { return fmt.Errorf(\"field %s: suspicious tag %q\", f.Name, tag) }\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Keep db tags to `name=xxx` form or plain column name","Use `db:\"-\"` to exclude fields","Add a startup test that registers every model struct"],"tags":["struct-tags","reflection","registration"],"backgroundTag":"invalid-struct-tag","analyzedSha":"7bedaf55a0b64bbb2248a5845a2c60d81a30996a","analyzedAt":"2026-08-30T20:38:16.250Z","schemaVersion":2},"datasetVersion":"2026-08-30T23:17:21.991Z"}