Go语言并发模型 G源码分析

Go 的线程实现模型,有三个核心的元素 M、P、G,它们共同支撑起了这个线程模型的框架。其中,G 是 goroutine 的缩写,通常称为 “协程”。关于协程、线程和进程三者的异同,可以参照 “进程、线程和协程的区别”。每一个 Goroutine 在程序运行期间,都会对应分配一个 g 结构体对象。g 中存储着 Goroutine 的运行堆栈、状态以及任务函数,g 结构的定义位于 src/runtime/runtime2.go 文件中。g 对象可以重复使用,当一个 goroutine 退出时,g ...阅读全文

Go语言中文网 2021-11-09 15:50:10 wangshizebin

Go实战 | 在 Go 项目中基于本地内存缓存的实现及应用

大家好,我是Go学堂的渔夫子。今天给大家介绍一下在Go项目中在数据量小、读取频繁的场景中如何实现基于本地内存缓存的方法以提高系统性能。 对于缓存,大家都不陌生。百度百科的定义是这样的: > 缓存是指可以进行高速数据交换的存储器,它先于内存与CPU交换数据,因此速率很快。 由此可知,缓存是用来提高数据交换速度的。我们今天要讲的缓存不是CPU中的缓存,而是在应用程序中对数据库的缓存。应用程序先于数据库,从缓存中读取数据,以降低数据库的压力,提高应用程序的读取性能。 ...阅读全文

Go语言中文网 2021-11-09 07:24:41 yudotyang

golang面试题005

# Go Runtime ## 1. Goroutine定义 Goroutine是一个与其他goroutines 并行运行在同一地址空间的go函数或方法 一个运行的程序由于一个或更多个goroutine组成.它与线程,协程,进程 等不同 他是一个goroutine - Rob Pike Goroutines 在同一个用户地址空间里并行独立执行 functions,channels 则用于 Goroutines间的通信和同步访问控制. ## 2. GMP ...阅读全文

Go语言中文网 2021-11-07 23:58:32 victorfengming

golang面试题004

# Golang并发编程 ## 1. Mutex几种状态 1、[Mutex](https://studygolang.com/articles/19370) 几种状态 ⚫ mutexLocked — 表示互斥锁的锁定状态; ⚫ mutexWoken — 表示从正常模式被从唤醒; ⚫ mutexStarving — 当前的互斥锁进入饥饿状态; ⚫ waitersCount — 当前互斥锁上等待的 Goroutine 个数; ## 2. Mutex正常模式和饥饿模式...阅读全文

Go语言中文网 2021-11-07 19:29:42 victorfengming

golang面试题003

## 21, Golang Slice 的底层实现 >切片是基于数组实现的,他的底层是数组, 他自己本身非常小,可以理解为对**底层数组的抽象** >因为基于 数组实现,所以他的底层的 **内存是连续非配的**, 效率非常高, > 还可以通过**索引**获得数据, 可以**迭代以及垃圾回收优化** > >切片本身并不是动态数组或者数组指针.它内部实现的数据结构通过指针引用底层数组, >设定相关属性将数据读写操作限定在指定的区域内.切片本身是一个只读对象,其中工...阅读全文

Go语言中文网 2021-11-07 01:51:42 victorfengming

golang面试题002

## 11. Go语言中cap函数可以作用于哪些内容? cap()函数返回的是数组切片分配的空间大小。/ [ref0](https://zhuanlan.zhihu.com/p/261783653) [ref1](https://studygolang.com/articles/4561) - array(数组) - slice(切片) - channel(通道) ## 12, go convey 是什么? 一般用来做什么? [studygolang-...阅读全文

Go语言中文网 2021-11-07 01:33:27 victorfengming

golang面试题001

## 1. Golang语言的优势 1. 不同于研发类的编程语言,目的驱动的go让go程序员更加的轻松在使用的时候 2. golang 的 先天并发性能优势 3. golang 的 语法 格式化 代码 让程序的易读性更好 4. golang 在处理内存回收的方式 相比 java和python效率更加的搞笑 --- ## 2. Golang的数据类型 - Boolean - Numeric - Array - Struct - Pointer - M...阅读全文

