ICode9

精准搜索请尝试: 精确搜索
  • Go语言的设计哲学2022-01-16 21:30:16

    所谓编程语言的设计哲学,就是指决定这门语言演化进程的高级原则和依据。 设计哲学之于编程语言,就好比一个人的价值观之于这个人的行为。因此,在真正开始学习 Go 语法和编码之前,我们还需要先来了解一下 Go 语言的设计哲学。 Go 语言的设计哲学总结为五点:简单、显式、组合、并发和面

  • 记一次gorm连接池打满,连接不释放的问题2022-01-14 15:01:42

    概述:使用事务一定要关闭!(心急的可以直接看这句,赶紧去检查下自己的代码)   我们golang项目用的gorm,最近pre测试跑脚本时,总会出现504,某个接口不可用。分析了半天pprof,阻塞数量较多的goroutine,某些时候并不能看到真实问题的所在。   出现504,通过pprof:debug/pprof/goroutine?debu

  • Go语言编程从入门到精通(使用Gotouine解决并发难题)2022-01-14 12:34:41

    Go (或Golang )是Google 在2007 年开发的一种开源编程语言,出自Robert Griesemer 、Rob Pike 和Ken Thompson 之手。2009 年11 月10 日, Google Open Source Blog 向全球发布了这款语言:公告指出Go 的主要目标是“兼具Python 等动态语句的开发速度和C 或C ++等编译型语言的性能与安全性

  • Go语言编程从入门到精通(通道、缓冲通道、阻塞、控制、select)2022-01-14 12:33:59

    Go (或Golang )是Google 在2007 年开发的一种开源编程语言,出自Robert Griesemer 、Rob Pike 和Ken Thompson 之手。2009 年11 月10 日, Google Open Source Blog 向全球发布了这款语言:公告指出Go 的主要目标是“兼具Python 等动态语句的开发速度和C 或C ++等编译型语言的性能与安全性

  • Golang当中同步锁(Mutex,RWMutex)的特点和作用(面试题)2022-01-07 23:58:46

    同步锁的特点: 1.Mutex: 当一个Goroutine(协程)获得了Mutex后,其他Gorouline(协程)就只能进入等待之中,除非该gorouline释放了该Mutex。 2.RWMutex(读写锁): RWMutex在读锁占用的情况下,会阻止写,但不阻止读;RWMutex在写锁占用情况下,会阻止任何其他goroutine(读和写)进来,整个锁相当于由该gorouti

  • Golang-如何优雅的关闭channel?2022-01-06 11:34:59

    如何优雅的关闭channel? channel关闭原则 "如何优雅的关闭channel?",这种问题经常在面试题中出现,究其原因,是因为channel创建容易,但是关闭"不易",原因有以下三点: 关闭时机未知,在不改变channel自身状态的条件下,无法知道他是否已经关闭 不能无脑关闭,如果一个channel已经关闭,重复关闭chan

  • channel 和goroutine2022-01-06 10:04:24

    协程数量 for i:=1;i<len(10);i++ { go func(){ }() } ​ 这里的生成协程数就是10,瞬间同时生成10个goroutine ​ https://geektutu.com/post/hpg-concurrency-control.html channel 缓冲区和无缓冲区 ch := make(chan int ,3) 有缓冲区 ch := make(chan int) 无缓

  • go 开启goroutine并捕获错误2022-01-01 13:05:17

    func CreateGreeter() error { var mu sync.Mutex eg, _ := errgroup.WithContext(context.Background()) var info []biz.Info m := make(map[string]string) userlist := []string{"User0001", "User0002", "User0003", "User0004"

  • 分析一个简单的goroutine资源池2021-12-27 12:33:32

    分析一个简单的goroutine资源池 tunny。 从资源池中获取goroutine并进行处理的逻辑如下: tunny将goroutine处理单元封装为workWrapper,由此可以对goroutine的数目进行限制。 workerWrapper.run()作为一个goroutine,内部负责具体事务的处理。其会将一个workRequest(可以看作是请求处

  • Go语言基础(十二):并发编程2021-12-25 18:33:13

    文章目录 一、前言二、goroutine1、使用goroutine2、启动goroutine示例3、main优雅谢幕 三、goroutine与线程1、可增长的栈2、goroutine调度3、GOMAXPROCS 四、channel1、channel类型2、创建channel3、channel操作(1)发送(2)接收(3)关闭 4、无缓冲的通道5、有缓冲的通道6、for

  • goroutine中再创建一个goroutine2021-12-23 22:06:18

    文章目录 前言代码goroutine原理 前言 今天写代码的时候突发奇想goroutine中是否可以再运行一个goroutine,初步的想法是可以的,因为main函数运行的时候其实是一个主goroutine,在主goroutine里面再运行一个goroutine是没问题的,那么我们一个普通的goroutine运行一个goroutine

  • context包2021-12-21 09:03:25

    在Go1.7发布时,标准库增加了一个 context 包,用来简化对于处理单个请求的多个Goroutine之间与请求域的数据、超时和退出等操作,官方有博文对此做了专门介绍。我们可以用 context 包来重 新实现前面的线程安全退出或超时的控制:

  • 限制goroutine的数量2021-12-20 17:30:55

    1.首先得知道,GOMAXPROCS指的是GMP调度模型中M的数量,一般情况下是和cpu的核数一致,可以显示的调用runtime.GOMAXPROCS来设置为最大的cpu核数,但是如果不调用,自动也会设置为这个值。 所以GOMAXPROCS并不能设置最大并发的goroutine的数量 2. goroutine的数量也不能无限制的变多,因为

  • 387集Go语言核心编程培训视频教材整理 | goroutine和channel(四)2021-12-17 20:32:17

    学习视频来源:《韩顺平Go语言核心编程387集完整版》           

  • Golang context.Context介绍2021-12-16 22:03:12

    近日某公众号连推2篇关于context的文章,图文不符的错误多处,也不适合我理解,因此查看官方文档后总结一篇笔记。 context package - context - pkg.go.dev  type Context interface { Deadline() (deadline time.Time, ok bool) Done() <-chan struct{} Err() error Value(key i

  • 【Golang】高性能编程之超时退出协程2021-12-14 15:33:32

    超时控制在网络编程中是非常常见的,利用 context.WithTimeout和time.After都能够很轻易地实现。 func doBadthing(done chan bool) { time.Sleep(time.Second) done <- true } func timeout(f func(chan bool)) error { done := make(chan bool) go f(done) select { c

  • Go语言之goroutine和通道2021-12-13 16:03:09

    goroutine 在Go里,每一个并发执行的活动称为goroutine。 如果你是一名Java程序员,可以把goroutine比作为线程,但是goroutine和线程在数量上有很大的差别,原因在于Go语言引入了协程的概念,协程相比于线程是一种用户态的线程,协程更加轻量,实用更加经济,因此同样的服务器可以开销的协程数

  • golang之G-P-M模型2021-12-07 10:01:01

    关于 G、P、M 的定义,我们可以参见$GOROOT/src/runtime/runtime2.go这个源文件。G、P、M 这三个结构体定义都是大块儿头,每个结构体定义都包含十几个甚至二、三十个字段。像调度器这样的核心代码向来很复杂,考虑的因素也非常多,代码“耦合”成一坨。不过从复杂的代码中,我们依然可以看

  • Go面试题(五):图解 Golang Channel 的底层原理2021-12-04 10:05:07

    大家好,我是小道哥。 今天给大家带来的面试专题是:Golang Channel channel的底层数据结构 channel是golang中用来实现多个goroutine通信的管道,它的底层是一个叫做hchan的结构体。在go的runtime包下。 数据结构 type hchan struct { //channel分为无缓冲和有缓冲两种。 //对

  • Golang面试题: 3个goroutine交替打印ABC2021-12-03 11:02:01

    文章目录 题目介绍做法一题目扩展 开心一刻        一位小帅哥和靓姑娘在火车上相遇。经过一阵“天南地北,生猛海鲜”之后,小帅哥拿出一副扑克与姑娘对玩:   帅哥:QQK?(谈谈看)   姑娘:Q45?(谈什么)   帅哥:Q21!(谈恋爱)   姑娘:8Q!!(不谈)   $%……!   快到站了,小帅哥不甘心,

  • Go学习例子(五)2021-12-01 11:33:13

    21、Embedding       $ go run embedding.go co={num: 1, str: some name} also num: 1 describe: base with num=1 describer: base with num=1 22、Errors     $ go run errors.go f1 worked: 10 f1 failed: can't work with 42 f2 worked: 10 f2 failed: 42 - can

  • 啊 ♂ Goroutine是个啥2021-11-23 15:34:37

    1. 开篇序言 Concurrency is not parallelism。 并发不等于并行。 --Rob.Pike

  • 十.Go并发编程--channel使用2021-11-23 01:00:08

    一.设计原理 Go 语言中最常见的、也是经常被人提及的设计模式就是: "不要通过共享内存来通信,我们应该使用通信来共享内存" 通过共享内存来通信是直接读取内存的数据,而通过通信来共享内存,是通过发送消息的方式来进行同步。 而通过发送消息来同步的这种方式常见的就是 Go 采用的通

  • 动图图解,怎么让goroutine跑一半就退出?2021-11-21 15:30:50

    光看标题,大家可能不太理解我说的是啥。 我们平时创建一个协程,跑一段逻辑,代码大概长这样。 package main import ( "fmt" "time" ) func Foo() { fmt.Println("打印1") defer fmt.Println("打印2") fmt.Println("打印3") } func main() { go

  • golang2021-11-20 10:33:57

    internal/raceunsafesync:mutex, rwmutex, once, runtime, cond, map, atomic, waitgroup, pool, poolqueue, StringHeader,SliceHeader     import . "fmt",调用时可以省略包名。import _ "fmt",只调用fmt的init函数,无法使用fmt包中的变量和函数import x "fmt",相当于别名。 Wa

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有