首页 文章 精选 留言 我的

精选列表

搜索[版本发布],共10000篇文章
优秀的个人博客,低调大师

Easy_Trans 1.1.9 版本发布,一个注解搞定字典/外键翻译

1、升级内容 A 新增多数据源支持 如果一个系统连接了多个数据库,可能user和order是2个库,order在翻译创建人的时候,就可以指定user数据源 @Trans(type = TransType.SIMPLE, target = User.class, fields = "userName", dataSource="User") private Long userId; B 优化自动查询SQL执行次数 C bug fix 解决跨微服务翻译,使用JPA 时主键数据类型问题 解决JPA 根据id查询,id匹配不到数据时候报错。 2、介绍 在项目开发中,借助JPA和Mybatis Plus我们已经可以做到单表查询不写SQL,但是很多时候我们需要关联字典表,关联其他表来实现字典码和外键的翻译,又要去写sql,使用 EasyTrans 你只需要在被翻译的pojo属性上加一个注解即可完成字典码/外键 翻译。 先看效果: easy trans适用于三种场景 1 我有一个id,但是我需要给客户展示他的title/name 但是我又不想做表关联查询 2 我有一个字典码 sex 和 一个字典值0 我希望能翻译成 男 给客户展示。 3 我有一组user id 比如 1,2,3 我希望能展示成 张三,李四,王五 给客户 食用步骤 技术经理/架构 需要做的事情 1 、先把maven 引用加上 <dependency> <groupId>com.fhs-opensource</groupId> <artifactId>easy-trans-spring-boot-starter</artifactId> <version>1.1.9</version> </dependency> Mybatis plus用户另外还需要加以下扩展: <dependency> <groupId>com.fhs-opensource</groupId> <artifactId>easy_trans_mybatis_plus_extend</artifactId> <version>1.1.9</version> </dependency> JPA 用户另外还需要加以下扩展: <dependency> <groupId>com.fhs-opensource</groupId> <artifactId>easy_trans_jpa_extend</artifactId> <version>1.1.9</version> </dependency> 2、在yaml中添加如下配置 easy-trans: autotrans: # 如果没使用到autotrans可以不配置 #您的service/dao所在的包 支持通配符比如com.*.**.service.**,他的默认值是com.*.*.service.impl package: com.fhs.test.service.**;com.fhs.test.dao.** #启用redis缓存 如果不用redis请设置为false is-enable-redis: true #启用全局翻译(拦截所有responseBody进行自动翻译),如果对于性能要求很高可关闭此配置 is-enable-global: true #启用平铺模式 is-enable-tile: true spring:#如果用到redis配置redis连接 redis: host: 192.168.0.213 port: 6379 password: 123456 database: 0 timeout: 6000 3、如果不使用redis,请在启动类加禁用掉redis的自动配置类 @SpringBootApplication(exclude = { RedisAutoConfiguration.class }) 4、初始化字典数据(如果你们项目没字典表请忽略) @Autowired //注入字典翻译服务 private DictionaryTransService dictionaryTransService; //在某处将字典缓存刷新到翻译服务中,以下是demo Map<String,String> transMap = new HashMap<>(); transMap.put("0","男"); transMap.put("1","女"); dictionaryTransService.refreshCache("sex",transMap); 5、微服务配置(比如订单服务用到了用户服务的user数据来进行翻译,不牵扯微服务的可以不管) A、白名单添加 /easyTrans/proxy/** 保证其不被拦截,RPC trans的时候easytrans会自动调用目标微服务的接口来获取数据。 B、应用之间的认证可以通过filter/interceptor实现,然后自定义RestTemplate 保证easytrans在请求用户服务的时候带上需要认证的参数 普通程序员需要做的事情 pojo 中添加 @Data @Builder @AllArgsConstructor @NoArgsConstructor //实现TransPojo 接口,代表这个类需要被翻译或者被当作翻译的数据源 public class Student implements TransPojo { // 字典翻译 ref为非必填 @Trans(type = TransType.DICTIONARY,key = "sex",ref = "sexName") private Integer sex; //这个字段可以不写,实现了TransPojo接口后有一个getTransMap方法,sexName可以让前端去transMap取 private String sexName; //SIMPLE 翻译,用于关联其他的表进行翻译 schoolName 为 School 的一个字段 @Trans(type = TransType.SIMPLE,target = School.class,fields = "schoolName") private String schoolId; //远程翻译,调用其他微服务的数据源进行翻译 @Trans(type = TransType.RPC,targetClassName = "com.fhs.test.pojo.School",fields = "schoolName",serviceName = "easyTrans",alias = "middle") private String middleSchoolId; // 枚举翻译,返回文科还是理科给前端 @Trans(type=TransType.ENUM,key = "desc") private StudentType studentType = StudentType.ARTS; public static enum StudentType{ ARTS("文科"), SCIENCES("理科"); private String desc; StudentType(String desc){ this.desc = desc; } } } 然后访问你的controller,看返回结果。 示例项目 https://gitee.com/fhs-opensource/easy_trans_springboot_demo 插件文档 https://gitee.com/fhs-opensource/easy_trans/wikis/%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B

优秀的个人博客,低调大师

Easy_Trans 1.1.1 版本发布,一个注解搞定字典/外键翻译

