상황검사 표현식이 구조체의 필드를 확인하는 코드 생성기를 작성
"/ 파서 이동"및 구조체 태그를
문제
를 사용하여 유효성 검사 기능을 추가하여 사용자 정의 유형 인 경우유형 필드가 맞춤 유형인지 확인해야합니다.
예 :
다음은3210사용자 정의 유형
int, []int,*int,[]Integer,map[string]PhoneNumber
되지 않고 다음과
Integer,PhoneNumber,*PhoneNumber
내가 나는 그것이 정확히 일치하는 외모와지도를 추가 할 수 있습니다 다음과 같은 기능을 사용 할 수 있다고 생각 사용자 정의 형에게, [입니다 ] 지원
func isBuiltInType(typ string) bool {
switch typ {
case "bool", "byte", "complex128", "complex64", "error":
case "float32", "float64":
case "int", "int16", "int32", "int64", "int8":
case "rune", "string":
case "uint", "uint16", "uint32", "uint64", "uint8", "uintptr":
default:
return false
}
return true
}
그러나 parse.ParseExpr
등
당신은 타입 선언을 확인하려고, 또는 소스의 임의의 값 있습니까? 'ParseExpr'은 표현식에 타입 정보가 없으므로 실제 타입을 자신에게 부여 할 수 없습니다. 유형을 결정할 필요가있는 예를 보여 주면 도움이 될 것입니다. 또한 호출 할 때 "사용자 정의 유형"은 여기에 기본 유형으로 나열된 유형 중 하나를 가질 수 있습니다. – JimB
@JimB 구조체 필드는'field name','field type' 및'struct tag'의 세 부분으로 구성됩니다.'field type'을 체크 할 필요가 있습니다.'custom type'을 내장형 . 중첩 된 검사를 위해 구조체에 Validate 함수를 생성하는 코드를 작성 했으므로'validater'를 구현하는 경우 필드에 Validate를 호출해야합니다. f –
소스를 파싱 한 후 메서드를 구현하는 모든 형식을 수집하는 것이 더 나을 것입니다 이 경우에는'Validate() error'와 같은 것으로 보이기를 원합니다. 그런 다음 구조체에 대한 유효성 검사 코드를 생성하고 해당 필드 형식을 검사 할 때 호출을 생성 할 메서드를 구현하는 수집 된 형식 집합에 지정된 형식이 들어 있는지 확인합니다. – mkopriva