随笔分类 -  GoLang

摘要:一、关于 Go GC 优化的手段 设置 GOGC / debug.SetGCPercent() 这两种方式的原理和效果都是一样的,GOGC 默认值是 100,也就是下次 GC 触发的 heap 的大小是这次 GC 之后的 heap 的一倍。GO 的 GC 是标记-清除方式,当 GC 会触发时全量遍历 阅读全文
posted @ 2022-10-24 00:36 踏雪无痕SS 阅读(670) 评论(0) 推荐(0) 编辑
摘要:一、sync.Cond 的使用场景 一句话总结:sync.Cond 条件变量用来协调想要访问共享资源的 那些 goroutine,当共享资源的状态发生变化的时候,它可以用来通知被互斥锁阻塞的 goroutine。 1、sync.Cond 基于互斥锁/读写锁,它和互斥锁的区别是什么呢? 互斥锁 syn 阅读全文
posted @ 2022-10-07 23:02 踏雪无痕SS 阅读(808) 评论(0) 推荐(0) 编辑
摘要:一、堆内存与栈内存 堆(Heap):一般来讲是人为手动进行管理,手动申请、分配、释放。堆适合不可预知大小的内存分配,这也意味着为此付出的代价是分配速度较慢,而且会形成内存碎片。 栈(Stack):由编译器进行管理,自动申请、分配、释放。一般不会太大,因此栈的分配和回收速度非常快;我们常见的函数参数( 阅读全文
posted @ 2022-10-07 15:49 踏雪无痕SS 阅读(704) 评论(0) 推荐(0) 编辑
摘要:一、现状 在Go语言中,goroutine的创建成本很低,调度效率高,Go语言在设计时就是按以数万个goroutine为规范进行设计的,数十万个并不意外,但是goroutine在内存占用方面确实具有有限的成本,你不能创造无限数量的它们,比如这个例子: ch := generate() go func 阅读全文
posted @ 2022-10-04 00:10 踏雪无痕SS 阅读(1144) 评论(0) 推荐(0) 编辑
摘要:垃圾回收历史进程 一、为什么选择标记清除 1、判断对象存活的思路 在 GC 领域里,判断对象存活的主流思路是两个,「引用计数」和「可达性分析」。 2、引用计数 顾名思义,引用计数的思路就是给每个对象进行计数,每被其它对象引用一次,计数就 +1,引用失效后,计数就 -1。当计数器的数值为 0,就意味着 阅读全文
posted @ 2022-10-02 21:07 踏雪无痕SS 阅读(249) 评论(0) 推荐(0) 编辑
摘要:一、gRPC介绍 gRPC 基于 HTTP/2 标准设计,带来诸如双向流、流控、头部压缩、单 TCP 连接上的多复用请求等特性。这些特性使得其在移动设备上表现更好,更省电和节省空间占用。 gRPC有四种服务方法: Unary RPCs,一元RPC。客户端发送一个请求到服务端,服务端响应一个请求。 r 阅读全文
posted @ 2022-10-02 16:15 踏雪无痕SS 阅读(383) 评论(0) 推荐(0) 编辑
摘要:一、概述 当切片的容量不足时,我们会调用 runtime.growslice 函数为切片扩容,扩容是为切片分配新的内存空间并拷贝原切片中元素的过程,我们先来看新切片的容量是如何确定的,使用的是 growslice 函数 func growslice(et *_type, old slice, cap 阅读全文
posted @ 2022-10-02 11:24 踏雪无痕SS 阅读(552) 评论(1) 推荐(1) 编辑
摘要:PHP 的朋友应该会被 PHP 中两大特性折服: 1、强大的 array,一切皆Array; 2、强大的函数库,函数类型非常丰富。 一、简单示例 1、例如:md5函数 Go版本写法: package main import ( "crypto/md5" "fmt" "io" ) func Md5(s 阅读全文
posted @ 2022-09-27 20:04 踏雪无痕SS 阅读(400) 评论(0) 推荐(0) 编辑
摘要:一、CLI 命令(spf13/cobra) GitHub地址:https://github.com/spf13/cobra Cobra既是一个创建强大的现代CLI应用程序的库,也是一个生成应用程序和命令的程序。可以使用这个库来管理命令应用程序,执行runner应用程序,初始化配置,病启动Reast 阅读全文
posted @ 2022-09-27 19:24 踏雪无痕SS 阅读(273) 评论(0) 推荐(0) 编辑
摘要:一、概括 使用哈希表的目的就是要快速查找到目标 key,然而,随着向 map 中添加的 key 越来越多,key 发生碰撞的概率也越来越大。bucket 中的 8 个 cell 会被逐渐塞满,查找、插入、删除 key 的效率也会越来越低。最理想的情况是一个 bucket 只装一个 key,这样,就能 阅读全文
posted @ 2022-09-26 18:13 踏雪无痕SS 阅读(1336) 评论(0) 推荐(1) 编辑
摘要:一、热加载是什么 热加载:当我们对代码进行修改时,程序能够自动重新加载并执行,这在我们开发中是非常便利的,可以快速进行代码测试,省去了每次手动重新编译。 二、使用Air进行热加载 地址:https://github.com/cosmtrek/air 具有以下特性: 彩色日志输出 自定义构建或二进制命 阅读全文
posted @ 2022-09-26 18:10 踏雪无痕SS 阅读(1852) 评论(0) 推荐(1) 编辑
摘要:一、map 是什么 map 是 Go 中用于存储 key-value 关系数据的数据结构,类似 C++ 中的 map,Python 中的 dict。Go 中 map 的使用很简单,但是对于初学者,经常会犯两个错误:没有初始化,并发读写。 1、未初始化的 map 都是 nil,直接赋值会报 panic 阅读全文
posted @ 2022-05-30 00:08 踏雪无痕SS 阅读(6122) 评论(0) 推荐(0) 编辑
摘要:一、哪些类型可以作为map的key ? 1、可比较的类型都可以作为map key boolean 布尔值 numeric 数字 包括整型、浮点型,以及复数 string 字符串 pointer 指针 两个指针类型相等,表示两指针指向同一个变量或者同为nil channel 通道 两个通道类型相等,表 阅读全文
posted @ 2022-05-30 00:07 踏雪无痕SS 阅读(123) 评论(0) 推荐(0) 编辑
摘要:一、关于struct {} struct是Go中的关键字,用于定义结构类型 type User struct { Name string Age int } struct {} :表示struct类型 struct {} 是一种普通数据类型,一个无元素的结构体类型,通常在没有信息存储时使用。 优点是 阅读全文
posted @ 2022-05-28 20:25 踏雪无痕SS 阅读(800) 评论(0) 推荐(0) 编辑
摘要:在使用 go 这样的强类型语言时,我们常常会遇到类型转换的问题。比如 int 类型转 int64,interface{} 转 struct ,对一种类型取指针、解指针等等。今天在这篇文章中我们就来梳理一下,我们在 go 的日常使用中常碰到的几个类型转换场景。 go存在4种类型转换分别为:断言、强制、 阅读全文
posted @ 2021-10-18 00:10 踏雪无痕SS 阅读(1824) 评论(0) 推荐(1) 编辑
摘要:一、标准日志库log 在日常开发中,日志是必不可少的功能。虽然有时可以用fmt库输出一些信息,但是灵活性不够。Go 标准库提供了一个日志库log。 1、快速使用 log是 Go 标准库提供的,不需要另外安装 package main import ( "log" ) type User struct 阅读全文
posted @ 2021-10-10 17:07 踏雪无痕SS 阅读(3749) 评论(0) 推荐(0) 编辑
摘要:在 Golang 里有专门的方法来实现锁,就是 sync 包,这个包有两个很重要的锁类型 一个叫 Mutex, 利用它可以实现互斥锁。一个叫 RWMutex,利用它可以实现读写锁。 特别说明: sync.Mutex 的锁是不可以嵌套使用的 sync.RWMutex 的 RLock()是可以嵌套使用的 阅读全文
posted @ 2021-10-03 12:48 踏雪无痕SS 阅读(2392) 评论(0) 推荐(0) 编辑
摘要:一、通过结构(struct) 实现 接口(interface) 1、在了解iris框架的时候,经常看到有这样去写的使用一个空结构体作为接收器,来调用方法,有点好奇这样做有什么意义。 解释:在 Go 语言中,一个 struct 实现了某个接口里的所有方法,就叫做这个 struct 实现了该接口。 2、 阅读全文
posted @ 2021-10-02 13:44 踏雪无痕SS 阅读(3512) 评论(0) 推荐(1) 编辑
摘要:一、了解一些概念 Golang的log包短小精悍,可以非常轻松的实现日志打印转存功能。不用多说,log支持并发操作(即协程安全-相对于JAVA中的线程安全而言),其结构定义如下: type Logger struct { mu sync.Mutex // ensures atomic writes; 阅读全文
posted @ 2021-10-01 23:23 踏雪无痕SS 阅读(1355) 评论(0) 推荐(0) 编辑
摘要:time包提供了时间的显示和测量用的函数。日历的计算采用的是公历。 time 类型 type Time struct { // wall and ext encode the wall time seconds, wall time nanoseconds, // and optional mono 阅读全文
posted @ 2021-10-01 11:34 踏雪无痕SS 阅读(7822) 评论(0) 推荐(0) 编辑