![](https://img-blog.csdnimg.cn/20190927151101105.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
Golang
文章平均质量分 85
Golang语言学习
Pistachiout
记录学习
展开
-
Go语言网络编程:HTTP服务端之底层原理与源码分析——http.HandleFunc()、http.ListenAndServe()
在 Golang只需要几行代码便能启动一个 http 服务,在上述代码中,完成了两件事:- 调用 http.HandleFunc 方法,注册了对应于请求路径 /ping 的 handler 函数- 调用 http.ListenAndServe,启动了一个端口为 8999 的 http 服务原创 2023-07-08 17:02:28 · 2910 阅读 · 0 评论 -
网络编程:TCP粘包问题——各层粘包/拆包、Nagle 算法、Go实现长度字段协议解决TCP粘包、使用TCP的应用层协议设计
需要注意的是,即使是连续发送大量数据,在正常的网络环境和合理的数据处理方式下,TCP通常可以保持数据包的完整性和顺序,不会出现粘包。当发送方过于迅速发送数据而使接收方无法跟上或处理不当,此时**可能**发生粘包问题。注意,TCP粘包问题并非TCP协议设计上的缺陷,而是由于TCP协议的数据传输特性和网络条件的影响所致。解决TCP粘包问题通常需要应用层协议设计或使用特定的数据分隔方式来确的数据传输和解析。长度字段协议(Length-Field Protocol):发送方在每个数据包前部添加一个表示数据包长度的字原创 2023-07-04 19:57:26 · 3498 阅读 · 0 评论 -
Go语言网络编程:Go实现简单的内网穿透
内网穿透是一种通过互联网建立远程连接到私有网络(内网)中设备的技术。通常情况下,内网设备由于位于一个受限制的网络环境中,无法直接从外部访问。内网穿透通过将内网设备的流量转发到公共网络上的服务器,然后再将该流量转发到客户端,从而实现与内网设备的通信。原创 2023-06-27 16:49:05 · 2542 阅读 · 6 评论 -
Go语言网络编程入门:TCP、HTTP、JSON序列化、Gin、WebSocket、RPC、gRPC示例
在本文中,我们将介绍Go语言中的网络编程的不同方式,包括TCP、HTTP、Gin框架、WebSocket、RPC、gRPC的介绍与连接实例,并对所有示例代码都给出了详细的注释,最后对每种模式进行了总结。原创 2023-05-19 16:08:42 · 2945 阅读 · 0 评论 -
Channel通道使用进阶:通道关闭原则、生产者消费者问题、高并发map
在进行Channel通道使用之前,先根据总结有缓冲型channel使用的情况,若对下表有疑问可以前往Golang Channel 实现原理与源码分析进行阅读,如下所示:对一个已关闭的通道,进行关闭对一个已关闭的通道,写入数据在多生产者单消费者问题中,我们可以看到我们并没有对业务通道进行关闭,我们只是在给业务通道中写入数据前判断信号通道是否关闭,如果信号通道已经关闭,则直接返回,而不向业务通道中写入数据,因此业务数据并没有关闭,那么就不会引起panic。原创 2023-06-13 15:01:43 · 2055 阅读 · 0 评论 -
Golang context 实现原理与源码分析
context实际上只定义了接口,凡是实现该接口的类都可称为是一种context,官方包中实现了几个常用的context,分别可用于不同的场景;- cancelCtx实现了Context接口,通过`WithCancel()`创建cancelCtx实例;- timerCtx实现了Context接口,通过`WithDeadline()`和`WithTimeout()`创建timerCtx实例;- valueCtx实现了Context接口,通过`WithValue()`创建valueCtx实例;原创 2023-06-09 11:47:08 · 1375 阅读 · 0 评论 -
Golang Channel 实现原理与源码分析
安全访问共享变量是并发编程的一个难点,在 Golang 语言中,倡导通过通信共享内存,实际上就是使用 channel 传递共享变量,在任何给定时间,只有一个 goroutine 可以访问该变量的值,从而避免发生数据竞争。本文关键是对Channel 实现原理进行分析,并附带源码解读,基于源码分析能更加理解Channel实现的过程与原因,对于源码关键步骤及变量给出了注释,不需要完全读懂源码的每个变量及函数,但可以从代码的异常处理角度来理解Channel,就能明白为什么channel的创建、写入、读取、关闭等流原创 2023-06-02 17:03:16 · 1147 阅读 · 1 评论 -
GO语言并发编程入门:Goroutine、Channel、Context、并发安全、GMP调度模型
并发:多线程程序在一个核的cpu上运行。并行:多线程程序在多个核的cpu上运行。由上可知并发不是并行,并行是直接利用多核实现多线程的运行,并发则主要由切换时间片来实现”同时”运行,go可以设置使用核数,以发挥多核计算机的能力。Go语言之所以被称为现代化的编程语言,就是因为它在语言层面已经内置了调度和上下文切换的机制。Go语言的并发编程特点主要体现在Goroutine协程和Channel通道的使用上。Goroutine协程:Goroutine是Go语言中的并发执行单位。原创 2023-05-25 15:24:41 · 1312 阅读 · 1 评论 -
初学GoLang易错点
在Go语言中,变量的定义语法与其他编程语言不同,需要注意变量类型在变量名之后如,而不是在变量名之前。你可以使用var关键字声明一个变量,然后使用等号分配一个值。你也可以使用短变量声明(:=)来声明并初始化一个变量,这种语法可以自动推断变量类型,因此你不需要显式地指定变量类型。但是,短变量声明只能在函数内部使用。x := 10另外,Go语言还支持多个变量的声明和初始化。原创 2023-05-08 18:32:18 · 756 阅读 · 0 评论 -
go语言切片做函数参数传递+append()函数扩容
进行append后,1. 切片没有进行扩容,那么会直接添加或修改切片指向底层数组中后一位的值,故底层数组会受到改变;2. 而如果进行扩容,则会导致切片指向一个新的底层数组,对原来的数组是没有影响的原创 2023-04-13 19:55:29 · 1262 阅读 · 0 评论 -
Golang版LeetCode基本算法函数
【代码】LeetCode题中GoLang基本语法与函数。原创 2023-01-14 19:52:09 · 243 阅读 · 0 评论 -
在windows下将go程序打包为linux可执行程序
【代码】在windows下将go程序打包为linux可执行程序。原创 2023-06-27 16:24:12 · 2412 阅读 · 0 评论