Go
文章平均质量分 91
Go语言学习
lady_killer9
CKA、CKS证书持有者,安全工程师
展开
-
Go-并发模式总结(扇入模式,超时模式,callback模式等)
缓存callback慢速->快速顺序->并发不健壮->健壮扩展There are endless ways to use these tools, many presented elsewhere.Chatroulette toy:golang.org/s/chat-rouletteLoad balancer:golang.org/s/load-balancerConcurrent prime sieve:golang.org/s..原创 2021-09-12 15:05:15 · 1359 阅读 · 5 评论 -
Go-并发编程基础(goroutine、channel、select等)
并发并行进程线程协程有独立的栈空间 共享程序堆空间 调度由用户控制 协程是轻量级的线程 1)主线程是一个物理线程,直接作用在cpu上的。是重量级的,非常耗费cpu资源2)协程从主线程开启的,是轻量级的线程,是逻辑态。对资源消耗相对小。 3) Gobang的协程机制是重要的特点,可以轻松的开启上万个协程。其它编程语言的并发机制是一般基于线程的,开启过多的线程,资源耗费大,这里就突显Golan在并发上的优势了MPG模式M:操作系统的主线程(是物理线程)...原创 2021-09-09 17:52:45 · 767 阅读 · 0 评论 -
Go-并发模式2(Patterns)
上篇文章,讲到了goroutine和channel,进行了简单的通信,接下来看看有哪些模式。模式1 Generator:返回channel的函数package mainimport ( "fmt" "math/rand" "time")func main() { c := boring("boring!") // Function returning a channel. for i := 0; i < 5; i++ { fmt.Printf("You say: %q原创 2021-09-07 15:33:37 · 714 阅读 · 0 评论 -
Go-并发模式1(Basic Examples)
一个无聊的函数package mainimport ( "fmt" "time")func main() { boring("boring!")}func boring(msg string) { for i := 0; ; i++ { fmt.Println(msg, i) time.Sleep(time.Second) }}过一秒输出一下boring! 加数字,结果如下:稍微无聊的函数package mainimport ( "fmt"原创 2021-09-07 15:31:53 · 475 阅读 · 0 评论 -
设计模式-工厂方法模式(Go实现)
目录工厂方法模式需求修改前简单工厂设计代码修改后工厂方法设计代码测试测试代码结果总结适用场景优点缺点参考工厂方法模式定义一个用于创建对象的接口,让子类决定将哪一个类实例化。不再提供一个统一的工厂类来创建所有的产品对象,而是针对不同的产品提供不同的工厂,系统提供一个与产品等级结构对应的工厂等级结构。工厂方法模式四要素:工厂接口。工厂接口是工厂方法模式的核心,与调用者直接交互用来提供产品。在实际编程中,有时候也会使用一个抽象类来作为与调用者交互的接口,其本质上是一样的。工厂实现。在编程中,工厂实现决原创 2021-08-01 17:48:29 · 1132 阅读 · 1 评论 -
设计模式-简单工厂模式(Go实现)
目录简单工厂模式需求修改前错误设计代码修改后正确设计代码实现测试测试代码测试结果总结适用场景优点缺点简单工厂模式简单工厂模式并不属于GoF的23个经典设计模式,但通常将它作为学习其他工厂模式的基础,它的设计思想很简单,其基本流程如下:首先将需要创建的各种不同对象(例如各种不同的Food对象)的相关代码封装到不同的类中,这些类称为具体产品类,而将它们公共的代码进行抽象和提取后封装在一个抽象产品类中,每一个具体产品类都是抽象产品类的子类;然后提供一个工厂类用于创建各种产品,在工厂类中提供一个创建产品的工原创 2021-07-31 13:54:35 · 610 阅读 · 0 评论 -
Go-单元测试详解与代码
_test.go结尾文件包含TestXxx函数形参必须为*test.Tgo testgo test -vgo test 测试文件 被测试文件go test -v -test.run 测试函数参考Go标准库-testing原创 2021-07-17 21:36:53 · 2726 阅读 · 4 评论 -
Go-ecc数字签名详解与代码
目录Ecc签名的Go实现crypto/ecdsa包签名验证签名截图参考在Go-数字签名详解与Rsa数字签名代码中已经讲了数字签名的原理,就不重复了Ecc签名的Go实现crypto/ecdsa包func Sign(rand io.Reader, priv *PrivateKey, hash []byte) (r, s *big.Int, err error)使用私钥对任意长度的hash值(必须是较大信息的hash结果)进行签名,返回签名结果(一对大整数)。私钥的安全性取决于密码读取器的熵度(随机程原创 2021-07-03 21:02:09 · 2098 阅读 · 3 评论 -
Go-哈希函数与消息认证详解(含代码)
Go-哈希函数与消息认证详解(含代码)哈希函数简介历史特性安全性MD族md4md5SHA系列SHA-1SHA-2消息认证消息认证的目的消息认证码认证码与检错码HMAC的Go实现crypto/hmac包hash包crypto/sha1包代码实现截图参考哈希函数简介哈希函数也称散列函数、杂凑函数等,是一种单向密码体制,即它是一个从明文到密文的不可逆映射,即只有“加密”过程,不存在“解密”过程。同时,Hash函数可以将“任意”长度的输入经过变换以后得到固定长度的输出。Hash函数的这种单向特征和输出数据长度原创 2021-06-27 18:01:02 · 3522 阅读 · 4 评论 -
Go-数字签名详解与Rsa数字签名代码
数字签名概述手写签名是一种传统的确认方式,如写信、签订协议、支付确认等。在数字系统中同样有签名应用的需求,如假定A发送一个认证的信息给B,如果没有签名确认的措施,B可能伪造一个不同的消息,但声称是从A收到的;或者为了某种目的,A也可能否认发送过该消息。很显然,数字系统的特点决定了不可能沿用原先的手写签名方法来实现防伪造或抵赖,这就是提出了如何实现数字签名的问题。数字签名(Digital Signature)是电子信息技术发展的产物,是针对电子信息 的一种签名确认方法,它是利用 数学方法和密码算法对该原创 2021-06-26 20:55:09 · 3443 阅读 · 2 评论 -
Go-ecc加密解密详解与代码
参考《现代密码学教程 谷利泽,杨义先等》Go标准库-crypto/desGo标准库-crypto/cipher更多Go相关内容:Go-Golang学习总结笔记有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。如果您感觉有所收获,自愿打赏,可选择支付宝18833895206(小于),您的支持是我不断更新的动力。...原创 2021-07-03 20:05:49 · 6040 阅读 · 1 评论 -
Go-RSA加密解密详解与代码
Rsa的Go实现x509func ParsePKIXPublicKey(derBytes []byte) (pub interface{}, err error)原创 2021-06-20 20:55:09 · 6610 阅读 · 2 评论 -
Go-AES算法详解与代码
AES发展史概述AES的Go实现func NewCipher(key []byte) (cipher.Block, error)原创 2021-06-11 14:45:01 · 9779 阅读 · 3 评论 -
Go-Des和3Des算法详解与代码
Des发展史 1973年5月美国联邦政府提出征求在传输和存储数据中保护计算机数据的密码算法的建议;1975年3月,美国国家标准局(NBS)首次公布IBM公司提出的算法Lucifer中选;1977年1月NBS正式向社会公布,采纳IBM公司设计的方案作为非机密数据的数据加密标准(Data Encryption Standard).DES正式成为美国联邦政府信息处理标准,即FIPS-46标准,同年7月开始生效。 此后,每隔5年美国国家保密局(NSA)对DES作新的评估,并重新审定它是否继续作...原创 2021-06-08 21:29:49 · 12887 阅读 · 7 评论 -
Go-输入输出总结及oj的输入输出
目录输入无换行接口控制台字符串有换行接口控制台字符串有格式接口控制台字符串操作系统参数输出无换行接口控制台字符串有换行控制台接口字符串有格式控制台接口字符串返回错误对象fmt部分输入输出函数调用图oj的输入输出全部代码参考输入无换行接口func Fscan(r io.Reader, a ...interface{}) (n int, err error).原创 2021-05-29 17:57:31 · 19280 阅读 · 2 评论 -
Go-错误、异常处理详解
panic终止程序,类似Python的exit()deferrecover自定义错误error.New()原创 2021-05-20 21:11:17 · 22654 阅读 · 2 评论 -
Go-保留关键字和预定义标识符
保留关键字下面列举了 Go 代码中会使用到的 25 个关键字或保留字:break default func interface select case defer go map struct chan else goto package switch const fallthrough if range type continue for import return原创 2021-05-19 21:37:37 · 22052 阅读 · 2 评论 -
Go-文件目录操作分类详解(创建、打开、关闭、读取、写入、判断等)
创建创建文件(可读写)存在清空func Create(name string) (file *File, err error)Create采用模式0666(任何人都可读写,不可执行)创建一个名为name的文件,如果文件已存在会截断它(为空文件)。如果成功,返回的文件对象可用于I/O;对应的文件描述符具有O_RDWR模式。如果出错,错误底层类型是*PathError。func CreateFile(filePath string) error { _,err := os.Creat原创 2021-05-17 21:43:58 · 28451 阅读 · 2 评论 -
Go-编码规范(注释,变量名等基本规则)
格式化使用gofmt进行格式化注释推荐使用行注释行注释// 行注释块注释/*块注释*/命名规范包名小写单词文件名小写单词,下划线分隔变量名包引入缩进不同层级一个Table(四个空格)...原创 2021-05-04 11:19:29 · 21681 阅读 · 0 评论 -
Go-解决低版本Goland调试问题:Version of Delve is too old for this version...
目录问题解决下载dlv配置dlv结果参考问题解决下载dlv配置好代理,使用go get命令下载go get -u github.com/go-delve/delve/cmd/dlv在你的GOPATH即安装目录的bin下面就有了dlv配置dlvGoLand Help->Edit Cusom Properties...调试仍不起作用的话,就直接复制到GoLand的jbr的bin下面,并重命名为Gobindlv.exe结原创 2021-05-04 10:14:01 · 33367 阅读 · 1 评论 -
Go-常用命令go的使用(build、env、run、fmt等)
简介目前,go语言的命令有一下几个:名称 简介 go go 程序管理 Go 源码以及运行其它在此列出的命令。用法详述见命令文档。 cgo Cgo 使 Go 包的创建能够调用 C 代码。 cover Cover 用于创建并优化由 "go test -coverprofile" 生成的规模评估。 fix Fix 发现使用旧语言与库特性的 Go 程序,并使用较新的特性来重写它们。 fmt Fmt 格式化 Go 包,它作为独立的gofm...原创 2021-05-04 09:00:29 · 23706 阅读 · 1 评论 -
Go-如何优雅的实现单链表?(含全部代码)
目录简介思路节点结构体属性方法单链表结构体属性方法InitNewClearLenFrontBackinsertInsertAfterPushBackPushFrontremoveRemoveAfterRemoveFront测试常见问题怎么遍历呀?全部代码简介单链表是一种链式存取的数据结构,用一组地址任意的存储单元存放线性表中的数据元素。链表中的数据是以结点来表示的,每个结点的构成是元素加指针。思路原创 2021-05-03 10:03:27 · 21097 阅读 · 1 评论 -
Go-包管理(管理工具对比及go mod的使用)
go path代码开发必须在go path的src目录下 手动管理依赖 依赖包没有版本全是缺点go vendor解决了包依赖,一个配置文件即可管理 依赖包全都下载到项目vendor下,每个项目都有一份。go mod一个包可以由多个文件组成 同一包内不需要导入配置GO111MODULE介绍有三个值:off, on和auto(默认值)。GO111MODULE=off,go命令行将不会支持module功能,寻找依赖包的方式将会沿用旧版本那种通过vendor目录或者原创 2021-05-02 10:12:35 · 21319 阅读 · 1 评论 -
Go-关键字defer、panic、recover详解
目录defer调用时机多次调用时的执行顺序传参问题源代码panic执行defer跨协程问题源代码recover使用源代码总结deferpanicrecover全部源代码参考deferGo 语言的 defer 会在当前函数返回前执行传入的函数,它会经常被用于关闭文件描述符、关闭数据库连接以及解锁资源。在文章Go-函数详解(参数、返回值、init函数、匿名函数、defer)中进行了简单的使用,但是还不够深入,于是在知乎提了问题,原创 2021-05-01 22:13:01 · 21716 阅读 · 1 评论 -
Go-面向对象编程详解(封装、继承、多态等)
封装小写隐藏细节通过方法验证继承匿名结构体有名结构体内嵌结构体内嵌结构体的所有方法和属性都能使用,无所谓大小写多态参考原创 2021-05-01 17:37:19 · 20522 阅读 · 0 评论 -
Go-动态类型与类型断言详解(含type-switch及全部代码)
目录动态类型类型断言与type-switch全部代码截图参考动态类型我们知道Go不像Python,变量可以没有类型。那么如果一个函数的参数需要兼容多个类型或是需要判断变量类型该如何做呢?我们可以使用接口,上一篇文章介绍了接口及接口的使用,知道了接口变量可以接收实现了它的类型的变量。我们就可以用接口做参数。结构体、接口与实现代码 type Cat struct { Name string}type Mouse struct { Name string}原创 2021-05-01 16:13:44 · 21419 阅读 · 0 评论 -
Go-接口类型详解(定义、实现、接口继承比较等)
简介Go 语言中的接口是一种内置的类型,它定义了一组方法的签名,本节会介绍 Go 语言接口的几个基本概念以及常见问题,为后面的实现原理做铺垫。声明/定义/* 定义接口 */type interface_name interface { method_name1([parameter list]) (return_type) method_name2 ([parameter list]) (return_type) ... method_namen([parameter...原创 2021-05-01 16:07:46 · 24620 阅读 · 2 评论 -
Go-结构体类型详解(声明、初始化、结构体指针、方法、序列化等)
结构体类型(struct)去除了继承、方法重载、构造函数、析构函数、隐藏的this指针type 变量名 struct{属性方法}属性变量 类型声明声明并初始化结构体指针使用连续分布方法func (reciver type) methodName([parameter list]) ([return list]){bodyreturn value}方法和函数的区别1)调用方式不一样函数的调用方式:函数名...原创 2021-04-22 22:12:47 · 21996 阅读 · 1 评论 -
Go-函数详解(参数、返回值、init函数、匿名函数、defer)
初识函数func function_name( [parameter list] ) [return_types] { 函数体 [return 返回值列表]}参数位置参数返回值原创 2021-04-22 20:42:55 · 21571 阅读 · 0 评论 -
Go-分支和循环总结(if、else、switch、for、range、continue、break等)
目录分支ifif...elseif..else if ...elseswitchswitch穿透type-switchselect循环forfor-range实现while实现do...whilebreakcontinue分支ifif 布尔表达式 { /* 在布尔表达式为 true 时执行 */}if 中可以直接定义变量if...elseif 布尔表达式 { /* 在布尔表达式为 true 时执.原创 2021-04-22 20:15:42 · 18754 阅读 · 0 评论 -
Go-运算符总结(算术、关系、逻辑、赋值、位运算符等)
算术运算符算术运算符 运算符 描述 实例(A为10,B为20) + 相加 A + B 输出结果 30 - 相减 A - B 输出结果 -10 * 相乘 A * B 输出结果 200 / 相除(保留整数) B / A 输出结果 2,var n float64 = 10/4,结果为2 % 求余 B % A 输出结果 0 ++ 自增 A++ 输出结果 11,没有前++,即++A是错的 --原创 2021-04-22 09:38:10 · 15246 阅读 · 0 评论 -
Go-指针类型详解(空指针、指针的指针、函数形参指针等)
简介取地址符是& 指针保存的地址,地址里的数据才是真正的值,使用*来获取值func main() { i := 10 pointer := &i fmt.Println(pointer)}0xc00000a0a8i 10&i 0xc00000a0a8pointer 0xc00000a0a8*poiter 10int系列、float系列、boo;、string、数组、结构体struct都有指针,一般在栈指针、切片、管道、接口、...原创 2021-04-21 22:28:01 · 15448 阅读 · 4 评论 -
Go-映射类型详解(遍历、增删改查、判断相等、内存等)
上篇文章思考题介绍引用类型映射Map 是一种无序的键值对的集合。Map 最重要的一点是通过 key 来快速检索数据,key 类似于索引,指向数据的值。Map 是一种集合,所以我们可以像迭代数组和切片那样迭代它。不过,Map 是无序的,我们无法决定它的返回顺序,这是因为 Map 是使用 hash 表来实现的。键不能重复map自动扩容声明var map 变量名 map[key_type]value_typemake分配数据空间func make(Type, si原创 2021-04-21 22:10:29 · 14750 阅读 · 5 评论 -
Go-切片类型详解(遍历、内存、追加、插入、删除等)
简介引用类型,函数传参时不用& 长度可以变化,容量随长度变化 结构体-->可查看源代码即动态数组,底层在当前数组不够用时,开辟更大的数组,拷贝后再增加元素。声明var 变量名 []typefunc make(Type, size ...IntegerType[,capacity]) Type内建函数make分配并初始化一个类型为切片、映射、或通道的对象。其第一个实参为类型,而非值。make的返回类型与其参数相同,而非指向它的指针。其具体结果取决于具体的类型:原创 2021-04-21 21:19:22 · 14808 阅读 · 0 评论 -
Go-数组类型详解(声明、初始化、遍历、多维数组等)
目录上篇文章思考题介绍声明声明并初始化遍历for循环,下标for range内存数组作为参数值传递引用传递多维数组声明声明并初始化遍历内存参考上篇文章思考题Go-基本数据类型转换详解结果0可接收错误strNum := "123.hello"floatNum, er := strconv.ParseFloat(strNum,64)fmt.Println(floatNum,er)结果0 strcon.原创 2021-04-18 20:54:44 · 15507 阅读 · 0 评论 -
Go-基本数据类型转换详解(int系列、float系列、string等)
参数T(v):变量v转为T类型基本数据类型转换 原类型 目标类型 方法 备注 整型、浮点型 整型、浮点型 T(v) 大数转小数超范围,溢出;浮点型转整型,小数丢失;高精度转低精度,精度丢失 任何类型 string fmt.Sprintf() 推荐 bool strconv.FormatBool(bool) int64 strconv.FormatInt(int64) ..原创 2021-04-18 16:20:04 · 14817 阅读 · 0 评论 -
Go-字符和字符串类型详解(原始字符串、拼接、修改、比较、拆分、查找等)
字符型没有,推荐使用byte或int字母一个字节,汉字3个字节存储:字符->码值(数字)->二进制->保存直接输出不行 %c字符串型由字节组成直接输出可以原创 2021-04-17 21:45:14 · 17543 阅读 · 0 评论 -
Go-数字与布尔类型详解(整型、浮点型、科学计数法等)
数字整型类型 描述 uint8 无符号 8 位整型 (0 到 255) uint16 无符号 16 位整型 (0 到 65535) uint32 无符号 32 位整型 (0 到 4294967295) uint64 无符号 64 位整型 (0 到 18446744073709551615) int8 有符号 8 位整型 (-128 到 127) int16 有符号 16 位整型 (-32768 到 32767) int32...原创 2021-04-17 15:58:15 · 15802 阅读 · 1 评论 -
Go-变量与常量详解(声明、初始化、匿名变量、作用域等)
目录声明默认零值初始化省略var使用全部代码声明默认零值var 变量名1[,变量名2...] 类型初始化var 变量名1[,变量名2...] [类型] = value1[,value2...]注意:初始化了也是声明,必须在后面使用,类型可以不写,自动判断省略var变量名1[,变量名2...] := value1[,value2...]还有一种形式,常用于全局变量声明var (变量1 = value1变量2 = value原创 2021-04-17 11:22:31 · 13889 阅读 · 0 评论 -
Go-Golang学习总结笔记
资源某hub会审核不通过,自己去找吧书籍网站基础go官方中文网菜鸟教程C语言网go语言中文网golang系列视频基础安装依赖管理数据类型变量和常量流程控制函数包面向对象编程提高...原创 2021-04-17 10:16:20 · 27167 阅读 · 43 评论