
Golang
文章平均质量分 50
Keen_hard
Just a developer
展开
-
Golang_垃圾回收原理
一、什么是GC?内存管理分为自动和手动,C/C++ 采用手动管理内存;像 Java、Go 等有内存分配器和垃圾收集器进行内存分配和回收,其中的垃圾回收器就是 GC二、GC 算法分类追踪式垃圾回收算法(Go 中的三色标记法):核心思想是判断一个对象是否可达,一旦对象不可达就可以在垃圾回收的控制循环里被 GC 回收,对象是否可达?首先,找出所有的全局变量和当前函数栈里的变量,标记为可达;然后,从已经标记的数据开始,进一步标记它们可达访问的变量,以此类推引用计数法三、三色标记清除法:原创 2021-09-06 17:24:49 · 270 阅读 · 0 评论 -
Golang_栈内存管理
一、栈区和堆区应用程序的内存区分为栈区(stack)和堆区(heap)栈区:栈区的内存由编译器自动进行分配和回收;栈区存储函数的参数及局部变量会随着函数的创建而创建,函数的返回而销毁堆区:程序在运行期间可以主动从堆区申请内存空间,这些内存由内存分配器进行分配,由垃圾回收器进行回收二、分段栈和连续栈分段栈:Go1.3版本之前,随着 goroutine 调用的函数层级的深入或者局部变量需要的越来越多时,运行时会调用 runtime.morestack 和 runtime.newsta原创 2021-09-06 17:17:18 · 963 阅读 · 0 评论 -
Golang_内存管理
1. 内存池思想从操作系统申请一大块内存,以减少系统调用将申请到的大块内存按照特定大小预先切分成小块,构成链表为对象分配内存时,只需从大小合适的链表提取一小块回收对象内存时,将该小块内存重新归还到原链表,以便复用如闲置内存过多,则尝试归还部分内存给操作系统,降低整体开销2.内存管理三大组件mcache:本地缓存,绑定在每个 P 上,mcache 中持有一系列的 mspan(8 字节~ 32 KB大概 70 个种类)mcentral:全局中心被所有的工作线程共享,故获取资源的时候加原创 2021-09-06 16:55:06 · 253 阅读 · 0 评论 -
Go之gorountine
1. 什么是协程协程(Goroutine)可以理解成轻量级的线程,与线程相比开销非常小。Go 应用程序通常能并发地运行成千上万的协程。 Go创建一个协程只要在方法或函数调用之前加上关键字 go 。2.创建单个协程package mainimport ( "fmt" "time")func helloWorld() { fmt.Println("Hello World!") fmt.Println("Hello World goroutine!")}func main() {原创 2021-01-08 17:42:06 · 308 阅读 · 0 评论 -
Go之接口
1. 什么是接口?接口是一种抽象的数据类型,定义了对象的行为规范,但是不实现,由具体的对象实现规范细节。type 接口类型名 inferface{ 方法名a(参数列表a) 返回值列表a 方法名b(参数列表b) 返回值列表b ...}...原创 2020-08-13 19:01:19 · 288 阅读 · 0 评论 -
Go之type
type用于类型定义和类型别名类型定义: type 类型名 Type类型别名: type 类型名 = Type注意事项:type不能定义非本地类型的方法package mainimport "fmt"type myint inttype mystr stringfunc main(){ var i1 myint //定义新类型 var i2 int = 100 //类型别名 fmt.Println(i1, i2) fmt.Printf("%T\n%T",i.原创 2020-08-13 17:27:13 · 414 阅读 · 0 评论 -
Go之方法
1. 什么是方法方法就是一类带特殊的 接收者 参数的函数,即带了接收者的函数。方法接收者在它自己的参数列表内,位于 func 关键字和方法名之间。具体实例如下:package mainimport ( "fmt" "math")type Vertex struct { X, Y float64}//v为方法的接受者,Abs为方法名,float64为方法的返回值func (v Vertex) Abs() float64 { return math.Sqrt(v.X*v.X原创 2020-06-29 15:11:01 · 172 阅读 · 0 评论 -
Go之包
1. 包的定义包是多个Go源码的集合,是一种高级的代码复用方案,例如fmt、time等#package bagname注意事项:包名为main的包为函数的入口包,这种包编译之后会得到一个可执行文件。包名可以和文件夹的名字不同,包名中不能含有“-”符号一个package的文件不能在多个文件下,一个文件夹下的文件只能归属一个包。2. 包的可见性#package pkg1import "fmt"var ma = 100 //ma首字母小写,故ma只限于本包访问 const原创 2020-06-23 17:53:37 · 172 阅读 · 0 评论 -
Go之结构体
1.自定义类型在Go语言中有一些基本的数据类型。如string、int、bool、float等,Go语言中使用type关键字进行自定义类型。//类型定义,将newInt定义为int类型type newInt int2.类型别名类型别名规定:myInt只是int的别名,本质上myInt与int是同一个类型。就像一个孩子小时候有小名、乳名,上学后用学名,英语老师又会给他起英文名,但这些名字都指的是他本人。//类型别名type myInt = int3.类型别名与类型定义的区别pac原创 2020-05-30 20:18:06 · 255 阅读 · 0 评论 -
Go之map
1. map的概念map是一个无序的基于key-value的数据结构,Go语言中的map是引用类型,必须初始化.map是Go语言中提供映射关系容器,其内部使用散列表(Hash)实现。2. map的定义map[KeyType]ValueTypeKeyType:表示键的类型ValueType:表示键对应的值得类型package mainimport "fmt"func main(){ //make(map[string]int,cap),使用make函数创建map,cap表示map原创 2020-05-18 22:24:23 · 326 阅读 · 0 评论 -
Go之切片
1. 切片的概念切片(Slice)是一个拥有相同类型元素的可变长度的序列。它的本质是对数组的封装。它支持自动扩容。切片是一个引用类型,它的内部结构包含地址、长度和容量。切片一般用于快速地操作一块数据集合。2. 切片的定义//声明切片的基本语法如下:var name []T //name表示变量名,T表示切片中元素的类型package mainimport "fmt"fu...原创 2020-05-05 02:11:34 · 247 阅读 · 0 评论 -
Go之数组
1. 数组的概念数组是同一种数据类型元素的集合。 在Go语言中,声明的时确定数组,使用的时候可以修改数组中的成员,但其大小不可变化。//基本语法//定义一个长度为10的整型数组,数组名为arrayvar array[10] int2. 数组的定义var 数组名[数组长度] 数组类型数组长度必须是常量,一旦定义,长度不能变,数组可以通过下标访问,下标是从0开始,最后一个元素...原创 2020-05-04 23:21:10 · 302 阅读 · 0 评论 -
Go之流程控制
1. if else//基本语法if 表达式1{ 分支1} else if 表达式2{ 分支2}else{ 分支3}Go语言规定,if 匹配的左括号必须与 if 表达式放在同一行,同理,与 else 匹配的 左括号("{") 也必须与 else写在同一行,else 也必须与上一个 if 或else if 右边的大括号在同一行。//示例代码:if score >= ...原创 2020-04-27 14:57:14 · 160 阅读 · 0 评论 -
Go之运算符
1. 算数运算符运算符描述+相加-相减*相乘/相除%取余注意事项:自增(++)和自减(–)是表达式,不是运算符2. 关系运算符运算符描述==判断两个值是否相等,若相等则返回 True否则返回False!=判断两个值是否不相等,若不相等则返回 True否则返回False>判断左边值是否大...原创 2020-04-27 13:50:21 · 263 阅读 · 0 评论 -
Go之数据类型
Go语言中有很多数据类型,除了基本的整型、字符型、布尔型外,还有数组、切片、结构体、函数、map、通道等。基本数据类型类型描述范围uint8无符号整型(8位)0~255uint16无符号整型(16位)0~655535uint32无符号整型(32位)Column 1Column 2centered 文本居中right-al...原创 2020-04-21 19:25:25 · 162 阅读 · 0 评论 -
Go之变量与常量
变量及常量的一些基本概念和使用实例原创 2020-03-11 15:31:15 · 153 阅读 · 0 评论