Golang新版GreenTea GC机制
🔍 来看看Golang 1.25新出的GreenTea GC是怎么个事
🔍 来看看Golang 1.25新出的GreenTea GC是怎么个事
思维导图 GC的概念 GC全称是 garbage collection,即垃圾回收。 新开发的语言(java,python,php等等),在使用的时候,可以使语言用户不必关心内存对象的释放,只需要关心对象的申请即可 ...
LRU LRU算法即淘汰最近一段时间内没有被访问(命中)的数据,最理想的实现方法为双链表+Hash表。 双链表:新加入/新命中的节点放到表尾,空间用完需要淘汰的时候,删除表头(最近一段时间没有被命中)。 双链表可以使添加删除的时间复杂度降到O(1) Hash表:访问的时间复杂度降到O(1) 实现 具体流程写在注释内: ...
问题提出 场景一 维持长链接,为每个长链接分配三个goroutine 一个负责读数据 一个负责写数据 一个负责维持心跳 高并发场景,goroutine的数量会是连接数的三倍! ...
最大最小值常量 1 2 3 4 5 const UINT_MIN uint = 0 const UINT_MAX = ^uint(0) const INT_MAX = int(^uint(0) >> 1) const INT_MIN = ^INT_MAX time包:秒、毫秒、纳秒时间戳输出 https://www.junjie.in/article/34 1 2 3 4 fmt.Printf("时间戳(秒):%v;\n", time.Now().Unix()) fmt.Printf("时间戳(纳秒):%v;\n",time.Now().UnixNano()) fmt.Printf("时间戳(毫秒):%v;\n",time.Now().UnixNano() / 1e6) fmt.Printf("时间戳(纳秒转换为秒):%v;\n",time.Now().UnixNano() / 1e9) 类型断言 https://studygolang.com/articles/20041 1 2 3 4 5 i := "1" if v, ok := i.(int); ok { fmt.Println("to int", i) } // string的uid 转 10进制int 类型断言和类型转换 类型转换 语法:<结果类型> := <目标类型> ( <表达式> ) 类型转换是用来在不同但相互兼容的类型之间的相互转换的方式,所以,当类型不兼容的时候,是无法转换的。 例如 各种int类型,[]byte和string类型 类型断言 语法: <目标类型的值>,<布尔参数> := <表达式>.( 目标类型 ) // 安全类型断言 <目标类型的值> := <表达式>.( 目标类型 ) //非安全类型断言 类型断言的本质,跟类型转换类似,都是类型之间进行转换,不同之处在于,类型断言实在接口之间进行。 在switch中 <目标类型的值> := <表达式>.( type )后,case 目标类型 字符串和数组互转 1 2 strings.Split(uidStr, ",") strings.Join(strSlice, ",") 类型转换 int 之间互相转 ...
十一、Go网络编程 Go实现TCP通信 TCP协议 传输控制协议/网间协议 面向连接的、可靠的、基于字节流的传输层协议 因为是面向连接的协议,数据如同流水传输,会存在黏包问题 TCP服务端 每建立一次链接就创建一个goroutine去处理 ...
十、并发编程 并发与并行 并发:同一 时间段内 执行多个任务(用微信和两个人聊天) 并行:同一 时刻 执行多个任务(你和你朋友都在用微信和别人聊天) Go并发通过goroutine实现 ...
九、反射 9.1 反射 9.1.1 变量的内在机制 Go语言中的变量分为两个部分 类型信息:预先定义好的元信息 值信息:运行过程中可动态变化 9.1.2 反射介绍 反射是指:在程序运行期对程序本身进行访问和修改的能力 ...
八、包 Go语言的源码复用是建立在包(package)基础之上的 8.1 包介绍 包(package)是多个Go源码的集合,是一种高级的代码复用方案,Go语言为我们提供了很多内置包,如fmt、os、io等。 ...
七、接口 接口(interface)定义了一个对象的行为规范,只定义规范不实现,由具体的对象来实现规范的细节。 接口类型 Go语言中的结口是一种抽象类型,是一组 method 的集合 ...
六、方法 方法是与 对象实例绑定 的特殊函数,是一个面向对象的概念 方法的函数定义语法的区别:方法有前置实力接收参数 构造函数 建议返回结构体指针类型(值拷贝开销较大) 1 2 3 4 5 6 7 func newPerson(name, city string, age int8) *Person { return &Person{ name: name, city: city, age: age, } } 调用构造函数 ...
五、数据 5.1 字符串 默认值为 ""而不是nil 换行字符串使用 `,前置缩进空格也属于字符串内容 1 2 3 4 5 6 7 8 func main() { s := `line\r\n, line 2` fmt.Println(s) } // 输出: // line\r\n, // line 2 支持字符串间的比较 允许以索引号访问字节数组,但不能获取元素地址 分配超大字符串 ==92== 5.2 数组 定义方式: ...
四、函数 4.1 定义 使用 func 定义函数,特性如下: 无须前置声明 不支持同名函数重载 不支持命名嵌套 nested – ? 不支持默认参数 不支持定长变参 ==支持多返回值== 支持命名返回值 支持匿名函数和闭包 函数属于第一类对象,具备相同签名(参数和返回值一样)的视为同一类型 ...
三、表达式 3.1 保留字 25个关键字 3.2 运算符 乘幂和绝对值,对应的是 math库 里的Pow和Abs函数 优先级 从高到低: 1 2 3 4 5 * / % << >> & &^ + - | ^ == != < <= > >= && || 相同优先级从左到右 ...
二、类型 2.1 变量 静态类型语言,Go变量有固定的数据类型。==只能改变变量值,无法改变类型。== 类型转换或指针操作,可以用不同的方式修改变量值,但是并不意味改变了变量类型 ...
书籍: 环境:MacOS + Goland 学习方式:看书、实现、记录Markdown 一、概述 1.1 特征 语法简单:类C,简洁->Python 并发模型:运行时用Goroutine运行一切,用协程的方式处理并发单元,运行时又作了深度优化;搭配channel,实现了CSP模型 垃圾回收: 静态链接:编译后一个可执行文件,无需附加仍何东西就能部署 标准库: 工具链: 1.2 简介 第一个Go程序 1 2 3 4 5 6 // test.go package main func main() { print("hello world") } 以.go为文件扩展名 不需要分号 ; 一定要有入口函数 main,无参数,==且必须放在main包中??== 删除未使用的导入,否则会报错 test.go 和 main.go test.go,里面写 package main,直接运行,控制台不输出,需要 go run test.go main.go,里面写 package main,直接运行输出 变量 使用 var 定义变量,数据类型划分明确,适合跨平台。赋值的时候,var可以省略 ...