
go语言
文章平均质量分 73
sgsgy5
一起来交流,在程序猿的道路上一直走到底
展开
-
go语言中的面向对象,接口类型,工厂设计模式解读
工厂模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类 抽象工厂模式:为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类 个人觉得这个区别在于产品,如果产品单一,最合适用工厂模式,但是如果有多个业务品种、业务分类时,通过抽象工厂模式产生需要的对象是一种非常好的解决方式。再通俗深化理解下:工厂模式针对的是一个产品等级结构 ,抽象工厂模式针对的是面向多个产品...原创 2018-08-10 18:51:08 · 469 阅读 · 2 评论 -
简单随机字符串方法
今天讲解一下简单的随机字符串方法简单方法把需要的字符放进一个字符切片当中然后随机下标,把得到的下标去取字符切片的内容添加到新的字符串中,得到随机字符串 我们来看一下代码package mainimport ( "fmt" "math/rand" "time")func GetRandomString1(l int) string {...原创 2018-09-05 13:24:32 · 609 阅读 · 0 评论 -
LeetCode|无重复字符的最长子串
今天的题目为:给定一个字符串,找出不含有重复字符的最长子串的长度。示例 1:输入: "abcabcbb"输出: 3 解释: 无重复字符的最长子串是 "abc",其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 无重复字符的最长子串是 "b",其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 无重复字符的最长子串是 "wk.原创 2018-09-08 18:45:45 · 139 阅读 · 0 评论 -
简单go并发爬虫demo
爬虫爬虫简介: 是一个程序,用来获取指定网站数据信息。明确 url 。确定爬取对象发送请求。获取服务器响应数据。解析数据,提取有用数据内容。保存、分析数据结果。今天我们用go并发来简单写一个小Demo来爬取一下豆瓣评分网站的数据首先来思路分析一下该怎么做:明确 url。找出url之间的一些小规律,比如豆瓣的url规律如下https://movie...原创 2018-09-05 19:45:29 · 1120 阅读 · 0 评论 -
排序算法之插入排序
插入排序 在上一章中我们讲了算法排序中的最简单的冒泡排序,今天我们来讲解一下插入排序,后续将讲解快速排序,归并排序,希尔排序,二叉排序,这些等等,后续的排序都是在时间复杂度和空间复杂度上面优于这两种的,所以我们今天先来讲解一下插入排序我们先来看以下的一张图 为了方便排序,我们一般将数据的第一个元素作为有序组,其他视为待插入组,图中以升序为例子进行讲解。1:我们将第一个元素作为有序的...原创 2018-09-07 16:09:27 · 166 阅读 · 0 评论 -
GO语言AES加密的CTR模式加密解密详解
|版权声明:本文为博主原创文章,未经博主允许不得转载。博客地址: https://blog.youkuaiyun.com/sgsgy5 具体封装的所有函数的加密包github地址:https://github.com/wumansgy/goEncryptCTR 模式CTR模式的全称是CounTeR模式(计数器模式)。CTR摸式是一种通过将逐次累加的计数器进行加密来生成密钥流的流密码(下图)。CT...原创 2018-11-06 19:13:20 · 4510 阅读 · 0 评论 -
GO写的一份加密包,对称加密AES非对称加密RSA
|版权声明:本文为博主原创文章,未经博主允许不得转载。博客地址: https://blog.youkuaiyun.com/sgsgy5 前言:小弟今日闲暇时间用GO语言简单的封装了几个加密函数,包括对称加密函数DES(虽然被破解很少用,但是可以作为了解),三重DES加密,AES的CBC和CTR模式(对称加密中常使用,推荐使用),非对称加密中的RSA加密解密函数,后期有时间更新椭圆曲线加密的一些内容,还...原创 2018-11-04 14:24:06 · 1184 阅读 · 0 评论 -
golang包管理解决之道——go modules初探
golang的包管理是一直是为人诟病之处,从golang1.5引入的vendor机制,到准官方工具dep,目前为止还没一个简便的解决方案。不过现在go modules随着golang1.11的发布而和我们见面了,这是官方提倡的新的包管理,乃至项目管理机制,可以不再需要GOPATH的存在。go modules的初始化现在modules机制仍在早期阶段,所以golang提供了一个环境变量“GO1...转载 2018-11-08 20:27:18 · 387 阅读 · 0 评论 -
go之无缓冲channel(通道)和有缓冲channel(通道)
channel我们先来看一下通道的解释: channel是Go语言中的一个核心类型,可以把它看成管道。并发核心单元通过它就可以发送或者接收数据进行通讯,这在一定程度上又进一步降低了编程的难度。 channel是一个数据类型,主要用来解决go程的同步问题以及协程之间数据共享(数据传递)的问题。 goroutine运行在相同的地址空间,因此访问共享内存必须做好同步。goroutine...原创 2018-08-25 20:22:11 · 15968 阅读 · 5 评论 -
go语言并发讲解,虚拟内存的讲解
并行和并发今天我们来讲一下在计算机编程中并行和并发的意思 并行(parallel):指在同一时刻,有多条指令在多个处理器上同时执行。 并发(concurrency):指在同一时刻只能有一条指令执行,但多个进程指令被快速的轮换执行,使得在宏观上具有多个进程同时执行的效果,但在微观上并不是同时执行的,只是把时间分成若干段,通过cpu时间片轮转使多个进程快速交替的执行。 如果...原创 2018-08-24 20:08:56 · 1376 阅读 · 0 评论 -
go的几种死锁情况分析
在go语言中用channel通信稍不注意就会发生死锁情况,下面我们来看一下几种常见的死锁情况第一种:同一个goroutine中,使用同一个 channel 读写。package mainfunc main(){ ch:=make(chan int) //这就是在main程里面发生的死锁情况 ch<-6 // 这里会发生一直阻塞的情况,执行不到下面一句 ...原创 2018-08-27 20:30:17 · 5855 阅读 · 4 评论 -
go语言的冒泡排序和插入排序
编程即数学,在编程中也会遇到很多的数学问题的集合,今天我们来讲解一下编程中最常见的冒泡排序,以及冒泡排序之后的插入排序 1:冒泡排序,见名知意,冒泡在我们生活当中可以有哪些常见的事物呢,比如在生活当中,大家都见到过烧开水的状态,那么水中的气泡就会不断的往上面漂浮,应用物理学上的知识来讲就是气泡的质量比较轻,在水中有浮力,就会不断的上浮,那么我们应该怎样应用到编程中的冒泡排序呢,我们先来看一...原创 2018-08-11 13:08:48 · 334 阅读 · 0 评论 -
go语言中切片当作函数传递
传递分为值传递和地址传递,go语言中切片和map是地址传递,但是切片传递要有一个注意事项 例如:package mainfunc test(a []int){ a=append(a,1,2,3)}func main(){ var s []int=[]int{89,4,5,6} test(s) fmt.Println(s)}在这里里面为什么调用函...原创 2018-08-11 19:45:42 · 4728 阅读 · 2 评论 -
go语言贪食蛇与C语言的区别
利用go语言写贪食蛇游戏那么就会利用面向对象的思想来写一下,创造蛇身体对象,然后写出来,/go语言写的时候我们需要调用一个c语言写的一个包/,go语言可以直接调用调用c语言的函数,很方便简洁,我们先来看一下我自己写的C语言的一个包package Clib/*#include <windows.h>#include <conio.h>//原创 2018-08-12 12:58:09 · 1531 阅读 · 0 评论 -
go语言求第M到第N个素数
今天我们来做一个例题,这是个什么例题呢,就是让用户输入两个数,M,N然后打印出第M个素数到第N个素数,M import "fmt"//判断一个数是不是素数func IsPrime(a int)(result bool){ result=true for i:=2;i<a;i++{ if(a%i==0){ resul原创 2018-08-15 21:22:16 · 535 阅读 · 0 评论 -
go语言中的错误捕获recover和panic异常
在Go语言中我们首先来看一下err错误信息,我们先来看一段代码package mainimport ( "fmt" "errors")func calc(a int, b int) (v int, err error) { //捕获错误信息 if b == 0 { //如果代码中出现错误 可以使用errors.New()创建错误信息 ...原创 2018-08-13 19:27:37 · 4991 阅读 · 0 评论 -
go语言之陷阱for range
在go语言中,性药遍历有两种方法,一种就是for的普通方法,还有一种就是for range的遍历,但是在使用for range时,如果使用不当,就会出现一些问题比如我们下面先来看一个例题package mainimport "fmt"type Student struct{ Name string Age int} //一个学生结构体...原创 2018-08-18 20:34:19 · 4570 阅读 · 1 评论 -
go语言切片深入讲解
我们在上一篇的切片讲解中,我们讲解到在go语言中 map和切片都是传引用(地址),也就是在调用函数的时候都是可以直接修改变量的值,关于切片,在某种程度上表面上来说也是可以这样说的,我们先来看一下一个小小的例题package mainimport "fmt"func Change(s []int){ s[0]=11 s[1]=22}func main(){ s...原创 2018-08-22 19:53:16 · 677 阅读 · 0 评论 -
go语言中的内存逃逸和C语言对比
我们首先来稍微了解一下内存,在c/c++中,内存分成5个区,他们分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。 栈:就是那些由编译器在需要的时候分配,在不需要的时候自动清楚的变量的存储区。里面的变量通常是局部变量、函数参数等。 堆:就是那些由new分配的内存块,他们的释放编译器不去管,由我们的应用程序去控制,一般一个new就要对应一个delete。如果程序员没有释放掉,那么在程序结束...原创 2018-08-23 10:51:55 · 1297 阅读 · 0 评论 -
在go modules里使用go get进行包管理
上一篇文章里我们介绍了go modules的初步使用,现在我们来更深入的了解一下如何使用go get在module中管理依赖。module下的包管理首先我们介绍过go mod edit修改go.mod,然而它有两点缺陷:首先是它的-require必须接受“package@version”这种形式,缺一不可,而且不能识别文档规定的master和latest标志。其次是edit只适合用于修改...转载 2018-11-08 20:35:15 · 910 阅读 · 0 评论