状況チェック式は構造体のフィールドをチェックするコードジェネレータを書い
「/パーサを行く」と構造体タグに
問題
を使用して、検証機能を追加使用して、カスタムタイプがある場合ここで私は
、タイプフィールドは、カスタムタイプかすなわちであるかどうかを確認する必要があります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'の3つの部分を持っています。' field type'をチェックする必要があります。 'custom type'に組み込み型。 ネストされたチェックの構造体にValidate関数を生成するコードを書いているので、 'validater'を実装しているフィールドでValidateを呼び出す必要がありますf –
より良い方法は、ソースを解析した後、この場合は 'Validate()error'のように見えるものを呼びたいと思っています。次に、いくつかの構造体の検証コードを生成し、フィールドの型を検査するときに、呼び出しを生成するメソッドを実装する収集された型のセットに、指定された型が含まれているかどうかを確認します。 – mkopriva