09 2022 档案
摘要:Go SQL驱动接口解读 Go官方没有提供数据库驱动,而是为开发数据库驱动定义了一些标准接口(即database/sql ),开发者可以根据定义的接口来开发相应的数据库驱动。Go中支持MySQL的驱动比较多,如 github.com/go-sql-driver/mysql 支持 database/s
阅读全文
posted @ 2022-09-10 23:30
屠魔的少年
摘要:WebSocket协议解读 websocket和http协议的关联: 都是应用层协议,都基于tcp传输协议。 跟http有良好的兼容性,ws和http的默认端口都是80,wss和https的默认端口都是443。 websocket在握手阶段采用http发送数据。 websocket和http协议的差
阅读全文
posted @ 2022-09-10 23:25
屠魔的少年
摘要:网络通信过程 DMA:网卡和磁盘数据拷贝到内存流程比较固定,不涉及到运算操作,且非常耗时。在磁盘嵌入一个DMA芯片,完成上述拷贝工作,把CPU解脱出来,让CPU专注于运算。 mmap:用户空间和内核空间映射同一块内存空间,从而达到省略将数据从内核缓冲区拷贝到用户空间的操作,用户空间通过映射直接操作内
阅读全文
posted @ 2022-09-10 23:22
屠魔的少年
摘要:http协议 http:超文本传输协议Hyper Text Transfer Protocol。 http属于应用层协议,它在传输层用的是tcp协议。 无状态,对事务处理没有记忆能力(对比TCP协议里的确认号)。如果要保存状态需要引用其他技术,如cookie。 无连接,每次连接只处理一个请求。早期带
阅读全文
posted @ 2022-09-10 23:16
屠魔的少年
摘要:并发模型 任何语言的并行,到操作系统层面,都是内核线程的并行。同一个进程内的多个线程共享系统资源,进程的创建、销毁、切换比线程大很多。从进程到线程再到协程, 其实是一个不断共享, 不断减少切换成本的过程。 协程 线程 创建数量 轻松创建上百万个协程而不会导致系统资源衰竭 通常最多不能超过1万个 内存
阅读全文
posted @ 2022-09-10 23:12
屠魔的少年
摘要:链表 链表的一个应用案例。LRU(Least Recently Used, 最近最少使用)缓存淘汰的总体思路:缓存的key放到链表中,头部的元素表示最近刚使用。 如果命中缓存,从链表中找到对应的key,移到链表头部。 如果没命中缓存: 如果缓存容量没超,放入缓存,并把key放到链表头部。 如果超出缓
阅读全文
posted @ 2022-09-10 23:00
屠魔的少年
摘要:加密算法 对称加密 加密过程的每一步都是可逆的。加密和解密用的是同一组密钥。异或是最简单的对称加密算法。 //XOR 异或运算,要求plain和key的长度相同 func XOR(plain string, key []byte) string { bPlain := []byte(plain) b
阅读全文
posted @ 2022-09-10 22:55
屠魔的少年
摘要:数学计算 数学常量 math.E //自然对数的底,2.718281828459045 math.Pi //圆周率,3.141592653589793 math.Phi //黄金分割,长/短,1.618033988749895 math.MaxInt //9223372036854775807 ui
阅读全文
posted @ 2022-09-10 22:46
屠魔的少年
摘要:用go mod管理工程 初始化项目: go mod init $module_name $module_name和目录名可以不一样。上述命令会生成go.mod文件,该文件内容形如: module go-course go 1.17 require ( github.com/ethereum/
阅读全文
posted @ 2022-09-10 22:44
屠魔的少年
摘要:面向对象的概念 洗衣服过程剖析: 给洗衣机里加脏衣服和洗衣粉。 启动洗衣机。 洗衣机自动注水,然后滚动。 脏衣服从黑颜色变成白颜色。 洗衣机自动停止。 用面向过程的思想实现代码。 //准备洗衣服 //输入参数: //powder 洗衣机里放多少洗衣粉 //closes 洗衣机里放多少衣服 //cle
阅读全文
posted @ 2022-09-10 22:37
屠魔的少年
摘要:反射介绍 反射就是在运行期间(不是编译期间)探知对象的类型信息和内存结构、更新变量、调用它们的方法。 反射的使用场景: 函数的参数类型是interface{},需要在运行时对原始类型进行判断,针对不同的类型采取不同的处理方式。比如json.Marshal(v interface{})。 在运行时根据
阅读全文
posted @ 2022-09-10 22:35
屠魔的少年
摘要:面向接口编程 接口的基本概念 接口是一组行为规范的集合。 type Transporter interface { //定义接口。通常接口名以er结尾 //接口里面只定义方法,不定义变量 move(src string, dest string) (int, error) //方法名 (参数列表)
阅读全文
posted @ 2022-09-10 22:26
屠魔的少年
摘要:函数 函数的基本形式 //函数定义。a,b是形参 func argf(a int, b int) { a = a + b } var x, y int = 3, 6 argf(x, y) //函数调用。x,y是实参 形参是函数内部的局部变量,实参的值会拷贝给形参。 函数定义时的第一个的大括号不能另起
阅读全文
posted @ 2022-09-10 22:17
屠魔的少年
摘要:结构体 结构体创建、访问与修改 定义结构体 type user struct { id int score float32 enrollment time.Time name, addr string //多个字段类型相同时可以简写到一行里 } 声明和初始化结构体 var u user //声明,会
阅读全文
posted @ 2022-09-10 22:13
屠魔的少年
摘要:流程控制语句 if if 5 > 9 { fmt.Println("5>9") } 如果逻辑表达式成立,就会执行{}里的内容。 逻辑表达式不需要加()。 "{"必须紧跟在逻辑表达式后面,不能另起一行。 if c, d, e := 5, 9, 2; c < d && (c > e || c > 3)
阅读全文
posted @ 2022-09-10 21:54
屠魔的少年
摘要:数据类型概览 基础数据类型 类型 长度(字节) 默认值 说明 bool 1 false byte 1 0 uint8,取值范围[0,255] rune 4 0 Unicode Code Point, int32 int, uint 4或8 0 32 或 64 位,取决于操作系统 int8, uint
阅读全文
posted @ 2022-09-10 21:38
屠魔的少年
摘要:标识符与关键字 go变量、常量、自定义类型、包、函数的命名方式必须遵循以下规则: 首字符可以是任意Unicode字符或下划线。 首字符之外的部分可以是Unicode字符、下划线或数字。 名字的长度无限制。 理论上名字里可以有汉字,甚至可以全是汉字,但实际中不要这么做。 Go语言关键字 break d
阅读全文
posted @ 2022-09-10 21:31
屠魔的少年
浙公网安备 33010602011771号