1、升级内容 A @Trans注解ref支持添加多个(建议使用平铺模式而不是ref) B 修复@Trans type写错的话,报空指针bug C 添加平铺模式 平铺模式为:比如我有一个student类,他有一个teacherid,根据teacherid翻译得到的teacherName框架会放到student的transMap这个map中,序列完了如下: { "id":1, "teacherId":1, "transMap":{"teacherName":"王老师"} } 开启平铺模式后序列化为: { "id":1, "teacherId":1, "teacherName":"王老师" } 开启方法: easy-trans.is-enable-tile=true 2、介绍 在项目开发中,借助JPA和Mybatis Plus我们已经可以做到单表查询不写SQL,但是很多时候我们需要关联字典表,关联其他表来实现字典码和外键的翻译,又要去写sql,使用 EasyTrans 你只需要在被翻译的pojo属性上加一个注解即可完成字典码/外键 翻译。 先看效果: easy trans适用于三种场景 1 我有一个id,但是我需要给客户展示他的title/name 但是我又不想做表关联查询 2 我有一个字典码 sex 和 一个字典值0 我希望能翻译成 男 给客户展示。 3 我有一组user id 比如 1,2,3 我希望能展示成 张三,李四,王五 给客户 食用步骤 技术经理/架构 需要做的事情 1 、先把maven 引用加上 <dependency> <groupId>com.fhs-opensource</groupId> <artifactId>easy-trans-spring-boot-starter</artifactId> <version>1.1.1</version> </dependency> Mybatis plus用户另外还需要加以下扩展: <dependency> <groupId>com.fhs-opensource</groupId> <artifactId>easy_trans_mybatis_plus_extend</artifactId> <version>1.1.1</version> </dependency> JPA 用户另外还需要加以下扩展: <dependency> <groupId>com.fhs-opensource</groupId> <artifactId>easy_trans_jpa_extend</artifactId> <version>1.1.1</version> </dependency> 如果使用Redis请添加redis的引用(如果之前加过了请不要重复添加) <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</artifactId> </dependency> 2、在yaml中添加如下配置 easy-trans: autotrans: #您的service/dao所在的包 支持通配符比如com.*.**.service.**,他的默认值是com.*.*.service.impl package: com.fhs.test.service.**;com.fhs.test.dao.** #启用redis缓存 如果不用redis请设置为false is-enable-redis: true #启用全局翻译(拦截所有responseBody进行自动翻译),如果对于性能要求很高可关闭此配置 is-enable-global: true spring:#如果用到redis配置redis连接 redis: host: 192.168.0.213 port: 6379 password: 123456 database: 0 timeout: 6000 3、如果不使用redis,请在启动类加禁用掉redis的自动配置类 @SpringBootApplication(exclude = { RedisAutoConfiguration.class }) 4、初始化字典数据(如果你们项目没字典表请忽略) @Autowired //注入字典翻译服务 private DictionaryTransService dictionaryTransService; //在某处将字典缓存刷新到翻译服务中,以下是demo Map<String,String> transMap = new HashMap<>(); transMap.put("0","男"); transMap.put("1","女"); dictionaryTransService.refreshCache("sex",transMap); 5、微服务配置(比如订单服务用到了用户服务的user数据来进行翻译,不牵扯微服务的可以不管) A、白名单添加 /easyTrans/proxy/** 保证其不被拦截,RPC trans的时候easytrans会自动调用目标微服务的接口来获取数据。 B、应用之间的认证可以通过filter/interceptor实现,然后自定义RestTemplate 保证easytrans在请求用户服务的时候带上需要认证的参数 普通程序员需要做的事情 pojo 中添加 @Data @Builder @AllArgsConstructor @NoArgsConstructor //实现TransPojo 接口,代表这个类需要被翻译或者被当作翻译的数据源 public class Student implements TransPojo { // 字典翻译 ref为非必填 @Trans(type = TransType.DICTIONARY,key = "sex") private Integer sex; //SIMPLE 翻译,用于关联其他的表进行翻译 schoolName 为 School 的一个字段 @Trans(type = TransType.SIMPLE,target = School.class,fields = "schoolName") private String schoolId; //远程翻译,调用其他微服务的数据源进行翻译 @Trans(type = TransType.RPC,targetClassName = "com.fhs.test.pojo.School",fields = "schoolName",serviceName = "easyTrans",alias = "middle") private String middleSchoolId; } 然后访问你的controller,看返回结果。 示例项目 https://gitee.com/fhs-opensource/easy_trans_springboot_demo 插件文档 https://gitee.com/fhs-opensource/easy_trans/wikis/%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B

优秀的个人博客,低调大师

go-dongle 0.0.1 版本发布了,支持常规编码解码以及加密解密方法

