package l_encrypt type ( ApiCrypt interface { Encrypt(data string) (encryptData []byte, err error) Decrypt(encryptData string) (decryptData []byte, err error) } Rsa struct { App *AppEncrypt } SM2 struct { App *AppEncrypt } SM4 struct { App *AppEncrypt } AES struct { App *AppEncrypt } AppEncrypt struct { UniKEY string MerchantPublicKey string PublicKey string PrivateKey string } ) var apiCryptMap = map[cryptType]func(en *AppEncrypt) ApiCrypt{ CryptRSA: NewRsa, CryptSM2: NewSm2, CryptSM4: NewSm4, CryptAES: NewAES, } func Crypt(ct cryptType) (cryptFunc func(app *AppEncrypt) ApiCrypt) { return apiCryptMap[ct] }