Go进阶
文章平均质量分 79
Go语言进阶
咕噜咕噜崩
理想还是要有的
展开
-
Go内存
内存泄漏内存泄漏(Memory Leak)是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。内存泄漏分析工具:net/http/pprofpprof是Go的性能分析工具。在程序运行过程中,提供程序运行时的可视化信息:CPU、堆内存、goroutine栈运行情况等。一、字符串截取func main() { var str0 = "12345678901234567890" str1 := str0[:10]}只要原创 2022-02-28 12:58:43 · 1419 阅读 · 0 评论 -
GC垃圾回收机制
经典GC算法引用计数每个对象保存自己被引用的数量。当引用数量为 0 时,将其回收。(可以立刻回收)缺点存在循环引用无法释放问题: 多个对象互相引用延伸循环引用解决方法:强弱引用「若 A 强引用了 B,那 B 引用 A 时就需使用弱引用,当判断是否为无用对象时仅考虑强引用计数是否为 0,不关心弱引用计数的数量」根集合:栈上的引用、全局变量常量、程序的元数据等等标记-清扫(为解决上面的循环引用问题)内存到达某个阈值或者固定时间长度会执行垃圾回收程序。STW(不然mark和用户程序并发原创 2022-02-27 22:56:36 · 320 阅读 · 0 评论 -
Go线程模型
线程模型由操作系统调度,在CPU运行的是内核级线程(KSE,Kernel Scheduling Entity)注意点:用户级线程切换在用户态用户程序直接进行内核级线程由操作系统进行切换一、用户级线程模型(python)用户线程与内核线程KSE是多对一(N : 1)的映射模型特性:线程的创建、销毁以及多线程之间的协调等操作等都由线程库来负责而无须借助系统调用来实现一个进程中所有创建的线程都只和同一个KSE在运行时动态绑定优点:由于线程调度是在用户层面完成的,也就是相较于内核调度转载 2021-09-20 13:06:07 · 452 阅读 · 0 评论 -
Go面向对象编程思想
对象结构体就是对象显示声明对象的方法三大特性小写就是封装(小写同一包;大写任意包)继承就是结构体嵌套结构体的继承不具有多态功能,只有接口有多态功能:只是接口名和结构体指针之间是多态情况!也就是:&Chinese{} 可以直接转换为 Human !!!设计模式五大原则举例一个方法的动作应该是单一的!不同对象(结构体)共有的同类方法应该提取为接口进行实现!...原创 2021-09-14 16:34:08 · 141 阅读 · 0 评论 -
Go网络编程☞RPC
RPC的意思是远程过程调用(Remote Procedure Call),人话:RPC允许跨机器、跨语言调用计算机程序方法。原创 2021-12-22 15:28:41 · 153 阅读 · 0 评论 -
Go网络编程☞WebSocket
WebSocket?WebSocket是基于TCP的应用层协议,用于在C/S架构的应用中实现双向通信。注意:WebSocket协议在建立连接时需要使用HTTP协议【WebSocket协议是基于HTTP协议实现的】WebSocket与Http的区别?1、通信方式不同WebSocket是双向通信模式;HTTP协议的“请求-响应”模式交互。WebSocket客户端与服务器之间只有在握手阶段是使用HTTP协议的“请求-响应”模式交互,而一旦连接建立之后的通信则使用双向模式交互,不论是客户端还是服务端都原创 2021-09-13 14:58:41 · 178 阅读 · 0 评论 -
Go网络编程☞HTTP
HTTP?HTTP是我们很熟悉的一种应用层协议HTTP开发服务处理器:Handler就是接受和响应http请求的:(要想能够接受处理http请求就得实现这个接口方法!)type Handler interface { ServeHTTP(ResponseWriter, *Request)}路由【项目开发建议:第三方httprouter路由代替默认路由】有个Handler是专门做路由器的:(接受所有请求,并根据请求URL将请求转发给具体的Handler)路由器可以自定义,但基本都填nil原创 2021-09-12 18:42:32 · 159 阅读 · 0 评论 -
Go网络编程☞简介
目标:开发一个能够支持http请求、app请求!具有tcp聊天、udp播放视频功能的统一后端!http开发过程知识点服务处理器:Handler就是接受和响应http请求的:(要想能够接受处理http请求就得实现这个接口方法!)type Handler interface { ServeHTTP(ResponseWriter, *Request)}有个Handler是专门做路由器的:(接受所有请求,并根据请求URL将请求转发给具体的Handler)路由器可以自定义,但基本都填nil,就是默原创 2021-08-26 15:33:18 · 173 阅读 · 0 评论 -
Go连接数据库
官方:README案例:连接多个数据库dbconfig.go:数据库配置文件【因为同一个包下所有数据都是互通的,所以统一管理连接配置!注意:驱动名必须是相应的数据库】package dbimport ( "database/sql" _ "github.com/go-sql-driver/mysql" //注册驱动器)var err error// 主数据库配置(写数据库)var wdb *sql.DBconst ( wDriverName = "mysql" //驱动名必原创 2021-08-20 14:03:35 · 3078 阅读 · 2 评论 -
Context上下文
Context的产生原因控制 子goroutine 的结束!context.go结构注意点:Context是一个开放的接口!context.go源码中对Context接口有四种实现,但这四种实现不对外开放!但context.go源码对外提供六种方法对四种实现的创建!Context接口Deadline()【定时取消】:返回代表此上下文完成的工作应取消的时间。未设置截止日期时ok==false。Done()【是否被取消】:返回一个通道,当这个goroutine的context被can原创 2021-08-20 14:03:10 · 228 阅读 · 0 评论 -
Go进阶原理杂记
切片原理Pointer 是指向一个数组的指针,len 代表当前切片的长度,cap 是当前切片的容量。(cap 总是大于等于 len 的)map原理buckets存储散列表指针!懒迁移:扩容时map并不会立即把新数据做迁移,而是当访问原来旧bucket的数据的时候,才把旧数据做迁移channel原理环形队列+互斥锁回想:上面三种是特殊数据类型,常使用make()函数创建!syync.Map互斥锁 + 原子类// 封装的线程安全的maptype Map st..原创 2021-08-27 15:29:52 · 219 阅读 · 0 评论 -
Go语言包
Go语言包builtin:内置压缩包操作archive:存档tar、zip压缩文件的存取!compress:压缩bzip2,flate、gzip、lzw、zlib!container:容器封装的数据结构container/heap这只是个接口,需要那种堆就需要自己去实现!container/list双向链表!var l list.List 、ll := list.New()container/ring环形链表!var r ring.Ring 、rr := ring.Ne原创 2021-08-20 14:02:28 · 585 阅读 · 0 评论