go-playground/validator · error

tag '%s'不能用于struct类型.

Error message

tag '%s'不能用于struct类型.

What it means

Raised inside the Simplified Chinese 'lt' translation registration when the field under translation is a struct. The lt validator only handles numbers, strings, collections (by length) and time.Time, so any other struct kind is rejected by the translator before a message is produced. It fires when a struct field other than time.Time is tagged with lt.

Source

Thrown at translations/zh/zh.go:481

				case reflect.Slice, reflect.Map, reflect.Array:
					var c string

					err = fn()
					if err != nil {
						goto END
					}

					c, err = ut.C("lt-items-item", f64, digits, ut.FmtNumber(f64, digits))
					if err != nil {
						goto END
					}

					t, err = ut.T("lt-items", fe.Field(), c)

				case reflect.Struct:
					if fe.Type() != reflect.TypeOf(time.Time{}) {
						err = fmt.Errorf("tag '%s'不能用于struct类型.", fe.Tag())
					} else {
						t, err = ut.T("lt-datetime", fe.Field())
					}

				default:
					err = fn()
					if err != nil {
						goto END
					}

					t, err = ut.T("lt-number", fe.Field(), ut.FmtNumber(f64, digits))
				}

			END:
				if err != nil {
					fmt.Printf("警告: 翻译字段错误: %s", err)
					return fe.(error).Error()
				}

View on GitHub (pinned to facf128d2e)

Solutions

  1. Remove the lt tag from the struct-typed field
  2. Validate inner scalar fields of the struct with lt
  3. Add a struct-level validator for the desired constraint
  4. Use time.Time exactly for datetime fields so lt-datetime applies
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at translations/zh/zh.go:481 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of go-playground/validator@facf128d2e (2026-09-02). Data as JSON: /api/errors/fd5ad9c4a020d7df. Report an issue: GitHub.