dongle 是一个轻量级、语义化、对开发者友好的Golang编码解码和加密解密库 如果您觉得不错,请给个 star 吧 github.com/golang-module/dongle gitee.com/go-package/dongle 安装使用 // 使用 github 库 go get -u github.com/golang-module/dongle import ( "github.com/golang-module/dongle" ) // 使用 gitee 库 go get -u gitee.com/go-package/dongle import ( "gitee.com/go-package/dongle" ) 编码&加密 Base32 编码 // 对字符串进行 base32 编码,输出字符串 dongle.Encode.FromString("hello world").ByBase32().ToString() // NBSWY3DPEB3W64TMMQ====== // 对字符串进行 base32 编码,输出字节切片 dongle.Encode.FromString("hello world").ByBase32().ToBytes() // []byte("NBSWY3DPEB3W64TMMQ======") // 对字节切片进行 base32 编码,输出字符串 dongle.Encode.FromBytes([]byte("hello world")).ByBase32().ToString() // NBSWY3DPEB3W64TMMQ====== // 对字节切片进行 base32 编码,输出字节切片 dongle.Encode.FromBytes([]byte("hello world")).ByBase32().ToBytes() // []byte("NBSWY3DPEB3W64TMMQ======") Base64 编码 // 对字符串进行 base64 编码,输出字符串 dongle.Encode.FromString("hello world").ByBase64().ToString() // aGVsbG8gd29ybGQ= // 对字符串进行 base64 编码,输出字节切片 dongle.Encode.FromString("hello world").ByBase64().ToBytes() // []byte("aGVsbG8gd29ybGQ=") // 对字节切片进行 base64 编码,输出字符串 dongle.Encode.FromBytes([]byte("hello world")).ByBase64().ToString() // aGVsbG8gd29ybGQ= // 对字节切片进行 base64 编码,输出字节切片 dongle.Encode.FromBytes([]byte("hello world")).ByBase64().ToBytes() // []byte("aGVsbG8gd29ybGQ=") Hex 编码 // 对字符串进行 hex 编码,输出字符串 dongle.Encode.FromString("hello world").ByHex().ToString() // 68656c6c6f20776f726c64= // 对字符串进行 hex 编码,输出字节切片 dongle.Encode.FromString("hello world").ByHex().ToBytes() // []byte("68656c6c6f20776f726c64") // 对字节切片进行 hex 编码,输出字符串 dongle.Encode.FromBytes([]byte("hello world")).ByHex().ToString() // 68656c6c6f20776f726c64 // 对字节切片进行 hex 编码,输出字节切片 dongle.Encode.FromBytes([]byte("hello world")).ByHex().ToBytes() // []byte("68656c6c6f20776f726c64") Md5 加密 // 对字符串进行 md5 加密,输出 hex 编码字符串 dongle.Encrypt.FromString("hello world").ByMd5().ToString() // 5eb63bbbe01eeed093cb22bb8f5acdc3 dongle.Encrypt.FromString("hello world").ByMd5().ToString("hex") // 5eb63bbbe01eeed093cb22bb8f5acdc3 // 对字符串进行 md5 加密,输出 base32 编码字符串 dongle.Encrypt.FromString("hello world").ByMd5().ToString("base32") // L23DXO7AD3XNBE6LEK5Y6WWNYM====== // 对字符串进行 md5 加密,输出 base64 编码字符串 dongle.Encrypt.FromString("hello world").ByMd5().ToString("base64") // XrY7u+Ae7tCTyyK7j1rNww== // 对字符串进行 md5 加密,输出 hex 编码字节切片 dongle.Encrypt.FromString("hello world").ByMd5().ToBytes() // []byte("5eb63bbbe01eeed093cb22bb8f5acdc3") dongle.Encrypt.FromString("hello world").ByMd5().ToBytes("hex") // []byte("5eb63bbbe01eeed093cb22bb8f5acdc3") // 对字符串进行 md5 加密,输出 base32 编码字节切片 dongle.Encrypt.FromString("hello world").ByMd5().ToBytes("base32") // []byte("L23DXO7AD3XNBE6LEK5Y6WWNYM======") // 对字符串进行 md5 加密,输出 base64 编码字节切片 dongle.Encrypt.FromString("hello world").ByMd5().ToBytes("base64") // []byte("XrY7u+Ae7tCTyyK7j1rNww==") // 对字节切片进行 md5 加密,输出 hex 编码字符串 dongle.Encrypt.FromBytes("hello world").ByMd5().ToString() // 5eb63bbbe01eeed093cb22bb8f5acdc3 dongle.Encrypt.FromBytes("hello world").ByMd5().ToString("hex") // 5eb63bbbe01eeed093cb22bb8f5acdc3 // 对字节切片进行 md5 加密,输出 base32 编码字符串 dongle.Encrypt.FromBytes("hello world").ByMd5().ToString("base32") // L23DXO7AD3XNBE6LEK5Y6WWNYM====== // 对字节切片进行 md5 加密,输出 base64 编码字符串 dongle.Encrypt.FromBytes("hello world").ByMd5().ToString("base64") // XrY7u+Ae7tCTyyK7j1rNww== // 对字节切片进行 md5 加密,输出 hex 编码字节切片 dongle.Encrypt.FromBytes("hello world").ByMd5().ToBytes() // []byte("5eb63bbbe01eeed093cb22bb8f5acdc3") dongle.Encrypt.FromBytes("hello world").ByMd5().ToBytes("hex") // []byte("5eb63bbbe01eeed093cb22bb8f5acdc3") // 对字节切片进行 md5 加密,输出 base32 编码字节切片 dongle.Encrypt.FromBytes("hello world").ByMd5().ToBytes("base32") // []byte("L23DXO7AD3XNBE6LEK5Y6WWNYM======") // 对字节切片进行 md5 加密,输出 base64 编码字节切片 dongle.Encrypt.FromBytes("hello world").ByMd5().ToBytes("base64") // []byte("XrY7u+Ae7tCTyyK7j1rNww==") // 对文件进行 md5 加密,输出 hex 编码字符串 dongle.Encrypt.FromFile("./LICENSE")).ByMd5().ToString() // 014f03f9025ea81a8a0e9734be540c53 dongle.Encrypt.FromFile("./LICENSE")).ByMd5().ToString("hex") // 014f03f9025ea81a8a0e9734be540c53 // 对文件进行 md5 加密,输出 base32 编码字符串 dongle.Encrypt.FromFile("./LICENSE")).ByMd5().ToString("base32") // AFHQH6ICL2UBVCQOS42L4VAMKM====== // 对文件进行 md5 加密,输出 base64 编码字符串 dongle.Encrypt.FromFile("./LICENSE")).ByMd5().ToString("base64") // AU8D+QJeqBqKDpc0vlQMUw== // 对文件进行 md5 加密,输出 hex 编码字节切片 dongle.Encrypt.FromFile("./LICENSE").ByMd5().ToBytes() // []byte("014f03f9025ea81a8a0e9734be540c53") dongle.Encrypt.FromFile("./LICENSE").ByMd5().ToBytes("hex") // []byte("014f03f9025ea81a8a0e9734be540c53") // 对文件进行 md5 加密,输出 base32 编码字节切片 dongle.Encrypt.FromFile("./LICENSE").ByMd5().ToBytes("base32") // []byte("AFHQH6ICL2UBVCQOS42L4VAMKM======") // 对文件进行 md5 加密,输出 base64 编码字节切片 dongle.Encrypt.FromFile("./LICENSE").ByMd5().ToBytes("base64") // []byte("AU8D+QJeqBqKDpc0vlQMUw==") Sha1 加密 // 对字符串进行 sha1 加密,输出 hex 编码字符串 dongle.Encrypt.FromString("hello world").BySha1().ToString() // 2aae6c35c94fcfb415dbe95f408b9ce91ee846ed dongle.Encrypt.FromString("hello world").BySha1().ToString("hex") // 2aae6c35c94fcfb415dbe95f408b9ce91ee846ed // 对字符串进行 sha1 加密,输出 base32 编码字符串 dongle.Encrypt.FromString("hello world").BySha1().ToString("base32") // FKXGYNOJJ7H3IFO35FPUBC445EPOQRXN // 对字符串进行 sha1 加密,输出 base64 编码字符串 dongle.Encrypt.FromString("hello world").BySha1().ToString("base64") // Kq5sNclPz7QV2+lfQIuc6R7oRu0= // 对字符串进行 sha1 加密,输出 hex 编码字节切片 dongle.Encrypt.FromString("hello world").BySha1().ToBytes() // []byte("2aae6c35c94fcfb415dbe95f408b9ce91ee846ed") dongle.Encrypt.FromString("hello world").BySha1().ToBytes("hex") // []byte("2aae6c35c94fcfb415dbe95f408b9ce91ee846ed") // 对字符串进行 sha1 加密,输出 base32 编码字节切片 dongle.Encrypt.FromString("hello world").BySha1().ToBytes("base32") // []byte("FKXGYNOJJ7H3IFO35FPUBC445EPOQRXN") // 对字符串进行 sha1 加密,输出 base64 编码字节切片 dongle.Encrypt.FromString("hello world").BySha1().ToBytes("base64") // []byte("Kq5sNclPz7QV2+lfQIuc6R7oRu0=") // 对字节切片进行 sha1 加密,输出 hex 编码字符串 dongle.Encrypt.FromBytes("hello world").BySha1().ToString() // 2aae6c35c94fcfb415dbe95f408b9ce91ee846ed openssl.Encrypt.FromBytes("hello world").BySha1().ToString("hex") // 2aae6c35c94fcfb415dbe95f408b9ce91ee846ed // 对字节切片进行 sha1 加密,输出 base32 编码字符串 dongle.Encrypt.FromBytes("hello world").BySha1().ToString("base32") // FKXGYNOJJ7H3IFO35FPUBC445EPOQRXN // 对字节切片进行 sha1 加密,输出 base64 编码字符串 dongle.Encrypt.FromBytes("hello world").BySha1().ToString("base64") // Kq5sNclPz7QV2+lfQIuc6R7oRu0= // 对字节切片进行 sha1 加密,输出 hex 编码字节切片 dongle.Encrypt.FromBytes("hello world").BySha1().ToBytes() // []byte("2aae6c35c94fcfb415dbe95f408b9ce91ee846ed") dongle.Encrypt.FromBytes("hello world").BySha1().ToBytes("hex") // []byte("2aae6c35c94fcfb415dbe95f408b9ce91ee846ed") // 对字节切片进行 sha1 加密,输出 base32 编码字节切片 dongle.Encrypt.FromBytes("hello world").BySha1().ToBytes("base32") // []byte("FKXGYNOJJ7H3IFO35FPUBC445EPOQRXN") // 对字节切片进行 sha1 加密,输出 base64 编码字节切片 dongle.Encrypt.FromBytes("hello world").BySha1().ToBytes("base64") // []byte("Kq5sNclPz7QV2+lfQIuc6R7oRu0=") Sha224 加密 // 对字符串进行 sha224 加密,输出 hex 编码字符串 dongle.Encrypt.FromString("hello world").Sha224().ToString() // 2f05477fc24bb4faefd86517156dafdecec45b8ad3cf2522a563582b dongle.Encrypt.FromString("hello world").Sha224().ToString("hex") // 2f05477fc24bb4faefd86517156dafdecec45b8ad3cf2522a563582b // 对字符串进行 sha224 加密,输出 base32 编码字符串 dongle.Encrypt.FromString("hello world").Sha224().ToString("base32") // F4CUO76CJO2PV36YMULRK3NP33HMIW4K2PHSKIVFMNMCW=== // 对字符串进行 sha224 加密,输出 base64 编码字符串 dongle.Encrypt.FromString("hello world").Sha224().ToString("base64") // LwVHf8JLtPrv2GUXFW2v3s7EW4rTzyUipWNYKw== // 对字符串进行 sha224 加密,输出 hex 编码字节切片 dongle.Encrypt.FromString("hello world").Sha224().ToBytes() // []byte("2f05477fc24bb4faefd86517156dafdecec45b8ad3cf2522a563582b") dongle.Encrypt.FromString("hello world").Sha224().ToBytes("hex") // []byte("2f05477fc24bb4faefd86517156dafdecec45b8ad3cf2522a563582b") // 对字符串进行 sha224 加密,输出 base32 编码字节切片 dongle.Encrypt.FromString("hello world").Sha224().ToBytes("base32") // []byte("F4CUO76CJO2PV36YMULRK3NP33HMIW4K2PHSKIVFMNMCW===") // 对字符串进行 sha224 加密,输出 base64 编码字节切片 dongle.Encrypt.FromString("hello world").Sha224().ToBytes("base64") // []byte("LwVHf8JLtPrv2GUXFW2v3s7EW4rTzyUipWNYKw==") // 对字节切片进行 sha224 加密,输出 hex 编码字符串 dongle.Encrypt.FromBytes("hello world").Sha224().ToString() // 2f05477fc24bb4faefd86517156dafdecec45b8ad3cf2522a563582b dongle.Encrypt.FromBytes("hello world").Sha224().ToString("hex") // 2f05477fc24bb4faefd86517156dafdecec45b8ad3cf2522a563582b // 对字节切片进行 sha224 加密,输出 base32 编码字符串 dongle.Encrypt.FromBytes("hello world").Sha224().ToString("base32") // F4CUO76CJO2PV36YMULRK3NP33HMIW4K2PHSKIVFMNMCW=== // 对字节切片进行 sha224 加密,输出 base64 编码字符串 dongle.Encrypt.FromBytes("hello world").Sha224().ToString("base64") // LwVHf8JLtPrv2GUXFW2v3s7EW4rTzyUipWNYKw== // 对字节切片进行 sha224 加密,输出 hex 编码字节切片 dongle.Encrypt.FromBytes("hello world").Sha224().ToBytes() // []byte("2f05477fc24bb4faefd86517156dafdecec45b8ad3cf2522a563582b") dongle.Encrypt.FromBytes("hello world").Sha224().ToBytes("hex") // []byte("2f05477fc24bb4faefd86517156dafdecec45b8ad3cf2522a563582b") // 对字节切片进行 sha224 加密,输出 base32 编码字节切片 dongle.Encrypt.FromBytes("hello world").Sha224().ToBytes("base32") // []byte("F4CUO76CJO2PV36YMULRK3NP33HMIW4K2PHSKIVFMNMCW===") // 对字节切片进行 sha224 加密,输出 base64 编码字节切片 dongle.Encrypt.FromBytes("hello world").Sha224().ToBytes("base64") // []byte("LwVHf8JLtPrv2GUXFW2v3s7EW4rTzyUipWNYKw==") Sha256 加密 // 对字符串进行 sha256 加密,输出 hex 编码字符串 dongle.Encrypt.FromString("hello world").Sha256().ToString() // b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9 dongle.Encrypt.FromString("hello world").Sha256().ToString("hex") // b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9 // 对字符串进行 sha256 加密,输出 base32 编码字符串 dongle.Encrypt.FromString("hello world").Sha256().ToString("base32") // XFGSPOMTJU7ARJJOKLL5U7NL7LCIJ37DPJJYB3UQRD32ZYXPZXUQ==== // 对字符串进行 sha256 加密,输出 base64 编码字符串 dongle.Encrypt.FromString("hello world").Sha256().ToString("base64") // uU0nuZNNPgilLlLX2n2r+sSE7+N6U4DukIj3rOLvzek= // 对字符串进行 sha256 加密,输出 hex 编码字节切片 dongle.Encrypt.FromString("hello world").Sha256().ToBytes() // []byte("b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9") dongle.Encrypt.FromString("hello world").Sha256().ToBytes("hex") // []byte("b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9") // 对字符串进行 sha256 加密,输出 base32 编码字节切片 dongle.Encrypt.FromString("hello world").Sha256().ToBytes("base32") // []byte("XFGSPOMTJU7ARJJOKLL5U7NL7LCIJ37DPJJYB3UQRD32ZYXPZXUQ====") // 对字符串进行 sha256 加密,输出 base64 编码字节切片 dongle.Encrypt.FromString("hello world").Sha256().ToBytes("base64") // []byte("uU0nuZNNPgilLlLX2n2r+sSE7+N6U4DukIj3rOLvzek=") // 对字节切片进行 sha256 加密,输出 hex 编码字符串 dongle.Encrypt.FromBytes("hello world").Sha256().ToString() // b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9 dongle.Encrypt.FromBytes("hello world").Sha256().ToString("hex") // b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9 // 对字节切片进行 sha256 加密,输出 base32 编码字符串 dongle.Encrypt.FromBytes("hello world").Sha256().ToString("base32") // XFGSPOMTJU7ARJJOKLL5U7NL7LCIJ37DPJJYB3UQRD32ZYXPZXUQ==== // 对字节切片进行 sha256 加密,输出 base64 编码字符串 dongle.Encrypt.FromBytes("hello world").Sha256().ToString("base64") // uU0nuZNNPgilLlLX2n2r+sSE7+N6U4DukIj3rOLvzek= // 对字节切片进行 sha256 加密,输出 hex 编码字节切片 dongle.Encrypt.FromBytes("hello world").Sha256().ToBytes() // []byte("b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9") dongle.Encrypt.FromBytes("hello world").Sha256().ToBytes("hex") // []byte("b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9") // 对字节切片进行 sha256 加密,输出 base32 编码字节切片 dongle.Encrypt.FromBytes("hello world").Sha256().ToBytes("base32") // []byte("XFGSPOMTJU7ARJJOKLL5U7NL7LCIJ37DPJJYB3UQRD32ZYXPZXUQ====") // 对字节切片进行 sha256 加密,输出 base64 编码字节切片 dongle.Encrypt.FromBytes("hello world").Sha256().ToBytes("base64") // []byte("uU0nuZNNPgilLlLX2n2r+sSE7+N6U4DukIj3rOLvzek=") Sha384 加密 // 对字符串进行 sha384 加密,输出 hex 编码字符串 dongle.Encrypt.FromString("hello world").Sha384().ToString() // fdbd8e75a67f29f701a4e040385e2e23986303ea10239211af907fcbb83578b3e417cb71ce646efd0819dd8c088de1bd dongle.Encrypt.FromString("hello world").Sha384().ToString("hex") // fdbd8e75a67f29f701a4e040385e2e23986303ea10239211af907fcbb83578b3e417cb71ce646efd0819dd8c088de1bd // 对字符串进行 sha384 加密,输出 base32 编码字符串 dongle.Encrypt.FromString("hello world").Sha384().ToString("base32") // 7W6Y45NGP4U7OANE4BADQXROEOMGGA7KCARZEENPSB74XOBVPCZ6IF6LOHHGI3X5BAM53DAIRXQ32=== // 对字符串进行 sha384 加密,输出 base64 编码字符串 dongle.Encrypt.FromString("hello world").Sha384().ToString("base64") // /b2OdaZ/KfcBpOBAOF4uI5hjA+oQI5IRr5B/y7g1eLPkF8txzmRu/QgZ3YwIjeG9 // 对字符串进行 sha384 加密,输出 hex 编码字节切片 dongle.Encrypt.FromString("hello world").Sha384().ToBytes() // []byte("fdbd8e75a67f29f701a4e040385e2e23986303ea10239211af907fcbb83578b3e417cb71ce646efd0819dd8c088de1bd") dongle.Encrypt.FromString("hello world").Sha384().ToBytes("hex") // []byte("fdbd8e75a67f29f701a4e040385e2e23986303ea10239211af907fcbb83578b3e417cb71ce646efd0819dd8c088de1bd") // 对字符串进行 sha384 加密,输出 base32 编码字节切片 dongle.Encrypt.FromString("hello world").Sha384().ToBytes("base32") // []byte("7W6Y45NGP4U7OANE4BADQXROEOMGGA7KCARZEENPSB74XOBVPCZ6IF6LOHHGI3X5BAM53DAIRXQ32===") // 对字符串进行 sha384 加密,输出 base64 编码字节切片 dongle.Encrypt.FromString("hello world").Sha384().ToBytes("base64") // []byte("/b2OdaZ/KfcBpOBAOF4uI5hjA+oQI5IRr5B/y7g1eLPkF8txzmRu/QgZ3YwIjeG9") // 对字节切片进行 sha384 加密,输出 hex 编码字符串 dongle.Encrypt.FromBytes("hello world").Sha384().ToString() // fdbd8e75a67f29f701a4e040385e2e23986303ea10239211af907fcbb83578b3e417cb71ce646efd0819dd8c088de1bd dongle.Encrypt.FromBytes("hello world").Sha384().ToString("hex") // fdbd8e75a67f29f701a4e040385e2e23986303ea10239211af907fcbb83578b3e417cb71ce646efd0819dd8c088de1bd // 对字节切片进行 sha384 加密,输出 base32 编码字符串 dongle.Encrypt.FromBytes("hello world").Sha384().ToString("base32") // 7W6Y45NGP4U7OANE4BADQXROEOMGGA7KCARZEENPSB74XOBVPCZ6IF6LOHHGI3X5BAM53DAIRXQ32=== // 对字节切片进行 sha384 加密,输出 base64 编码字符串 openssl.Encrypt.FromBytes("hello world").Sha384().ToString("base64") // /b2OdaZ/KfcBpOBAOF4uI5hjA+oQI5IRr5B/y7g1eLPkF8txzmRu/QgZ3YwIjeG9 // 对字节切片进行 sha384 加密,输出 hex 编码字节切片 dongle.Encrypt.FromBytes("hello world").Sha384().ToBytes() // []byte("fdbd8e75a67f29f701a4e040385e2e23986303ea10239211af907fcbb83578b3e417cb71ce646efd0819dd8c088de1bd") dongle.Encrypt.FromBytes("hello world").Sha384().ToBytes("hex") // []byte("fdbd8e75a67f29f701a4e040385e2e23986303ea10239211af907fcbb83578b3e417cb71ce646efd0819dd8c088de1bd") // 对字节切片进行 sha384 加密,输出 base32 编码字节切片 dongle.Encrypt.FromBytes("hello world").Sha384().ToBytes("base32") // []byte("7W6Y45NGP4U7OANE4BADQXROEOMGGA7KCARZEENPSB74XOBVPCZ6IF6LOHHGI3X5BAM53DAIRXQ32===") // 对字节切片进行 sha384 加密,输出 base64 编码字节切片 dongle.Encrypt.FromBytes("hello world").Sha384().ToBytes("base64") // []byte("/b2OdaZ/KfcBpOBAOF4uI5hjA+oQI5IRr5B/y7g1eLPkF8txzmRu/QgZ3YwIjeG9") Sha512 加密 // 对字符串进行 sha512 加密,输出 hex 编码字符串 dongle.Encrypt.FromString("hello world").Sha512().ToString() // 309ecc489c12d6eb4cc40f50c902f2b4d0ed77ee511a7c7a9bcd3ca86d4cd86f989dd35bc5ff499670da34255b45b0cfd830e81f605dcf7dc5542e93ae9cd76f dongle.Encrypt.FromString("hello world").Sha512().ToString("hex") // 309ecc489c12d6eb4cc40f50c902f2b4d0ed77ee511a7c7a9bcd3ca86d4cd86f989dd35bc5ff499670da34255b45b0cfd830e81f605dcf7dc5542e93ae9cd76f // 对字符串进行 sha512 加密,输出 base32 编码字符串 dongle.Encrypt.FromString("hello world").Sha512().ToString("base32") // GCPMYSE4CLLOWTGEB5IMSAXSWTIO257OKENHY6U3ZU6KQ3KM3BXZRHOTLPC76SMWODNDIJK3IWYM7WBQ5APWAXOPPXCVILUTV2ONO3Y= // 对字符串进行 sha512 加密,输出 base64 编码字符串 dongle.Encrypt.FromString("hello world").Sha512().ToString("base64") // MJ7MSJwS1utMxA9QyQLytNDtd+5RGnx6m808qG1M2G+YndNbxf9JlnDaNCVbRbDP2DDoH2Bdz33FVC6TrpzXbw== // 对字符串进行 sha512 加密,输出 hex 编码字节切片 dongle.Encrypt.FromString("hello world").Sha512().ToBytes() // []byte("309ecc489c12d6eb4cc40f50c902f2b4d0ed77ee511a7c7a9bcd3ca86d4cd86f989dd35bc5ff499670da34255b45b0cfd830e81f605dcf7dc5542e93ae9cd76f") dongle.Encrypt.FromString("hello world").Sha512().ToBytes("hex") // []byte("309ecc489c12d6eb4cc40f50c902f2b4d0ed77ee511a7c7a9bcd3ca86d4cd86f989dd35bc5ff499670da34255b45b0cfd830e81f605dcf7dc5542e93ae9cd76f") // 对字符串进行 sha512 加密,输出 base32 编码字节切片 dongle.Encrypt.FromString("hello world").Sha512().ToBytes("base32") // []byte("GCPMYSE4CLLOWTGEB5IMSAXSWTIO257OKENHY6U3ZU6KQ3KM3BXZRHOTLPC76SMWODNDIJK3IWYM7WBQ5APWAXOPPXCVILUTV2ONO3Y=") // 对字符串进行 sha512 加密,输出 base64 编码字节切片 dongle.Encrypt.FromString("hello world").Sha512().ToBytes("base64") // []byte("MJ7MSJwS1utMxA9QyQLytNDtd+5RGnx6m808qG1M2G+YndNbxf9JlnDaNCVbRbDP2DDoH2Bdz33FVC6TrpzXbw==") // 对字节切片进行 sha512 加密,输出 hex 编码字符串 dongle.Encrypt.FromBytes("hello world").Sha512().ToString() // 309ecc489c12d6eb4cc40f50c902f2b4d0ed77ee511a7c7a9bcd3ca86d4cd86f989dd35bc5ff499670da34255b45b0cfd830e81f605dcf7dc5542e93ae9cd76f dongle.Encrypt.FromBytes("hello world").Sha512().ToString("hex") // 309ecc489c12d6eb4cc40f50c902f2b4d0ed77ee511a7c7a9bcd3ca86d4cd86f989dd35bc5ff499670da34255b45b0cfd830e81f605dcf7dc5542e93ae9cd76f // 对字节切片进行 sha512 加密,输出 base32 编码字符串 dongle.Encrypt.FromBytes("hello world").Sha512().ToString("base32") // GCPMYSE4CLLOWTGEB5IMSAXSWTIO257OKENHY6U3ZU6KQ3KM3BXZRHOTLPC76SMWODNDIJK3IWYM7WBQ5APWAXOPPXCVILUTV2ONO3Y= // 对字节切片进行 sha512 加密,输出 base64 编码字符串 dongle.Encrypt.FromBytes("hello world").Sha512().ToString("base64") // MJ7MSJwS1utMxA9QyQLytNDtd+5RGnx6m808qG1M2G+YndNbxf9JlnDaNCVbRbDP2DDoH2Bdz33FVC6TrpzXbw== // 对字节切片进行 sha512 加密,输出 hex 编码字节切片 dongle.Encrypt.FromBytes("hello world").Sha512().ToBytes() // []byte("309ecc489c12d6eb4cc40f50c902f2b4d0ed77ee511a7c7a9bcd3ca86d4cd86f989dd35bc5ff499670da34255b45b0cfd830e81f605dcf7dc5542e93ae9cd76f") dongle.Encrypt.FromBytes("hello world").Sha512().ToBytes("hex") // []byte("309ecc489c12d6eb4cc40f50c902f2b4d0ed77ee511a7c7a9bcd3ca86d4cd86f989dd35bc5ff499670da34255b45b0cfd830e81f605dcf7dc5542e93ae9cd76f") // 对字节切片进行 sha512 加密,输出 base32 编码字节切片 dongle.Encrypt.FromBytes("hello world").Sha512().ToBytes("base32") // []byte("GCPMYSE4CLLOWTGEB5IMSAXSWTIO257OKENHY6U3ZU6KQ3KM3BXZRHOTLPC76SMWODNDIJK3IWYM7WBQ5APWAXOPPXCVILUTV2ONO3Y=") // 对字节切片进行 sha512 加密,输出 base64 编码字节切片 dongle.Encrypt.FromBytes("hello world").Sha512().ToBytes("base64") // []byte("MJ7MSJwS1utMxA9QyQLytNDtd+5RGnx6m808qG1M2G+YndNbxf9JlnDaNCVbRbDP2DDoH2Bdz33FVC6TrpzXbw==") 解码&解密 Base32 解码 // 对字符串进行 base64 解码,输出字符串 dongle.Decode.FromString("NBSWY3DPEB3W64TMMQ======").ByBase32().ToString() // hello world // 对字符串进行 base64 解码,输出字节切片 dongle.Decode.FromString("NBSWY3DPEB3W64TMMQ======").ByBase32().ToBytes() // []byte("hello world") // 对字节切片进行 base64 解码,输出字符串 dongle.Decode.FromBytes([]byte("NBSWY3DPEB3W64TMMQ======")).ByBase32().ToString() // hello world // 对字节切片进行 base64 解码,输出字节切片 dongle.Decode.FromBytes([]byte("NBSWY3DPEB3W64TMMQ======")).ByBase32().ToBytes() // []byte("hello world") Base64 解码 // 对字符串进行 base64 解码,输出字符串 dongle.Decode.FromString("aGVsbG8gd29ybGQ=").ByBase64().ToString() // hello world // 对字符串进行 base64 解码,输出字节切片 dongle.Decode.FromString("aGVsbG8gd29ybGQ=").ByBase64().ToBytes() // []byte("hello world") // 对字节切片进行 base64 解码,输出字符串 dongle.Decode.FromBytes([]byte("aGVsbG8gd29ybGQ=")).ByBase64().ToString() // hello world // 对字节切片进行 base64 解码,输出字节切片 dongle.Decode.FromBytes([]byte("aGVsbG8gd29ybGQ=")).ByBase64().ToBytes() // []byte("hello world") Hex 解码 // 对字符串进行 hex 解码,输出字符串 dongle.Decode.FromString("68656c6c6f20776f726c64").ByHex().ToString() // hello world // 对字符串进行 hex 解码,输出字节切片 dongle.Decode.FromString("68656c6c6f20776f726c64").ByHex().ToBytes() // []byte("hello world") // 对字节切片进行 hex 解码,输出字符串 dongle.Decode.FromBytes([]byte("68656c6c6f20776f726c64")).ByHex().ToString() // hello world // 对字节切片进行 hex 解码,输出字节切片 dongle.Decode.FromBytes([]byte("68656c6c6f20776f726c64")).ByHex().ToBytes() // []byte("hello world") 错误处理 如果有多个错误发生,只返回第一个错误,前一个错误排除后才返回下一个错误 e := dongle.Encrypy.FromFile("./demo.txt").ByMd5() if e.Error != nil { // 错误处理... log.Fatal(c.Error) } fmt.Println(c.ToString()) // 输出 invalid file "./demo.txt", please make sure the file exists 待做清单 AES 加密解密 DES 加密解密 3DES 加密解密 RSA 加密解密 RC2 加密解密 RC4 加密解密 RC5 加密解密 RC6 加密解密 SM1 加密解密 SM2 加密解密 SM3 加密解密 SM4 加密解密

