- 博客(11)
- 收藏
- 关注
原创 Golang入门——逃逸分析
Golang入门——逃逸分析逃逸策略逃逸场景指针逃逸栈空间不足逃逸动态类型逃逸闭包引用对象逃逸逃逸分析是指编译器决定内存分配的位置。在函数中申请一个对象:分配在栈中:函数结束后可自动将内存回收。分配在堆中:函数结束后交给GC处理。逃逸策略函数在申请对象时,根据该对象是否被函数外部引用来决定是否逃逸。如果函数外部没有引用,优先放到栈中。如果函数外部存在引用,一定放到堆中。如果内存过大超过栈的存储能力时,则该对象放在堆中。逃逸场景指针逃逸如果函数的返回值为指针的话则会发生逃逸。例:
2021-11-03 15:05:04
470
原创 Golang入门——GC机制
Golang入门——GC机制常见GC算法引用计数标记清除分代收集Go的GCmark内存标记三色标记法STW(Stop The World)GC优化写屏障协助GCGC触发的时机内存分配量到达阈值触发GC定期触发GC手动触发GC 性能优化常见GC算法引用计数每个对象维护一个计数器,当引用该对象的对象被销毁时,计数器减一,当计数器为0时回收该对象。代表语言:Python,PHP,Swift优点:对象可以很快被回收,不会出现内存耗尽再回收的现象。缺点:不能很好的处理循环引用,而且维护计数器需要开销。标
2021-11-03 14:31:17
1458
原创 Golang入门——内存管理
Golang入门——内存管理概要spanclasscachecentralheap内存分配概要预申请的内存划分为spans 、 bitmap 、 arena三部分。arena为堆区,应用区中的内存从其中分配。大小为521GB,划分成一个一个的page,每个page大小为8KB,一共有 512GB/8KB = 64M个page。spans存放span指针,每个指针对应一个或者多个arena,span大小为 512GB/8KB * 8byte = 512MB。bitmap由arena计算出来,主要用于
2021-11-01 18:19:56
403
原创 Golang入门——channel的进阶使用
Golang入门——channel的进阶使用单向管道关闭管道有缓冲区管道与无缓冲区管道的区别单向管道顾名思义,单向管道就是只能用于发送或者接收数据。从管道的数据结构上看,并没有单向的管道。所谓的单向管道就是对管道的一种限制。func readChannel(ChanName <-chan int){ ... }func writeChannel(ChanName chan<- int){ ... }其中 <-chan 和 chan <- 均为单向管道。如果向读管道写入数据
2021-10-31 19:38:00
249
原创 常用的HTTP请求方法
方法名注释Get请求获取指定页面信息Head类似与Get但是仅获取报头Post提交数据进行处理请求Put向服务器提交文件取代原文件Delete服务器删除指定页面Options允许用户查看服务器性能Patch对Put的补充,对已知资源进行局部补充...
2021-10-29 13:11:16
103
原创 HTTP请求常见状态码
200 请求成功301 永久重定向302 暂时重定向401 请求用户身份认证403 服务器拒绝客户端请求404 服务端找不到客户端所指定的文件408 请求超时500 服务器内部发生错误501 服务器不支持请求的功能502 网关或代理执行请求,从服务器接收到无效效应...
2021-10-29 12:44:22
89
原创 Golang入门——结构体、集合和高阶函数
Golang入门——结构体、集合和高阶函数结构体、集合和高阶函数完整代码代码下载结构体、集合和高阶函数在应用中定义了一个结构体,可能需要这个结构体的对象集合,例如:type Any interface{}type Car struct{ Model string Manufacturer string BuildYear int}type Cars []*Car我们可以使用高阶函数,即把函数作为定义所需方法的参数。func (cs Cars) Process(f func(car *
2021-09-02 08:46:48
366
原创 Golang入门——动态类型
Golang入门——动态类型Go的动态类型动态方法调用接口的提取显式地指明类型实现了某个接口空接口和函数重载接口的继承代码下载Go的动态类型在面向对象语言(C++、Java等 )中数据和方法被封装为 类 的概念。而Go中没有类,其数据和方法是一种松耦合的正交关系。Go中的接口和 Java / C# 类似:都是必须提供一个指定方法集实现。但是更加灵活通用:任何提供了接口方法实现代码的类型都隐式地实现了该端口,而不用显式地声明。接收一个或多个接口类型作为参数的函数,其实参可以是任何实现了该接口的类型的变
2021-09-01 14:24:12
1069
原创 Golang入门——反射包
Golang入门——反射包方法和类型的反射通过反射修改值反射结构代码下载方法和类型的反射反射时用程序检查其所拥有的结构,是元编程的一种形式。反射可以在运行时检查类型和变量。除非真的有必要,否则应尽量避免或小心使用。反射包中的两个简单函数:reflect.TypeOf( i interface{ }) :返回被检查对象的类型reflect.ValueOf( i interface{ }) :返回被检查对象的数值var x float64 = 3.14 fmt.Println(reflect
2021-09-01 09:33:21
438
原创 Golang入门——空接口
Golang入门——空接口空接口或者最小借口不包含任何方法,对实现不做任何要求。形如:type Any interface{}空接口类似于Java/C#中的所有类的基类:Object 类。可以给空接口变量赋予任何类型的值type rectangle struct { height float64 width float64 } type Any interface{} func main() { var any Any any = 5
2021-08-31 10:04:20
1616
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人