- 博客(18)
- 收藏
- 关注
原创 golang内存分配逃逸分析
逃逸分析在编译阶段完成,目的是决定内存分配地址是栈还是堆:编译时通过 go build -gcflags=-m 可以查看逃逸对象参考:Go 逃逸分析 | Go 语言高性能编程 | 极客兔兔 (geektutu.com)【转】Golang内存分配逃逸分析 -叶落山城秋 (iphpt.com)堆和栈栈可以简单理解成一次函数调用内部申请到的内存,它们会随着函数的返回把内存还给系统。func F() { temp := make([]int, 0, 20) ...}类似于...
2021-11-17 01:44:11
418
原创 gin入门
gin框架(文档《Gin 框架中文文档》 | Go 技术论坛 (learnku.com))Go世界里最流行的Web框架,Github上有32K+star。 基于httprouter开发的Web框架。中文文档齐全,简单易用的轻量级框架。
2021-11-17 00:47:55
781
原创 GRPC初识
部分参考:gRPC快速入门 | 李文周的博客 (liwenzhou.com)gRPC · Go语言中文文档 (topgoer.com)RPCRPC算是近些年比较火热的概念了,随着微服务架构的兴起,RPC的应用越来越广泛。本文介绍了RPC和gRPC的相关概念,并且通过详细的代码示例介绍了gRPC的基本使用。在分布式计算,远程过程调用(英语:Remote Procedure Call,缩写为 RPC)是一个计算机通信协议。该协议允许运行于一台计算机的程序调用另一个地址空间(通常为一个开放网络的一
2021-11-14 23:54:05
442
原创 golang:GMP原理与调度
参考:GMP 原理与调度 · Go语言中文文档 (topgoer.com)Go 语言的协程 goroutineGo 为了提供更容易使用的并发方法,使用了 goroutine 和 channel。goroutine 来自协程的概念,让一组可复用的函数运行在一组线程之上,即使有协程阻塞,该线程的其他协程也可以被 runtime 调度,转移到其他可运行的线程上。最关键的是,程序员看不到这些底层的细节,这就降低了编程的难度,提供了更容易的并发。Go 中,协程被称为 goroutine,它非常轻量,一个
2021-11-08 01:34:46
410
原创 golang之初学反射
反射是指在程序运行期对程序本身进行访问和修改的能力。程序在编译时,变量被转换为内存地址,变量名不会被编译器写入到可执行部分。在运行程序时,程序无法获取自身的信息。支持反射的语言可以在程序编译期将变量的反射信息,如字段名称、类型信息、结构体信息等整合到可执行文件中,并给程序提供接口访问反射信息,这样就可以在程序运行期获取类型的反射信息,并且有能力修改它们。...
2021-11-06 02:07:53
131
原创 golang初学空接口
在go语言中,接口就是方法的集合,接口指定了一个类型应该具有的方法,并由该类型决定如何实现这些方法。接口类型和其他数据类型不同,接口不可以被实例化·实现方法type 接口类型名 interface{ 方法名1( 参数列表1 ) 返回值列表1 方法名2( 参数列表2 ) 返回值列表2 …}一个不包含任何方法的接口是空接口,我们可以把任何值赋给空接口类型。var a interface{}a = "Hello"a = truea = 100接口的值
2021-11-04 01:02:39
169
原创 HTTP状态码
参考:一文牢记HTTP状态码(图解HTTP状态码) - 云+社区 - 腾讯云 (tencent.com)HTTP状态码负责表示客户端HTTP请求的返回结果、标记服务器的处理是否正常、通知出现的错误等工作。状态码的职责是当客户端向服务端发送请求时,描述返回的请求结果。 借助状态吗,用户可以知道服务器端是正常处理了请求,还是出现了错误。 1XX Informational(信息性状态码) 接收的请求正在处理 2XX
2021-11-03 00:51:45
364
原创 go语言strings包中的工具与操作
子串相关操作func Contains(s, substr string) bool判断substr是否存在于字符串s中,如果存在就返回truefunc ContainsAny(s, chars string) bool如果字符串chars中有字符在s中则返回truefunc ContainsRune(s string, r rune) bool代码r在s中则返回true查找字串位置相关操作//返回子串sep在字符串s中第一次出现的索引值,不在的话返回-1.func
2021-11-02 02:08:45
287
原创 初学go并发编程context
这也是go语言的并发工具,用来一对多管理goroutine,它可以跟踪goroutine并控制部分代码以及思路参考:Go语言实战笔记(二十)| Go Context | 飞雪无情的博客 (flysnow.org)context控制goroutine实例代码:func main() { ctx, cancel := context.WithCancel(context.Background()) go func(ctx context.Context) { for { select
2021-11-01 02:47:47
113
原创 Golang并发操作入门
sync.Mutex与sync.RWMutex保证多个并发线程对共享资源的访问是串行的,否则很容易出现争用和冲突的情况,这时需要使用互斥量来保证在同一时刻只有一个goroutine访问共享资源,其中sync.Mutex与sync.RWMutex类型就是互斥量,也称互斥锁,当有goroutine进入临界区时,我们对他进行锁定,当他离开时我们进行解锁操作,锁定操作可以用Lock方法实现,解锁操作可以用Unlock方法var mu sync.Mutex //定义互斥锁mu.Lock()...
2021-10-30 20:08:02
222
原创 map,slice,channel底层实现
部分引用:golang的引用类型(slice,map,channel)底层实现 - Mr.peter - 博客园 (cnblogs.com)slicego语言中的切片,也是动态数组,切片的底层结构是一个结构体,里边包含底层数组的地址type slice struct { array unsafe.Pointer // 指向底层数组的指针 len int // 切片中元素的数量 cap int // array 数组的总容量}slice函数传递在切片进行
2021-10-27 00:09:22
391
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人