go
dalgurak
这个作者很懒,什么都没留下…
展开
-
go-图片旋转处理
最近在做旋转图片验证码,需要对图片进行旋转,网上没有找到类似的库,也没有扎到对应的方法,只有一些简单旋转90度,180度,达不到我的要求。自己封装一个旋转图片的方法,可以旋转任意角度func TestRotating(t *testing.T) { // 打开源图(一张长方形的png图片) f, _ := os.Open("C:/Users/Admin/Desktop/one.png") // png解码 sImg, _ := png.Decode(f) // 圆半径(需要从源图中扣出.原创 2020-11-27 16:07:31 · 762 阅读 · 0 评论 -
GO-获取斗鱼弹幕消息
斗鱼弹幕消息官方没有提供SDK,自己封装了GO的斗鱼弹幕消息包,下面介绍一下git地址:https://github.com/itpika/douyumsg安装go get -u github.com/itpika/douyumsg使用package mainimport ( "fmt" "os" "runtime" "github.com/itpika/douyumsg/lib/logger" "github.com/itpika/douyumsg")fu..原创 2020-07-30 15:45:02 · 450 阅读 · 0 评论 -
golang-标准库(crypto/ecdsa)
ecdsa包提供了非对称加密算法ECDSA,ECDSA为椭圆曲线加密算法,是基于椭圆方程公式,安全性要高于RSA。这里说下使用ecdsa的密匙生成和签名校验,不涉及原理;go中ecdsa目前只有用私钥加密,公钥做校验,没有解密环节;目前可以应用于数字签名;基于RSA的基础,本文直接贴出代码,代码有注释,不做过多的阐述,加密算法都是别人为我们封装好的工具方法,具体原理不涉及pack...原创 2020-04-14 17:14:31 · 11660 阅读 · 0 评论 -
golang-标准库(unsafe)
除了c家族的编程语言明确提供了直接通过指针运算操作内存的方式,其它语言大多屏蔽了这一操作,程序员直接操作内存往往不太安全,容易出现各种问题。go有着c的影子,保留了指针但又对指针的能力进行了削弱。在go中也不能直接进行指针运算来操作内存。但go对指针还是留了一扇不起眼的窗来进行指针运算,这扇窗就是unsafe包。首先unsafe包的内容并不多,只有寥寥几个数据结构和函数。要使用unsafe包...原创 2020-02-05 12:25:36 · 9845 阅读 · 0 评论 -
golang-协程理解
本文总结一下go协程的理解,如有错误望请指正。网上都说协程是一种轻量级线程,线程又是一种轻量级的进程。这话在语言层面看来是没有错的,但它们的实现是不同的。线程是cpu资源调度的最小单位。协程不由cpu进行调度,由应用程序进行调度,也就是由go进行调度。在go中,协程的调度也有专门的调度器。但go的协程调度器的复杂程度比cpu的线程调度器是要低许多的。计算机进程/线程的运行是抢占式的,操...原创 2020-02-02 13:26:50 · 9865 阅读 · 0 评论 -
golang-切片与数组的区别理解
接触golang有一年多了,很长一段时间对数据和切片的理解都模模糊糊,到今天为止总结一下自己对数组和切片理解。数组:在go中,数组是一种值类型。虽然数组的元素可以被修改,但数组本身的赋值和传参都是以整体赋值的方式进行的。数组由长度,容量和数据组成,这也是为什么不同长度,但数据类型相同的数组在go中不能互相赋值的原因,因为它们的长度不同(比如:[2]int,[3]int这两种类型),此外...原创 2019-12-10 22:30:07 · 9396 阅读 · 0 评论 -
golang标准库-flag
flag包是go提供的用来解析命令行参数的包,虽然os.Arg方法也能拿到命令行的所有参数,但它拿到的参数是没有格式和说明的,flag包能够解析 -port=8080 这类具有明确格式意义的参数,为程序提供明确的启动参数下面我们来看用flag包解析 -port=8080 这个参数的实例:先认识一个解析参数的方法:func Int(name string, value int...原创 2019-06-24 16:13:24 · 9552 阅读 · 0 评论 -
golang-标准库(math/rand)
rand包是go提供用来产生各种各样随机数的包,本文对这些产生随机数的方法做一下介绍。注意:rand生成的数值虽然说是随机数,但它其实是伪随机数,关于为什么是伪随机数,而不是真正的随机数,本文不做详细讲解,因为我也不是太清楚,只是提出这一点;简单说一下我的理解:真正的随机数是无规则可循的,就像抛硬币,正反面是真正随机的,这是一个真正的随机案例。计算机底层生成一个数值,究其根源它也是程序员们根据某...原创 2019-07-09 10:12:39 · 12340 阅读 · 0 评论 -
golang标准库-crypto/sha1,crypto/sha256,crypto/sha512(sha加密算法)
sha加密算法与MD5算法一样也是hash算法的一种,go提供了sha算法的几种,sha1,sha256,sha512,本章节一起讲解它们的使用方法先看sha1,sha1加密后的结果为20位字节大小,转化为十六进制,最终结果就是40位。sha1和md5一样属于出现比较早的hash算法,虽然要破解,产生hash碰撞的记录依然很小,但现在已经有反向查表发和彩虹表等一些方法可以很轻松逆向查到h...原创 2019-06-28 10:11:57 · 11783 阅读 · 0 评论 -
golang-标准库(encoding/base64)
base64是编程中常见的编码和进制,本文给出go语言中对base64编码的转化使用。base64:encoding/base64包实现了RFC 4648规定的base64编码。encoding/base64包给我们提供了一个现成的结构体对象(StdEncoding),我们只需要使用这个对象的方法就可以对数据进行base64编码/解码。先看编码:下面是加密的三个相关...原创 2019-07-03 22:09:08 · 12718 阅读 · 0 评论 -
golang标准库-crypto/hmac(加密哈希算法)
hmac算法是加密的hash算法,它需要一个hash算法(比如sha256获取md5等)和一个密匙key,在hash计算的过程中将密匙key混入,产生一个和原来hash算法相同位数的hash值。在大多数情况下,我们甚至可以将hamc算法看做是加盐的hash算法(加盐是将一个随机字符串放在需要加密的密文前面或者后面,然后对这个拼接后的密文进行加密得到hash值)。但它们的加密原理肯定不一样,...原创 2019-06-28 14:19:10 · 14291 阅读 · 0 评论 -
golang-标准库(encoding/hex)
encoding/hex包提供了十六进制转换的相关函数。编码先看函数:func EncodedLen(n int) int =》计算长度为n的明文,编码后的长度func Encode(dst, src []byte) int =》 将src中的数据编码为16进制后存入dst中,返回实际写入的字节。func EncodeToString(src []byte) string ...原创 2019-07-04 10:00:42 · 13039 阅读 · 0 评论 -
golang-标准库(crypto/rsa)
本文讲解使用go提供的rsa包生成私匙和公匙,以及使用它们进行加解密公匙是根据私匙计算而来的,go中公匙同样也是通过私匙获得,下面看获取私匙和公匙的方法:// 下面是一个生成私匙和公匙的方法// privateKey, publicKey分别是私匙和公匙的文件可写流,私匙和公匙分别写入到这二个文件中// bits为生成私匙的长度func generatPrivateAndPub...原创 2019-09-24 15:08:09 · 11439 阅读 · 0 评论 -
golang-标准库(html/template)
这个标准库,是go实现了数据驱动的模板,用于生成可对抗代码注入的安全HTML输出。简单说就是对html,css,javascript进行安全转换;例如对html中的<div>这个标签的特殊字符<>进行转换。还有用于生成安全的html模版代码的方法。与之相似还有另一个包 text/template,只是前者解析html,后者解析普通文本字符串而已。先看几个简单ht...原创 2019-07-08 14:17:09 · 4502 阅读 · 0 评论 -
golang标准库-io
io包提供了对I/O操作的基本接口。本包的基本任务是包装这些操作已有的实现,使之成为共享的公共接口,因为这些接口对底层实现包装,除非得到其它方面的通知,客户端不应假设它们是并发执行安全的。这个包在日常的开发中可能用的不多,本章主要对包的接口做说明,可以做的代码示例不多,具体的代码实例就用文件的I/O来举例,网络IO不好模拟。不过都是IO,原理上来说都是一样的这个包定义了很多的IO接口...原创 2019-06-23 10:54:44 · 9538 阅读 · 0 评论 -
golang标准库-操作系统(os)
读完本篇文章大概会花费你5-20分钟时间,有些内容可选择跳过os包提供了操作系统的系列函数,这些接口不依赖平台。设计为Unix风格的,错误处理是go风格的;调用失败会返回错误值而非错误码。通常错误值里包含更多信息。os包的接口在所有操作系统中都是一致的。非公用的属性可以从操作系统特定的syscall包获取。参考资料(go语言中文网):https://studygolang.com/p...原创 2019-06-06 11:23:59 · 12419 阅读 · 0 评论 -
golang标准库-环形链表(ring)
Ring类型代表环形链表的一个元素,同时也代表链表本身。环形链表没有头尾;指向环形链表任一元素的指针都可以作为整个环形链表看待。Ring零值是具有一个(Value字段为nil的)元素的链表。原创 2019-06-01 21:10:25 · 11188 阅读 · 0 评论 -
golang标准库-os/exec
exec包可以用于执行外部命令。简单来说,就是可以用该包来执行其它的应用程序(比如shell脚本,或者其它任意可执行程序)。它对os.StartProcess函数做了包装,以便更容易的对输入输出做处理,使用管道连接I/O,以及作其它的一些调整 。包:os/exec下面先看这个包的基本方法func Command(name string, arg ...string) *Cmd...原创 2019-06-10 12:07:42 · 10024 阅读 · 0 评论 -
golang标准库-bytes(第一节)
bytes包是go提供的用来操作byte切片的工具包,包含对byte切片的查询,截取,替换,拼接,读取等方法,本章主要介绍查询,截取,替换,拼接等方法;读取由于涉及buffer缓冲将在第二节讲解。本节内容全是介绍bytes包的各种各样的方法,内容比较单一,没有太多go编程理论知识。下面将以方法介绍后面紧跟着代码实例的形式进行讲解,代码可直接粘贴运行,读者可自行测试。先介绍比较常用...原创 2019-06-20 10:08:45 · 10708 阅读 · 0 评论 -
golang标准库-os/user
user包提供了根据用户id查询用户相关信息的方法包:os/user获取当前用户信息func Current() (*User, error) // 获取当前用户信息,返回一个User结构体,结构体中的Username,Uid,HomeDir,Gid分别表示当前用户的名称,用户id,用户主目录,和用户所属组id下面看例子(获取当前用户信息):package main...原创 2019-06-10 16:11:05 · 10037 阅读 · 0 评论 -
golang标准库-bytes(第二节)
上一节讲了bytes包的基本操作方法,这一节我们重点来看bytes包的Buffer,本节介绍Buffer相关的读写。在稍微底层的开发中。Buffer是必不可少的,特别是文件流的读写。先来Buffer类型type Buffer struct { buf []byte // contents are the bytes buf[off : len(buf)] =>...原创 2019-06-20 16:14:45 · 9711 阅读 · 0 评论 -
golang标准库-html
这个标准库比较简单,它提供了用于转义和解转义HTML文本的两个函数。包:htmlfunc EscapeString(s string) stringEscapeString函数将特定的一些字符转为逸码(编码)后的字符,如"<"变成"<"。这个函数它只会修改五个字符:<、>、&、'、"。func UnescapeString(s ...原创 2019-06-04 17:06:30 · 11460 阅读 · 0 评论 -
golang标准库-path
path包提供了对路径进行各种操作的一系列函数(有8个),里面的函数都比较简单,甚至源码读起来都很轻松,里面的函数大多数自己就可以轻松实现,不过go还是把这些简单的函数加进了标准库包:path先看这些函数的作用func IsAbs(path string) bool// 判断路径是否是绝对路径 func Split(path string) (dir, file string)...原创 2019-06-11 09:55:46 · 9676 阅读 · 0 评论 -
golang标准库-ioutil
ioutil包实现了一些实用的函数,里面的 方法不多。最最常用的就是文件的读写,下面来看具体的方法先看读写文件的方法func ReadFile(filename string) ([]byte, error) => 读取一个文件的全部内容func ReadAll(r io.Reader) ([]byte, error) => 读取一个Reader里面的全部数据,r是一个实现...原创 2019-06-21 14:57:15 · 330 阅读 · 0 评论 -
golang标准库-log
log包实现了简单的日志服务,该包提供一些格式化输出的方法,属于fmt包的加强版;也可以自定义输出格式;用该包做开发中的日志打印是个不错的选择先看一些简单方法(和fmt包的方法类似)func Println(v ...interface{}) => 将格式化后的字符串输出到标准的logger,参数用和fmt.Println相同的方法处理func Print(v ...in...原创 2019-06-25 15:06:48 · 10124 阅读 · 0 评论 -
golang标准库-crypto/md5(md5加密算法)
本文讲解如何使用go封装好的md5算法,不深入剖析md5算法原理。首先我们要知道md5算法属于hash算法的一种,所以在了解md5之前,我们先认识一下go提供的hash接口。hash算法是保证只要输入的值不同,就一定会得到两个不同的指定长度的hash值。当前两个不同值产生相同的hash还是有可能的,只是这个可能性很小很小先认识go的hash接口(位于go标准库-hash包):ty...原创 2019-06-26 10:56:31 · 11521 阅读 · 0 评论 -
golang标准库-排序(sort)
sort包,顾名思义用来排序的包,里面提供的工具方法可以对int,string,float64类型的切片进行快速排序和查找,如果自己定义的数据类型,实现了sort.Interface类型接口,也可以进行排序和查找。这个包方法不算多,也不复杂。本文讲解了sort包90%的内容先看三个类型的基本排序方法:func Ints(a []int) // 将a排序为递增顺序。func Fl...原创 2019-06-18 16:01:58 · 10708 阅读 · 0 评论 -
GO连接mongodb数据库
介绍一个go连接mongo的开源工具mongodb/mongo-go-drivergo连接mongo的工具不是太多,几年前的朋友门大多对gopkg.in/mgo.v2比较熟悉,这是18年之前比较知名的开源工具,但在18年后已经不在维护了,作者的原话是最主要的原因是我已经停止在任何新项目中使用MongoDB,大神都不靠这个吃饭了。所以不推荐大家使用,于是在github上找了另一个很活跃的开源...原创 2019-04-29 17:20:28 · 14318 阅读 · 2 评论