概述 Go并发模型独树一帜,简洁、高效。Go语言最小执行单位称为协程(goroutine),运行时可以创建成千万上个协程,这在Java、C等线程模型中是不可想象的,并发模型是Go的招牌能力之一。很多文章描述协程是轻量级的线程,并不准确,两者在底层有本质区别。线程是由操作系统维护,以Linux为例,系统调用创建线程,并由操作系统调度执行,在内核空间管理、与进程共享PCB对象、共享堆空间、独立调用栈和寄存器,是操作系统最小的调度对象,软中断触发操作系统切换调度。协程是由Go运行时维护,与操作系统线程不是对等关系,多个协程简共享堆栈空间,在用户空间维护,由Go运行时自行调度。不依赖系统中断可以做了非...

  5vlFAmwLbLBu   2023年11月20日   32   0   0 Go

概述 并发编程是利用多核心能力,提升程序性能,而多线程之间需要相互协作、共享资源、线程安全等。任何并发模型都要解决线程间通讯问题,毫不夸张的说线程通讯是并发编程的主要问题。go使用著名的CSP(CommunicatingSequentialProcess,通讯顺序进程)并发模型,从设计之初Go语言就注重如何在编程语言层级上设计一个简洁安全高效的抽象模型,让程序员专注于分解问题和组合方案,而且不用被线程管理和信号互斥这些繁琐的操作分散精力。channel是线程简通讯的具体实现之一,本质就是一个线程安全的FIFO阻塞队列(先进先出),向队列中写入数据,在另一个线程从队列读取数据。很多语言都有类似实...

  5vlFAmwLbLBu   2023年11月20日   34   0   0 Go

概述 在强类型变成语言中,类型是确定不可变,如函数入参是确定类型、链表元素是确定类型,这极大限制了函数功能。也有些解决方案,为每种类型都实现一版函数,会导致大量重复代码;使用类型转换,使用特殊形参(如Object、any),在函数内部判断并转换类型后再执行逻辑,导致大量类型转换的代码,结构混乱,Java未支持泛型之前就使用这个套路。最优解决方案是泛型,即类型参数化,编写函数暂时不确定类型,使用占位符代替,调用时候类型也是通过参数传递进去,替换占位符。主流强类型语言都支持泛型,Java、C、C等。 千呼万唤始出来,1.18版本正式增加泛型支持,但是体感貌似一般,使用场景并没有那么广泛,特别是泛型...

  5vlFAmwLbLBu   2023年11月12日   50   0   0 Go

有些不可思议,简洁、优雅的go语言依赖管理如此混乱,发布多年也没有可靠的依赖管理机制,官方先后推出了多种依赖管理机制gopath、vendor、dep等,没有一个顺手,直到在Go1.11推出gomod才有所缓解,也谈不上优秀,相比maven弱爆了。 主流语言都有官方依赖包站点,如maven、pip、npm等。奇葩的是go没有官方依赖包站点,第三方包可以使用任意开源站点发布,没有官方站点导致诸多问题,如下载地址,版本管理、包说明文档等。没有统一下载地址,大聪明给出的方案包名就是包的下载地址,当然全球最大的开源平台是github,大量包都发布在github.com站点,很多第三方包名是git...

  5vlFAmwLbLBu   2023年11月02日   38   0   0 Go

一、概述 接口是面向对象编程的重要概念,接口是对行为的抽象和概括,在主流面向对象语言Java、C,接口和类之间有明确关系,称为“实现接口”。这种关系一般会以“类派生图”的方式进行,经常可以看到大型软件极为复杂的派生树,随着系统的功能不断增加,这棵“派生树”会变得越来越复杂。 Go语言接口模型非常特别,就目前观察是独创。go接口设计是非侵入式,只要类型方法是接口方法的超集,那么就认为类型实现了接口,两者之间不需要显示关联,当然也没有implements关键字,称为隐式实现。相比Java、C主流面向对象语言需要显示实现接口,go的方式更加灵活、松散、耦合更低,当然也更加隐晦、代码可读性降低(当然...

  5vlFAmwLbLBu   2023年11月02日   52   0   0 Go

概述 方法是面向对象编程(OOP)的一个特性,在C/Java语言中方法是类函数,go做为函数式编程语言,通过特有技能支持相似的功能,所以说go也支持面向对象编程特性。 go方法本质也是函数,相比普通函数稍有区别,方法必须与具体类型绑定,且无法独立运行,只能通过类型实例执行,函数是一等公民,方法是二等公民。方法很像面向对象的类方法,但又有区别,方法更加松散,耦合性更低。类方法是定义在对象内部,go方法更像是一种属性扩展,在不修改类型定义的情况下可扩展方法,比如可为外部引入的结构体增加方法,这在Java、C等面向对象语言是不允许的。   基本使用 方法可以绑定到任意类型,但是实际情况总...

  5vlFAmwLbLBu   2023年11月02日   68   0   0 Go

概述 在任何语言中函数都是极其重要的内容,业务功能都是由一个或多个函数组合完成。go语言是函数式编程语言,函数是一等公民,可以被传递、有函数类型,go语言有三种类型的函数,普通函数、匿名函数(Lambda函数)、方法函数。go语言函数有独特属性,可以有多个返回值,需要使用多个变量接收、函数也是一种类型,函数签名是函数类型、函数不能被重载   基本使用 声明函数时必须包含参数类型、返回值类型。单个返回值可省略括号 funsum(xint,yint)int{ returnx+y } 调用函数 n:=sum(10,20)//30   两个返回值,多个返回值必须使用括号。...

  5vlFAmwLbLBu   2023年11月02日   60   0   0 Go
关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~