随笔分类 -  A Golang学习

摘要:数据结构 调度相关的数据结构有三个,M(线程),P(调度器),G(goroutine) M表示线程,P作为调度器用来帮助每个线程管理自己的goroutine,G就是golang的协程。我们可以通过runtime.GOMAXPROCS(n int)函数设置P的个数,注意P的个数并不代表M的个数,例如程 阅读全文
posted @ 2020-07-07 22:54 勿忘初心0924 阅读(2459) 评论(1) 推荐(0) 编辑
摘要:(年初的时候go语言的学习提上了日程,前一篇sync.pool阅读之后,阅读代码进度本该更快些,奈何身体被掏空,所以这篇文章断断续续一个月终于攒起来了。) 简介 channel是golang中用于goroutine之间通讯的数据结构,有以下特点: 线程安全 创建channel时返回的是指针,不需要考 阅读全文
posted @ 2020-05-31 23:24 勿忘初心0924 阅读(1107) 评论(0) 推荐(0) 编辑
摘要:应用场景 内存对齐时基本都会求关于n位对齐的向上取整 讲解 go1.13.8 中channel源码中有这样一个变量 "hchansize" 用来表示hchan(channel对应的实际结构体)所需大小(申请内存空间时,是根据hchansize给hchan申请对应大小的内存空间),这个变量的值大概就是 阅读全文
posted @ 2020-04-19 23:46 勿忘初心0924 阅读(1099) 评论(0) 推荐(0) 编辑
摘要:阅读项目代码的时候发现很多地方用到了golang的sync.pool,所以好奇golang的sync.pool底层实现是什么样的,有哪些优化。 本文是基于go1.13.8,做讲解。 [toc] 介绍 Pool翻译过来就是池子,主要功能就是: 需要使用某个Object的时候可以从Pool获取,使用完毕 阅读全文
posted @ 2020-04-06 21:36 勿忘初心0924 阅读(674) 评论(0) 推荐(1) 编辑
摘要:最近小编一直在做长连接相关的事情,最大的感触就是发版太痛苦,一个个踢掉连接然后发版,导致发版时长过长,操作繁琐。所以在想能不能实现优雅重启, 发版时客户端无感知。 [TOC] 难点 如何做到不中断接收连接 如何做到已有连接不中断 解决 如何做到不中断接受连接 以下是linux源码中bind的实现(l 阅读全文
posted @ 2019-12-09 11:59 勿忘初心0924 阅读(966) 评论(0) 推荐(1) 编辑
摘要:INI配置文件有三要素parameters,sections和comments。 1.parameters 指一条配置,就像key = value这样的。 2.sections sections是parameters的集合,sections必须独占一行并且用[]括起来。 sections没有明显的结 阅读全文
posted @ 2019-10-16 11:17 勿忘初心0924 阅读(1909) 评论(0) 推荐(0) 编辑
摘要:结构体定义: 和C++ 一样,Golang的结构体也是封装数据。可以说是面向对象吧。 结构体的组合函数: 结构体可以内嵌结构体类型的数据 接口: 和C++ 的虚函数类似(实现机制目前还不清楚) 阅读全文
posted @ 2018-05-18 20:21 勿忘初心0924 阅读(184) 评论(0) 推荐(0) 编辑
摘要:Golang的指针没有C++那么复杂,指针就是指向(存储)一个变量的地址 并且Golong的指针不支持指针的移位 例子: 可以用new初始化一个指针: 阅读全文
posted @ 2018-05-17 21:57 勿忘初心0924 阅读(181) 评论(0) 推荐(0) 编辑
摘要:小例子: 函数格式: 实参和虚参: 和大多数语言一样,实参就是在全局或者局部创建的变量,虚参就是用来做占位符的。 返回多个参数的函数: 变长参数的函数: 格式 闭包函数: 以前没接触过的新概念,就是讲整个函数赋值给一个变量。 闭包对于外层函数的变量具有访问和修改的权利。 例如: 递归函数: 没有什么 阅读全文
posted @ 2018-05-17 21:40 勿忘初心0924 阅读(216) 评论(0) 推荐(0) 编辑
摘要:1.数组: 定义方式: 固定长度: 初始情况下是空值。 这是定义固定长度的。 然后 x[0] = 1 x[1] = 2 x[2] = 3 x[3] = 4 x[4] = 5 一个个赋值 不限制长度: 这种情况必须有初始数据 2.切片 顾名思义,就是从数组切下来的一块,下标同样是从0开始的,类似C++ 阅读全文
posted @ 2018-05-09 17:42 勿忘初心0924 阅读(374) 评论(0) 推荐(0) 编辑
摘要:和多数语言不同的是Golang对格式的要求很严格 比如: A: B: A是对的,B是错的 1.if...else 2.switch 3.for循环是Golang中唯一的循环(Golang中不提供while) 阅读全文
posted @ 2018-05-04 23:08 勿忘初心0924 阅读(136) 评论(0) 推荐(0) 编辑
摘要:1.变量: ①格式: var 变量名 变量类型 例如: var s string ②赋值: 先定义再赋值: var s string s = “hello world” 直接赋值让编译器推断变量类型: var s = “hello world” 还有一种快捷方式:(注:这种方式只能用在函数内部) s 阅读全文
posted @ 2018-05-04 21:26 勿忘初心0924 阅读(927) 评论(0) 推荐(0) 编辑
摘要:两种数据类型: 1.语言内置的数据类型 1)数值型: ① 整数型: 无符号:unit8,unit16,unit32,unit64 有符号:int8, int16, int32, int64 下列X表示X位的操作系统 unit = unitX, int = intX, unitptr = X为的指针 阅读全文
posted @ 2018-05-03 22:53 勿忘初心0924 阅读(297) 评论(0) 推荐(0) 编辑
摘要:// main包,凡是标注为main包的go文件都会被编译成可执行文件 package main // 导入需要使用的包 import ( "fmt" //支持格式化输出的包,就是format的简写 ) // 主函数,程序执行入口 func main(){ /* 输出hello world! Println就是print ... 阅读全文
posted @ 2018-05-03 22:48 勿忘初心0924 阅读(166) 评论(0) 推荐(0) 编辑
摘要:参考学习:https://www.golang123.com/book/16?chapterID=290 一、第一个小程序 二、内置基础数据类型 三、变量和常量定义 四、控制流程 五、数组,切片和字典 六、使用函数 七、清楚的指针 八、结构体和接口 阅读全文
posted @ 2018-05-03 22:25 勿忘初心0924 阅读(166) 评论(0) 推荐(0) 编辑