优秀的个人博客,低调大师

go-carbon 1.5.1 版本发布, 修复已知 bug 和新增土耳其翻译文件

carbon 是一个轻量级、语义化、对开发者友好的Golang时间处理库,支持链式调用、农历和gorm、xorm等主流orm 目前已被awesome-go收录,如果您觉得不错,请给个 star 吧 github.com/golang-module/carbon gitee.com/go-package/carbon 更新日志 修复EndOfCentury()逻辑错误 规范代码注释格式 规范单元测试格式 优化错误提示文案 单元测试覆盖率提升到100% 新增土耳其语翻译文件lang/tr.json,由emresenyuva翻译

优秀的个人博客,低调大师

go-carbon 1.4.1 版本发布,新增农历相关方法和韩语翻译文件

carbon 是一个轻量级、语义化、对开发者友好的Golang时间处理库,支持链式调用、农历和gorm、xorm等主流orm。 如果您觉得不错,请给个 star 吧 github:github.com/golang-module/carbon gitee:gitee.com/go-package/carbon 更新日志 新增韩语翻译文件kr.json 新增Lunar().Year()方法获取农历年份 新增Lunar().Month()方法获取农历月份 新增Lunar().LeapMonth()方法获取农历闰月月份 新增Lunar().Day()方法获取农历日期 新增Lunar().ToChineseYearString()方法获取农历年字符串 新增Lunar().ToChineseMonthString()方法获取农历月字符串 新增Lunar().ToChineseDayString()方法获取农历日字符串 新增Lunar().ToGanZhiYearString()方法获取干支纪年字符串 新增Lunar().ToGanZhiMonthString()方法获取干支纪月字符串 新增Lunar().ToGanZhiDayString()方法获取干支纪日字符串 新增Lunar().IsLeapYear()方法判断是否是闰年 新增Lunar().IsLeapMonth()方法判断是否是闰月 修复Tomorrow()、Yesterday()、AddMonths()方法缺少时区的bug database.go文件拆分成database.go和json.go两个文件