Go语言中文网 2021-11-07 00:53:37 victorfengming

go自学记录——小型日志系统(基于go基础)

一、系统实现功能:文件读取 正则匹配,规范化部分数据 录入数据库 简单输出到web端二、代码部分:​简单架构代码部分:package main //系统主体部分 import ( "bufio" "fmt" "io" "log" "net/http" "net/url" "os" "regexp" "strconv" "strings" "time" "github.com/gin-gonic/gin" _ "github.com/...阅读全文

Go语言中文网 2021-11-06 19:44:59 VacancyS

Go面试题(二):聊聊Go语言中的闭包理解

**大家好,我是小道哥。** 今天为大家讲解的面试专题是: **闭包**。 ## 定义 闭包在计算机科学中的定义是:**在函数内部引用了函数内部变量的函数**。 看完定义后,我陷入了沉思...确实,如果之前没有接触过闭包或者对闭包不理解的话,这个定义着实有点让人上头。 下面让我们先看几个示例,在了解闭包的实际应用后,再去理解这个定义,就不会那么晦涩难懂了。 ## 示例 Go 语言是通过匿名函数实现闭包的。 ```golang func incre...阅读全文

Go语言中文网 2021-11-06 18:31:34 15001004756

go 归并排序

# go 归并排序 归并排序也是分治的一种思路。 1. 将数组分为有序的两部分 2. 将有序的两个子数组合并为一个有序数组 ## code ```go package main import "fmt" func main () { numbers := []int{5,1,9,2,6,3,9,4,1,6,3,7} fmt.Printf("before arr is: %v\n", numbers) res := mergeSor...阅读全文

Go语言中文网 2021-11-04 22:35:17 letterbeezps

go 图的深度遍历 leetcode 200

# go 图的深度遍历 leetcode 200 [leetcode 200岛屿数量](https://leetcode-cn.com/problems/number-of-islands/) ## 使用dfs遍历图,要注意两点 1. dfs要有结束的出口 2. 要找到当前结点的所有子节点 其他的优化就是各种减枝 ## code 连通图,将矩阵中的每一个点都看作图的一个节点,只有两个节点的value相同且相邻,这两个节点才是相连的 ```go var row = 0...阅读全文

Go语言中文网 2021-11-03 01:46:33 letterbeezps

Go 1.17泛型尝鲜

## 简介 Go不支持泛型,但是对泛型呼声一直存在,所以Go也一直在努力支持,这次发布的1.17实际上就已经包含了泛型的功能,但是默认是不开启,需要增加:**-G=3**参数来开启:**go run -gcflags=-G=3 main.go** Go的泛型有以下应用场景 ## 例子 ### 泛化形参数组 定义一个函数helloSlice,接收切片参数s,元素类型为**任意类型T** 代码: ```go package main import ...阅读全文

Go语言中文网 2021-11-02 23:26:30 uuid

Go 日常开发常备第三方库和工具

![](https://tva1.sinaimg.cn/large/008i3skNly1gvyvycad0ej30rs0rsta4.jpg) 不知不觉写 `Go` 已经快一年了,上线了大大小小好几个项目;心态也经历了几轮变化。 因为我个人大概前五年时间写的是 `Java` ,中途写过一年多的 `Python`,所以刚接触到 Go 时的感觉如下图: ![](https://tva1.sinaimg.cn/large/008i3skNly1gvywcqamm1j30ng0l6did....阅读全文

Go语言中文网 2021-11-02 11:26:56 crossoverJie

golang预定义类型

表格内类型都是“预定义类型”也叫“简单类型”。 | 类型名称 | 类型 |说明| | -------- | -------- |-------- | | 布尔 | bool | | | 字符串 | string | | | 整型 | int,int8,int16,int32,int64<br>uint,uint8,uint16,uint32,uint64<br>uintptr| | | 浮点 | float32<br>float64 | | |...阅读全文

Go语言中文网 2021-11-02 10:47:04 13641329565