![](https://img-blog.csdnimg.cn/911eb7807e9240dd833d7e6c06d548ec.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Golang
文章平均质量分 94
Go语言从入门到熟练
浮尘笔记
这里记录的都是自己学习和工作中的一些笔记和经验,觉得有用的可以常来看看。
展开
-
Go语言Gin框架Logrus日志管理和token身份验证
RSA加密是一种非对称加密,可以在不直接传递密钥的情况下完成解密,这能够确保信息的安全性,避免了直接传递密钥所造成的被破解的风险。Logrus是一个结构化的Go日志框架,功能强大,具有高度的灵活性,它提供了自定义插件的功能,有TEXT与JSON两种可选的日志输出格式。相比RSA,ECDSA优势是可以使用更短的密钥,来实现与RSA相当或更高的安全,RSA加密算法也是一种非对称加密算法,在公开密钥加密和电子商业中RSA被广泛使用。原创 2023-10-31 10:47:40 · 372 阅读 · 0 评论 -
Go语言的TCP和HTTP网络服务基础
TCP/IP 网络模型实现了两种传输层协议:TCP 和 UDP,实现网络编程,不仅可以基于应用层协议的HTTP,也可以直接基于传输层暴露给用户的网络编程接口:Socket(套接字)。Go语言的socket服务端程序通常采用一个 Goroutine 处理一个连接,主要关键词是Listen和Accept;使用 http.Get函数获取一个HTTP请求的返回信息,http.Server类型是基于 HTTP 协议的服务端,其中ListenAndServe方法的功能是:监听一个基于 TCP 协议的网络地址。原创 2023-06-18 21:14:01 · 1524 阅读 · 0 评论 -
Go 语言标准库常用的代码包
Cap方法提供的是内容容器的容量,不是内容长度。如果存在两个迭代变量,那么赋给第一个变量的值 就是当前字节序列中的某个 UTF-8 编码值的第一个字节所对应的那个索引值,赋给第二个变量的值 是这个 UTF-8 编码值代表的那个 Unicode 字符,其类型会是rune。strings.Builder与string值存储内容的方式是一样的:其中有一个内容容器,是一个byte类型的切片(字节切片),底层数组是一个字节数组,都是通过一个unsafe.Pointer类型的字段指向了底层字节数组的指针值。原创 2023-06-14 19:25:29 · 743 阅读 · 0 评论 -
Go语言中sync.Map、sync.Pool和Context的用法
map 不是并发写安全的,不支持同时并发读写,如果对 map 实例进行并发读写,程序运行时就会抛出异常,因此Go 1.9 版本中引入了支持并发写安全的 sync.Map 类型,可以用来在并发读写的场景下替换掉 map。sync.Pool 用来保存一组可独立访问的临时对象,这个“临时对象”会在未来的某个时候被垃圾回收掉。sync.Pool临时对象池是线程安全的,可以主要用作数据的缓存;会有锁的开销。Context是上下文信息,此类值是并发安全的,可以传播给多个 goroutine。原创 2023-05-19 12:25:52 · 1083 阅读 · 0 评论 -
Go语言中sync.Cond、atomic原子性和sync.Once的用法
sync包中关于 sync.Cond 、atomic原子性 和 sync.Once 的用法。条件变量提供的方法有三个:等待通知(wait)、单发通知(signal)、广播通知(broadcast);原子操作可以被用于共享数据的并发同步,Go语言中关于原子性相关的函数在标准库sync/atomic中;sync.Once用来执行且仅仅执行一次动作,常常用于单例对象的初始化场景。Once类型使用互斥锁和原子操作实现了功能。原创 2023-05-18 13:48:38 · 612 阅读 · 0 评论 -
Go语言中sync.Mutex和sync.WaitGroup的用法
Go 并发编程中存在的难题:并发编程不像是传统的串行编程,程序的运行存在着很大的不确定性。Go语言中使用sync.Mutex实现互斥锁,使用sync.RWMutex实现读写互斥锁,使用sync.WaitGroup是用来做任务编排的,要解决的就是并发等待的问题。互斥锁 sync.Mutex 是一个结构体类型,属于值传递,因此使用的时候会产生副本。原创 2023-05-17 12:30:00 · 600 阅读 · 0 评论 -
Go语言的并发:goroutine和channel
goroutine 是由 Go 运行时(runtime)负责调度的、轻量的用户级线程,为并发程序设计提供原生支持。Go 语言通过 go关键字+函数/方法 的方式创建一个 goroutine,使用 make 函数创建channel。channel是goroutine之间的数据通信通道,分为无缓冲channel和带缓冲channel,还有单向channel,无缓冲channel是用同步的方式传递数据,带缓冲channel是用异步的方式传递数据。select语句用于多路选择。原创 2023-05-16 14:23:38 · 635 阅读 · 0 评论 -
Go语言中使用组合来实现“继承”
在 Java和PHP中都是使用extends关键字实现类的继承的,那么Go语言中如何实现“继承”呢?其实Go语言是不支持经典面向对象的编程范式与语法元素,说是“继承”,实际上是一种组合的思想,是通过 Go 语言的类型嵌入(Type Embed)来实现的。类型嵌入是在一个类型的定义中嵌入了其他类型,Go 语言支持两种类型嵌入,分别是接口类型嵌入和结构体类型嵌入。接口类型只能嵌入接口类型,而结构体类型可以嵌入任意自定义类型或接口类型。原创 2023-05-15 14:55:41 · 593 阅读 · 0 评论 -
Go语言的接口类型interface
接口类型是由 type 和 interface 关键字定义的一组方法集合,Go 语言中的接口类型与它的实现者之间的关系不需要像其他语言(比如 Java / PHP)使用 implements 关键词修饰,实现者只需要实现接口方法中的全部方法即可(鸭子类型)。在 Go 语言中,将任意类型赋值给一个接口类型变量就是装箱操作,接口类型的装箱实际就是创建一个 eface 或 iface 的过程,经过装箱后,新分配的内存空间中的数据与原变量就没有关系了。原创 2023-05-14 22:15:56 · 1051 阅读 · 0 评论 -
Go语言的结构体、方法、指针
定义一个结构体使用 type 和 struct 关键词,Go语言中的方法本质上也是函数,只是多了一个receiver 参数。每个方法只能有一个 receiver 参数,并且receiver 参数名字要保证唯一,receiver 参数的基类型本身不能为指针类型或接口类型。方法声明要与 receiver 参数的基类型声明放在同一个包内。receiver 参数类型对 Go 方法有哪些影响?原创 2023-05-14 11:46:17 · 805 阅读 · 0 评论 -
Go语言的错误和异常处理:error、panic和recover
在Go语言中,一般使用 error 这个接口类型表示错误,并且通常将 error 类型返回值放在返回值列表的末尾;error 接口类型是 Go 原生内置的类型,Go 在标准库中提供了两种构造错误值的方法: errors.New 和 fmt.Errorf,这两种方法只限于以字符串形式返回错误信息。Go 1.13 及后续版本中,尽量用errors.Is和errors.As函数。原创 2023-05-13 18:48:57 · 1500 阅读 · 0 评论 -
Go语言的函数和defer用法
Go 语言中的函数参数不管使用哪种数据类型都是值传递,Go语言的变长参数实际上是通过切片来实现的;Go语言中函数被称为是“一等公民”,主要体现在:函数可以存储在变量中,也可以拥有自己的类型,以及闭包的使用;在Go语言的函数中可以使用defer延迟处理释放资源,采用先进后出“栈”的数据结构。原创 2023-05-13 09:48:15 · 578 阅读 · 0 评论 -
Go语言的条件判断和循环语句
Go语言的条件判断有 if 和 switch-case 两种形式;循环结构只有 for 这一种形式,去掉了传统语言中的 while 和 do-while 循环结构;Go 中 switch 分支结构中每个 case 语句不需要以 break 收尾,并且支持 fallthrough 穿透到后面的分支。原创 2023-05-12 15:37:53 · 504 阅读 · 0 评论 -
Go语言中array、slice、map的用法和细节分析
本文主要讲述Go语言中的复合数据类型:数组(array)、切片(slice)、映射(map),内容包括数组和切片的区别以及map的基本用法和开发中常见的细节问题。Go 语言的数组类型属于值类型,map和切片都是引用类型, 因此当 map 类型变量作为参数被传递给函数或方法的时候,在函数内部对 map 的修改会影响函数外部的值。切片只能和nil比较,不能两个切片对比。map 不是并发写安全的,不支持同时并发读写。原创 2023-05-11 22:45:17 · 278 阅读 · 0 评论 -
Go语言的基本数据类型:整型、浮点型、字符串
本篇内容主要讲解Go语言的基本数据类型:整型int相关,浮点型float相关,布尔bool,以及字符串string,还有不同数据类型之间的转换,以及如何自定义一个数据类型。文章中的代码仅供示例参考,更多详细代码和用法请参考gitee上的源代码。原创 2023-05-11 17:24:07 · 1384 阅读 · 0 评论 -
Go语言中的变量、常量和代码块
Go语言的两类变量:一种是包级变量(package varible),也就是在包级别可见的变量。通常会将同一类的变量声明放在一个 var 变量声明块中,不同类的声明放在不同的var 声明块中;iota是 Go 语言的一个预定义标识符,它表示的是 const 声明块(包括单行声明)中,每个常量所处位置在块中的偏移值(从零开始),每个 const 代码块的 iota都是从0开始。在 Go 语言中,一对不包裹任何内容的花括号,除了可以代表空的代码块之外,还可以用于表示不包含任何内容的数据结构(或者说数据类型)原创 2023-05-10 23:41:25 · 404 阅读 · 0 评论 -
Go语言的安装和包依赖管理
本文先从golang的安装开始,然后介绍了不同版本的Go如何管理依赖,以及Go语言的执行顺序。以及简单介绍了Go的原生并发支持,采用了用户层轻量级线程,Go 将之称为 goroutine。一个 Go 程序中可以创建成千上万个并发的 goroutine,并且所有的 Go 代码都在 goroutine 中执行。原创 2023-05-10 17:07:00 · 1608 阅读 · 0 评论 -
Go语言Gin框架接入Consul实现微服务注册发现
Gin是一个使用Go语言开发的Web框架。它提供类似Martini的API,但性能更佳,速度提升高达40倍。本文使用Gin框架简单的实现了数据库的查询功能,基于Go ORM的查询;然后又接入Consul微服务实现了服务注册和发现。原创 2023-05-07 20:56:03 · 1155 阅读 · 0 评论