优秀的个人博客,低调大师

HQChart 1.9806 版本发布,多日分时图支持集合竞价及区间选择

系统简介 HQChart是国内第1个基于传统PC股票客户端软件(C++)移植到js/py平台的一个项目, 包含K线图图形库及麦语法(分析家语法)指标执行器. 平台支持:js, vue, uniapp, 小程序 增加新功能 分时图及多日分时图支持区间选择 集合竞价支持收盘集合竞价 多日分时图支持集合竞价(国内首这个支持多日集合竞价) 集合竞价支持鼠标联动 Y轴内部刻度增加属性YTextBaseline,支持上下位置可以配置 具体分时图集合竞价使用详见教程HQChart使用教程78-分时图集合竞价 多日分时图集合竞价 demo地址:https://opensource2.zealink.com/hqweb/demo/demo_minute_shsz_days_call_auction.html 当日盘前集合竞价+收盘集合竞价 区间选择 更新日志 9800 修正多日分时图右键菜单集合竞价显示/隐藏无效 9758 DynamicMinuteTitlePainting调整集合竞价1.0数据格式显示样式 9756 小程序 ChartVolStick柱子高度<1,统一显示为1 9754 ChartVolStick() 高度小于1, 统一调整为1 9773 DRAWRECTREL() 支持上下,左右位置自动判断 9748 ShowSelectRect() 分时图显示位置调整 9747 分时图增加区间选择接口 9746 RequestDragMinuteData, RequestDragDayData 数据回调增加周期和复权参数 9743 集合竞价支持绘制点 更多更新日志详见:https://github.com/jones2000/HQChart/commits/master 在线演示地址:https://opensource2.zealink.com/vuehqweb/hq.demo.page.html 源码地址:https://gitee.com/jones2000/HQChart 源码地址:https://github.com/jones2000/HQChart uniapp插件地址:https://ext.dcloud.net.cn/plugin?id=4591 个人博客:https://blog.csdn.net/jones2000

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册