
go
文章平均质量分 75
始梦的少年
这个作者很懒,什么都没留下…
展开
-
go内存逃逸分析
变量声明堆:全局存储空间存储的对象是可以被分享的存储的对象是被 GC 管理的栈数据帧局部存储空间,属于一个函数每个栈帧受限于一个 协程存储的对象是私有的存储的对象是被生命周期管理的栈的调用很快,比堆快40倍大对象,相差 24M倍一个变量存入 heap 最多占有 10MBESC :内存优化的手段,目的是让大的数据最好能存储到 stack,而不要跑到 heap注意,ESC是在编译时工作哪个变量会被内存逃逸?v := 0q = &v1、地址被别的变量引用,&原创 2022-05-08 18:07:37 · 407 阅读 · 0 评论 -
GO的接口---interface
接口:统一了规则实现了一个接口,就是说,拥有接口中声明的所有方法特点:(1)高内聚、低耦合(2)不需要显示实现,只要一个 变量 实现了接口中的方法,那么就实现了接口package mainimport ( "fmt")//声明/定义一个接口type Usb interface { //声明了两个没有实现的方法 Start() Stop()}//声明/定义一个接口type Usb2 interface { //声明了两个没有实现的方法 Start() Stop.原创 2022-04-29 17:17:00 · 210 阅读 · 0 评论 -
Go的对象和方法(struct)
struct 内存布局struct 是值类型,直接指向 struct 的内存空间字段=属性=field没赋值的字段初始化为它们相应的 0 值map、slice赋值前要 makestruct 默认是值拷贝改变一个实例的字段不会影响另一个。monster2 := monster1这句代码内存变化如下:直接拷贝牛魔王,再在上面修改结构体指针 var person *Person = &Person{} //因为person 是一个指针,因此标准的访问字段的方法 // (原创 2022-04-28 09:17:31 · 764 阅读 · 0 评论 -
Go中的channel
channel(1)channel本身是一个队列,先进先出(2)线程安全,不需要加锁(3)本身是有类型的,string, int 等,如果要存多种类型,则定义成 interface类型(4)channel是引用类型,必须make之后才能使用,一旦 make,它的容量就确定了,不会动态增加!!它和map,slice不一样特点:(1)一旦初始化容量,就不会改变了。(2)当写满时,不可以写,取空时,不可以取。1、关于 channel的声明和使用的代码:package mainimport (原创 2022-04-25 22:03:03 · 11852 阅读 · 3 评论 -
Go协程goroutine和管道channel
1、进程:程序在操作系统的一次执行过程,是系统资源分配和调度的基本单位。2、线程:轻量化进程,是系统调度的基本单位。在同一个进程的线程切换不会导致进程切换,不同进程里的切换会导致进程切换。3、协程goroutine:轻量化线程,一个进程可以轻松开启上万个协程。在用户态,有独立的栈空间共享程序堆空间由用户调度简单易懂的代码1:package mainimport ( "fmt" "strconv" "time")// 在主线程(可以理解成进程)中,开启一个goroutine, 该原创 2022-04-25 21:30:34 · 487 阅读 · 0 评论 -
Golang的反射
import “reflect”reflect包实现了运行时反射,允许程序操作任意类型的对象。典型用法是用静态类型interface{}保存一个值,1、通过调用TypeOf获取其动态类型信息,该函数返回一个Type类型值。2、调用ValueOf函数返回一个Value类型值,该值代表运行时的数据。3、Zero接受一个Type类型参数并返回一个代表该类型零值的Value类型值。接下来通过几个代码来演示package mainimport ( "reflect" "fmt")//专门演示原创 2022-04-24 09:30:21 · 833 阅读 · 0 评论