
Golang
文章平均质量分 73
KentZhang_
提供网络加速、SD-WAN、零信任等网络解决方案。微信号:kentonly2024
展开
-
Golang易错知识点
文章目录string和'\0'sliceWaitGroup使用range产生的临时变量goroutine泄露闭包闭包与range带来的问题对象滥用的后果string和’\0’Golang的string内部就是字节数组,末尾没有’\0’,对于Golang来说,’\0’也是一个普通的字节。其他语言在传输字符串的时候有可能在末尾加’\0’,那么Golang解析的时候会在末尾多了’\0’字符。就会出现很尴尬的事情。比如C语言传输了’CHINA\0’,Golang解析后,再用’CHINA’比较,就不会相等了,但原创 2021-11-17 23:34:25 · 1300 阅读 · 0 评论 -
Golang中如何处理tcp粘包
文章目录为什么要处理粘包处理粘包的方法总结为什么要处理粘包由于tcp协议是数据流传输,一次读数据不一定能得到一个完整的业务数据包,所以需要进行粘包处理,保证要处理的数据是一个或者多个完成的业务数据包。处理粘包的方法假设:包的格式为 四字节包头 + 包体, 包头指明包体的长度大端传输数据处理过程:先读取四字节包头,解析出包头的长度bodyLen再读取bodyLen长度的包体,这次读取的数据就是一个完整的业务包bodyData把bodyData返回到业务层处理处理代码如下:c原创 2021-09-05 18:05:37 · 1445 阅读 · 0 评论 -
slice在Golang中的实现和应用
文章目录底层实现创建slice的三种方法1、使用make创建slice2、使用数组创建slice3、直接定义向slice插入数据直接使用在索引位置插入使用append插入数据总结底层实现struct Slice{ byte* array; // actual data uintgo len; // number of elements uintgo cap; // allocated number of elements};我们知道slice是用来管理一个内存地址连续的内存空间原创 2021-09-05 12:36:27 · 678 阅读 · 0 评论 -
Golang和C++简单对比
文章目录编译内存管理标准库性能并发编程语法复杂度开发和调试难度总结编译都可以静态编译,直接编译成二进制文件。目前,许多语言(比如Java,C#)都是基于运行时,能静态编译语言的不多,Go算一个。同时,都可以跨平台。内存管理在C++中,需要自己使用new和delete管理内存,尽管C++已经有了智能指针,但是有一些坑,不是那么好用。Go虽是静态语言,但是自己管理内存,减轻了程序员的心智负担。这一点,非常重要。因为C++程序的崩溃,大多数时候都是内存问题,比如内存泄漏,非常难以解决。标准库一门语言原创 2021-08-29 14:08:11 · 7351 阅读 · 3 评论 -
goroutine原理分析
文章目录进程和线程进程-——拥有资源的人线程——真正干活的人多线程和多协程多线程——多个人干多件事案例插曲多协程——一个人干多件事本质goroutine的原理GM模型GPM模型关于goroutine底层的线程的数量测试程序一测试程序二测试程序三结论进程和线程在讲解goroutine之前,先来熟悉一下进程和线程的概念,因为只有通过概念之前对比,才能更加理解这些概念。进程-——拥有资源的人计算...原创 2018-11-10 09:40:02 · 2229 阅读 · 0 评论 -
gdb调试golang程序
gdb是linux系统自带的调试器,功能十分强大,对于C/C++程序员不会陌生,那么使用gdb如何调试golang程序呢?1、配置gdbgolang这门语言是2009年才出来,gdb并没有原生支持调试golang,这里需要配置gdb,使它支持golang,关于这里面的原理,我还不是很清楚,应该是gdb本身支持扩展,可以以提供插件的形式扩展支持其他语言,具体怎么样,我也不是很清楚,待后续研究。...原创 2018-12-09 11:26:28 · 2576 阅读 · 0 评论 -
使用dlv调试golang程序
1、编译选项go build -gcflags=all="-N -l" ## 必须这样编译,才能用gdb打印出变量,第二个是小写的L,不是大写的i需要加编译选项,类似gcc中的 -g选项,加入调试信息。关于如何安装dlv,请自行百度或者谷歌。2、使用dlv调试dlv的功能介绍Usage: dlv [command]Available Commands: attach ......原创 2018-12-09 12:37:35 · 19203 阅读 · 0 评论 -
实现golang中memset函数
C语言中的memset在C/C++中,有一个memset函数,常常用来清空一段内存。#include <string.h>// 将s的前n个字节用c填充void *memset(void *s, int c, size_t n);// 用法举例int arr[100];// 将数组内存全部置为0memset(&arr, 0, sizeof(arr));由于...原创 2018-12-16 12:11:11 · 4892 阅读 · 0 评论