![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Go
文章平均质量分 65
沧海一声笑·rush
netcore 、 Vue 、Go、计算机视觉、开发爱好者
展开
-
go 高阶 の GC垃圾回收机制
文章目录一.历史原因go发展史上采用过的一些方法垃圾回收设计的名词v1.3 之前的标记 - 清除方法标记清除的缺点二.三色标记法三色标记法的流程如果三色标记法不使用 STW 会出现的问题强弱三色不变式三.屏障一.历史原因go发展史上采用过的一些方法go 1.3 之前使用标记清除go 1.5 三色标记法go 1.8 三色标记法 + 混合写屏障机制垃圾回收设计的名词自动释放垃圾回收三色标记法内存管理SWT(stop the world) 全部停止执行v1.3 之前的原创 2021-07-01 22:23:08 · 360 阅读 · 0 评论 -
Go高阶 の 协程调度器原理
文章目录一. Golang协程调度器得由来1.1多线程和多进程带来的弊端1.2 Go 怎么做的?二. Goroutine调度器的GMP模型设计思想一. Golang协程调度器得由来1.1多线程和多进程带来的弊端以单核操作系统为例,根据时间片轮转机制,不同的线程就要不断的切换,那么 线程的数量越多,切换成本也就越大,也就越浪费,同样,多线程随着同步竞争(如锁、竞争资源冲突等),让开发变得越来越复杂而且进程和线程占用内存比较大进程占用内存 虚拟内存 4GB线程占用内存 越 4MB所原创 2021-06-30 20:46:18 · 403 阅读 · 0 评论 -
GO高阶 の map详解
文章目录一. map 基础操作前提:键不重复,可哈希二.原理1.1 hash的基本存储原理1.2 Map的整体存储结构一. map 基础操作map 的声明 m := make(map[string]int, 2) m["hah"] = 15 m["mmm"] = 20 m["wwm"] = 30 m["wsegewwm"] = 40 fmt.Println(m) m := map[string]int{} m["hah"] = 15 m["mmm"] = 20 m[原创 2021-06-29 21:00:43 · 169 阅读 · 1 评论 -
go 语言小错误
文章目录切片的扩容,只有使用 append 的时候管用指针如果没有声明指向哪里,那么就是 nil原创 2021-06-06 01:13:20 · 158 阅读 · 0 评论 -
go mod
文章目录1.go mod2.执行文件3. gomod 的常见命令1.go modgo mod 是golang 的包管理工具,可以借助 go mod 来告别 gopath2.执行文件go mod init mymodmymod 出现的地方,被称为模板根。如果此时在该文件夹下,再写一个package 那么如果要引用这个包就要使用绝对路径 mymod/aa3. gomod 的常见命令go mod tidy 删除没用的包,添加新的包...原创 2021-05-06 16:10:38 · 106 阅读 · 0 评论 -
Gin 入门
文章目录一.使用net 包中开发2.使用 gin 写一个简单的应用一.使用net 包中开发package mainimport ( "fmt" "io/ioutil" "net/http")func sayHello(w http.ResponseWriter, r *http.Request) { b, err := ioutil.ReadFile("./hellow.txt") // 从txt中读取数据 if err != nil { fmt.Println("打开txt原创 2021-04-22 02:37:08 · 1417 阅读 · 0 评论 -
Go の 单元测试
文章目录一. 文件夹格式1.先写待测文件2. 写测试文件3.执行命令二.批量的进行单元测试三.性能基准测试一. 文件夹格式应该放在同一文件之下,文件命名格式如下:1.先写待测文件按照某个字段分割字符func Split(s, sep string) (ret []string) { idx := strings.Index(s, sep) for idx != -1 { ret = append(ret, s[:idx]) s = s[idx+1:] idx = string原创 2021-04-18 19:24:06 · 67 阅读 · 0 评论 -
Go 入门 の 并发
文章目录一.概念二. goroutien2.1 go语言的闭包问题2.2 go使用随机数三. goroutine 什么时候结束一.概念并发是同一时间段执行多个任务,(你同时和两个女生聊天)并行是同一时刻执行多个任务,(你和你朋友在和女生聊天)Go 语言的并发是通过 goroutine 实现的,goroutine 类似于线程,属于用户态的线程(程序员自己编写的) ,我们可以根据需要创建成千上万的 goroutine 并发工作,goroutine 是由 Go 语言的运行时 runtime 调度实原创 2021-04-16 18:44:21 · 211 阅读 · 3 评论 -
Go の 竞争状态
文章目录2.互斥锁 如果多个 goroutine 同时读写某个资源,那么他们就处于相互竞争的状态,这种情况被称为竞争状态2.互斥锁package mainimport ( "fmt" "runtime" "sync")var ( counter int wg sync.WaitGroup mutex sync.Mutex)func f1() { defer wg.Done() for i := 0; i < 5; i++ { mutex.Lo原创 2021-04-16 15:08:13 · 55 阅读 · 0 评论 -
Golang进程权限调度包runtime三大函数Gosched、Goexit、GOMAXPROCS
runtime.Gosched(),用于让出CPU时间片,让出当前goroutine的执行权限,调度器安排其它等待的任务运行,并在下次某个时候从该位置恢复执行。这就像跑接力赛,A跑了一会碰到代码runtime.Gosched()就把接力棒交给B了,A歇着了,B继续跑。runtime.Goexit(),调用此函数会立即使当前的goroutine的运行终止(终止协程),而其它的goroutine并不会受此影响。runtime.Goexit在终止当前goroutine前会先执行此goroutine的还未..转载 2021-04-16 13:52:52 · 438 阅读 · 1 评论 -
Go 语言 の 日志(读写文件和时间)
文章目录go 对文件的操作对整个文件进行操作写数据操作go 对文件的操作对文件进行操作的时候,,如果是一行一行的读,建议使用 bufio 来实现。如果只是读,可以只使用 Open 这个方法,如果要是写就不行了。如果要写,使用 openfile 做个函数,使用指定的模式打开该文件。package mainimport ( "bufio" "fmt" "io" "os")func main() { fileObej, err := os.Open("./test.go"原创 2021-04-11 22:46:44 · 455 阅读 · 0 评论 -
Go の切片和 map 和指针(部分问题)
文章目录指针go 里面没有类的概念slice 是切片,和c# 对比的话,就是 slice就是list,map就是对应的 dictrory(字典)slice 是值类型的map 是指针类型的(无论是函数传值,还是变量赋值,都指针类型的)对于map,除非你使用复合字面值来初始化,否则,你必须使用 内置的 make 函数为 map 分配内存空间 (这是从某本书上看的,但是感觉并不合理,因为不这样写,其实代码也能实现。)复合字面值结果如下:func main() { s := map[st原创 2021-04-11 21:07:52 · 494 阅读 · 0 评论 -
Go の package
文章目录1.package2. init() 函数1.package所有的 .go 文件,除了空行和注释,都应该注明自己所属的包,每个包都应该放在一个单独的目录里,不能把多个包放在同一个目录里,也不能把同一个包的文件,分拆在不同的文件中。同一个目录下的所有的 .go 文件,都必须声明为同一个包名。包名都用小写默认包名和文件夹的名字相同包的路径,从 src 目录下面开始写要想方法在外边引用,首字母必须大写如果不想使用包的方法,可以匿名导入文件1package test01im原创 2021-04-10 19:16:43 · 59 阅读 · 0 评论 -
Go入门(四)接口
文章目录1.需求2.使用接口解决这个问题3.接口的定义什么是接口,只要记住一句,接口是一种类型。接口应用的场景:我不关心接口的类型,我只关心能调用他的方法。1.需求现在有 狗 和 猫 两个结构体,都能叫,如果被 打 这个函数调用了,他们都能叫,如果在函数往里传参的时候,指定是穿进去的什么参数。package mainimport "fmt"type dog struct{}type cat struct{}func (d dog) speak() { fmt.Println(原创 2021-04-09 02:22:45 · 71 阅读 · 0 评论 -
Go 结构体版学生管理系统
文章目录代码:创建结构体的三种方式代码: 建立两个文件,其中一个文件是 test.go 文件,用于存放主函数,另一个是 student.go 文件,单独的把学生管理的功能分离开package mainimport ( "fmt" "os")// 学生管理系统// 菜单函数func showMenu() { fmt.Println("welcomm sms!") fmt.Println(` 1. 查看所有的学生 2. 添加学生 3. 修改学生 4. 删除学生 5. 退原创 2021-04-09 00:23:11 · 119 阅读 · 0 评论 -
Go入门(三)
文章目录一.内置函数一.内置函数内置函数介绍close关闭channel的原创 2021-04-08 23:31:34 · 115 阅读 · 0 评论 -
Go 基本语法 (二)
文章目录一. 切片一. 切片因为数组的长度是固定的,并且数组的长度属于类型的一部分。所以数组有很多的局限性。所以 go 语言中,提出 切片 的概念func main() { var s1 []int // 定义了一个存放 int 类型的切片 var s2 []string //定义了一个存放 string 类型的切片 fmt.Println(s1, s2) // 初始化 s1 = []int{5, 7, 3} fmt.Println(s1) // 长度和容量 fmt.Pr原创 2021-03-28 00:17:49 · 136 阅读 · 1 评论 -
Go入门(一)
文章目录一.到官网下载二.运行三. 基础用法3.1目录结构3.2 变量声明3.3 不同变量的声明一.到官网下载官网https://golang.google.cn/doc/install?download=go1.16.windows-amd64.msi配置 go 语言的运行环境,内容较多,不再累赘。如果使用 vs core 编译,需要安装相应的插件。二.运行输入如下代码package mainimport "fmt"func main() { fmt.Println(原创 2021-03-13 19:06:59 · 205 阅读 · 1 评论