Go
文章平均质量分 63
李子园的梦想
命运不是风,吹来吹去
展开
-
GO 协程池的浅探
## 为啥需要协程池go语言支持多协程并发,具有Goroutine调度的特性。当处理并发问题时 可以开辟多个Goroutine去解决。虽然go语言在调度Goroutine已经优化的非常完善,开启一个Goroutine的代价非常小。但是,如果无休止的开辟Goroutine会出现高频率的调度Goroutine,那么依然会浪费很多上下文切换的资源。并且每个Goroutine都有一定内存的开销,当量足够大的时候系统内存会承担不住 服务会被自动OOM。## 先聊聊并发问题![image-2021072原创 2021-07-24 22:47:05 · 447 阅读 · 0 评论 -
Go之热重启
一、背景生产环境对持续性和稳定性要求比较高如果按照跟开发环境的杀死进程关闭服务、再重启服务会有一定的影响。未处理完的请求,被迫中断,数据的一致性会被破坏,甚至逻辑出现错误或者产生脏数据。 服务关闭且重新启动期间,需要一定的时间,会出现服务不可用现象处理三种方案:生产环境通过网关服务,通过流量调度的方式实现平滑重启 k8s管理 程序自身完成二、热重启释义热重启(Hot Restart),是一项保证服务可用性的手段。它允许服务重启期间,不中断已经建立的连接,老服务进程不..原创 2021-06-06 21:59:35 · 924 阅读 · 0 评论 -
Go之Benchmark
一、概念基准测试(benchmark)是 go testing 库提供的,用来度量程序性能,算法优劣的利器。指定一个时间(默认是1秒),看测试对象在达到时间上限时,最多能被执行多少次和在此期间测试对象内存分配情况。二、特点基准测试的代码文件必须以_test.go结尾 基准测试的函数必须以Benchmark开头 基准测试函数必须接受一个指向Benchmark类型的指针作为唯一参数 基准测试函数不能有返回值 b.ResetTimer是重置计时器,这样可以避免for循环之前的初始化代.原创 2021-06-04 11:49:26 · 4404 阅读 · 0 评论 -
Go之reflect标准库
反射能让我们更简便地获得一个对象的类型、值,如果对象是结构体还能获得它的属性、方法。type Type interface { Align() int FieldAlign() int Method(int) Method MethodByName(string) (Method, bool) NumMethod() int Name() string PkgPath() string Size() uintptr String(原创 2021-02-01 01:24:25 · 234 阅读 · 0 评论 -
Go之strings标准库
1. EqualFold函数:func EqualFold(s, t string) bool释义: 判断两个utf-8编码字符串(将unicode大写、小写、标题三种格式字符视为相同)是否相同。例子: s := "hello" fmt.Println("string: ", s) // 1、EqualFold 判断两个utf-8编码字符串 是否相同。 f := strings.EqualFold(s, "Hello") fmt.Println("EqualFold:...原创 2021-01-16 21:42:20 · 945 阅读 · 0 评论 -
Go之零值判断
python判断零值很简单,因为是弱类型,所以会内置自动装箱判断处理。只需要 if x : 即可。但是go如何判断?这里可以借助反射reflect处理。func IsZeroOfInterface(x interface{}) bool { if x == nil { return true } value := reflect.ValueOf(x) switch value.Kind() { case reflect.String: return value.Len() ==原创 2021-01-13 12:51:43 · 1252 阅读 · 0 评论 -
Go之数组实现反转
// 数组倒序func reverse(arr *[]string) { length := len(*arr) var temp string for i := 0; i < length/2; i++ { temp = (*arr)[i] (*arr)[i] = (*arr)[length-1-i] (*arr)[length-1-i] = temp }}// 使用dirList := []string{"a","b","c"}reverse(&dirLi.原创 2021-01-08 18:16:24 · 1243 阅读 · 0 评论 -
Go之filepath标准库
1. ToSlash函数:func ToSlash(path string) string释义: 将 path 中平台相关的路径分隔符转换为 '/'例子: s := "F:\\golang_workspace\\leetcode\\aa.js" fmt.Println("path: ", s) // 1、ToSlash 将 path 中平台相关的路径分隔符转换为 '/' s = filepath.ToSlash(s) fmt.Println("ToSlash: ", s)原创 2021-01-08 17:37:03 · 2575 阅读 · 1 评论