🖼 golang-图片旋转

最近在做旋转图片验证码,需要对图片进行旋转,网上没有找到类似的库,也没有扎到对应的方法,只有一些简单旋转90度,180度,达不到我的要求。自己封装一个旋转图片的方法,可以旋转任意角度
阅读更多
GO-获取斗鱼弹幕消息

算法笔记(2)

数组索引排序法

整理一个数组索引排序法,利用数组索引来排序的一种算法,效率远高于冒泡排序等普通算法。不过它有前提条件:已知数据中的最大元素。 原理:声明一个长度为待排序数组最大元素+1的索引数组,然后遍历待排序数组,将数组值对应索引数组的索引位的值+1。然后再便利索引数组的值得到有序数组。
阅读更多

golang-标准库(sync/atomic)

这个库是用来保证并发编程数据安全的。提供了对数据进行原子性操作的方法。 初学者对数据的原子性操作不是太理解,sync包的锁就可以保证并发数据的安全,为什么atomic包也可以保证并发的数据安全,它跟加锁的区别又是什么。 简单说一下,锁是编程语言层面提供的保证数据并发安全的一种方式,而原子性的操作函数是操作系统层面提供的方式,C语言中也有_Atomic关键字,也是用来保证并发编程安全的。下面通过例子来认识一下
阅读更多

golang-标准库(crypto/ecdsa)

ecdsa包提供了非对称加密算法ECDSA,ECDSA为椭圆曲线加密算法,是基于椭圆方程公式,安全性要高于RSA。这里说下使用ecdsa的密匙生成和签名校验,不涉及原理;go中ecdsa目前只有用私钥加密,公钥做校验,没有解密环节;目前可以应用于数字签名;
阅读更多

golang-unsafe包的用处

我们都知道byte切片转字符串用 string(byte[]{'a'}) 就可以办到,但这种方式会在内存中声明一块新的内存来存储字符串,原来的切片在没用被引用的情况下可能会在下一次GC被回收。这里我们可以用unsafe包来达到不申请新内存用原来切片的底层数据来完成切片到字符串的转换。(在go中字符串的底层就是是byte切片,而切片的底层是数组)
阅读更多

CommonJs和es6的Module的区别

历史上,js一直没有模块(module)体系,无法将一个项目拆分成多个模块文件。正对这一情况,社区出现了一些统一的规范:CommonJs和AMD,前者是针对服务端的js,也就是nodejs。后者是针对浏览器的。ES6在语言标准层面上,实现了模块功能,而且实现也比较简单。完全可以取代CommonJs和AMD。达成前后端js的模块风格统一。不过目前还未完全达到这一目的。nodejs目前主流还是采用CommonJS规范。不过在v13.2版本,nodejs已经实现了ES6模块语法,还未正式替换,在考察阶段。v13.2版本将js文件以 .mjs结尾,nodejs将它视为ES6模块。以 .cjs结尾则视为CommonJS模块。也可以在包的package.json文件中增加 "type": "module"信息。nodejs则将整个包都视为ES6模块来加载运行。
阅读更多