-
可缓存的 Go语言通路
所属栏目:[语言] 日期:2023-07-01 热度:6201
Go语言中有缓冲的通道(buffered channel)是一种在被接收前能存储一个或者多个值的通道。这种类型的通道并不强制要求 goroutine 之间必须同时完成发送和接收。通道会阻塞发送和接收动作的条件也会不同。只有在通道中[详细]
-
Go语言无缓冲区的传输通道
所属栏目:[语言] 日期:2023-07-01 热度:4958
Go语言中无缓冲的通道(unbuffered channel)是指在接收前没有能力保存任何值的通道。这种类型的通道要求发送 goroutine 和接收 goroutine 同时准备好,才能完成发送和接收操作。
如果两个 goroutine 没有同时准备[详细] -
Go语言单向通道在单向通道中的一种实现方式
所属栏目:[语言] 日期:2023-07-01 热度:7220
Go语言的类型系统提供了单方向的 channel 类型,顾名思义,单向 channel 就是只能用于写入或者只能用于读取数据。当然 channel 本身必然是同时支持读写的,否则根本没法用。
假如一个 channel 真的只能读取数据,[详细] -
Go语言通道(chan)——goroutine之间通讯渠道
所属栏目:[语言] 日期:2023-07-01 热度:7724
如果说 goroutine 是 Go语言程序的并发体的话,那么 channels 就是它们之间的通信机制。一个 channels 是一个通信机制,它可以让一个 goroutine 通过它给另一个 goroutine 发送值信息。每个 channel 都有一个特殊的类[详细]
-
goroutine与coroutine的区别
所属栏目:[语言] 日期:2023-07-01 热度:2784
C#、Lua、Python 语言都支持 coroutine 特性。coroutine 与 goroutine 在名字上类似,都可以将函数或者语句在独立的环境中运行,但是它们之间有两点不同:
goroutine 可能发生并行执行;
但 coroutine 始终顺序执行[详细] -
并发和并行的不同
所属栏目:[语言] 日期:2023-07-01 热度:7760
在讲解并发概念时,总会涉及另外一个概念并行。下面让我们来了解并发和并行之间的区别。
并发(concurrency):把任务在不同的时间点交给处理器进行处理。在同一时间点,任务并不会同时运行。
并行(parallelism[详细] -
Go语言 GoMAXPROCS(对并发运行的性能进行调整)
所属栏目:[语言] 日期:2023-07-01 热度:8187
在 Go语言程序运行时(runtime)实现了一个小型的任务调度器。这套调度器的工作原理类似于操作系统调度线程,Go 程序调度器可以高效地将 CPU 资源分配给每一个任务。传统逻辑中,开发者需要维护线程池中线程与 CPU 核[详细]
-
Go语言竞争状态概述
所属栏目:[语言] 日期:2023-07-01 热度:9450
有并发,就有资源竞争,如果两个或者多个 goroutine 在没有相互同步的情况下,访问某个共享的资源,比如同时对该资源进行读写时,就会处于相互竞争的状态,这就是并发中的资源竞争。
并发本身并不复杂,但是因为有[详细] -
可实现并发通信的 Go语言
所属栏目:[语言] 日期:2023-07-01 热度:7228
通过上一节《Go语言goroutine》的学习,关键字 go 的引入使得在Go语言中并发编程变得简单而优雅,但我们同时也应该意识到并发编程的原生复杂性,并时刻对并发中容易出现的问题保持警惕。
事实上,不管是什么平台,[详细] -
轻量级线程的 Go语言
所属栏目:[语言] 日期:2023-07-01 热度:8922
在编写 Socket 网络程序时,需要提前准备一个线程池为每一个 Socket 的收发包分配一个线程。开发人员需要在线程数量和 CPU 数量间建立一个对应关系,以保证每个任务能及时地被分配到 CPU 上进行处理,同时避免多个任[详细]
-
Go语言并发概览 (并发的作用)
所属栏目:[语言] 日期:2023-06-30 热度:4434
有人把Go语言比作 21 世纪的C语言,第一是因为Go语言设计简单,第二则是因为 21 世纪最重要的就是并发程序设计,而 Go 从语言层面就支持并发。同时实现了自动垃圾回收机制。
Go语言的并发机制运用起来非常简便,在[详细] -
Go语言go mod包依赖管理工具使用说明
所属栏目:[语言] 日期:2023-06-30 热度:4821
最早的时候,Go语言所依赖的所有的第三方库都放在 GOPATH 这个目录下面,这就导致了同一个库只能保存一个版本的代码。如果不同的项目依赖同一个第三方的库的不同版本,应该怎么解决?
go module 是Go语言从 1.11 [详细] -
Go语言flag包:命令行参数剖析
所属栏目:[语言] 日期:2023-06-30 热度:1497
在编写命令行程序(工具、server)时,我们有时需要对命令参数进行解析,各种编程语言一般都会提供解析命令行参数的方法或库,以方便程序员使用。在Go语言中的 flag 包中,提供了命令行参数解析的功能。
下面我们[详细] -
Go语言os包用法概述
所属栏目:[语言] 日期:2023-06-30 热度:1855
Go语言的 os 包中提供了操作系统函数的接口,是一个比较重要的包。顾名思义,os 包的作用主要是在服务器上进行系统的基本操作,如文件操作、目录操作、执行命令、信号与中断、进程、系统状态等等。
os 包中的常用函[详细] -
Go语言time包:时间与日期
所属栏目:[语言] 日期:2023-06-30 热度:6903
时间和日期是我们开发中经常会用到的,Go语言中的 time 包提供了时间显示和测量等所用的函数,本节我们就来介绍一下 time 包的基本用法。
time 包简介
时间一般包含时间值和时区,可以从Go语言中 time 包的源码中看[详细] -
Go语言规则表达式:规则包
所属栏目:[语言] 日期:2023-06-30 热度:918
正则表达式是一种进行模式匹配和文本操纵的复杂而又强大的工具。虽然正则表达式比纯粹的文本匹配效率低,但是它却更灵活,按照它的语法规则,根据需求构造出的正则表达式能够从原始文本中筛选出几乎任何你想要得到的[详细]
-
Go语言大包:对于整数的精度估计
所属栏目:[语言] 日期:2023-06-30 热度:6038
实际开发中,对于超出 int64 或者 uint64 类型的大数进行计算时,如果对精度没有要求,使用 float32 或者 float64 就可以胜任,但如果对精度有严格要求的时候,我们就不能使用浮点数了,因为浮点数在内存中只能被近似[详细]
-
Go语言sync包与锁:限定线程对变量的访问
所属栏目:[语言] 日期:2023-06-30 热度:6139
Go语言中 sync 包里提供了互斥锁 Mutex 和读写锁 RWMutex 用于处理并发过程中可能出现同时两个或多个协程(或线程)读或写同一个变量的情况。
为什么需要锁
锁是 sync 包中的核心,它主要有两个方法,分别是加锁([详细] -
使用其他代码在代码中使用 Go语言导入包
所属栏目:[语言] 日期:2023-06-30 热度:6208
可以在一个 Go语言源文件包声明语句之后,其它非导入声明语句之前,包含零到多个导入包声明语句。每个导入声明可以单独指定一个导入路径,也可以通过圆括号同时导入多个导入路径。要引用其他包的标识符,可以使用 im[详细]
-
Go语言引出包中的标识符——让外部访问包的类型和值
所属栏目:[语言] 日期:2023-06-30 热度:8680
在 Go语言中,如果想在一个包里引用另外一个包里的标识符(如类型、变量、常量等)时,必须首先将被引用的标识符导出,将要导出的标识符的首字母大写就可以让引用者可以访问这些标识符了。
导出包内标识符
下面代码[详细] -
Go语言package(构建包)
所属栏目:[语言] 日期:2023-06-29 热度:628
包(package)是多个 Go 源码的集合,是一种高级的代码复用方案,像 fmt、os、io 等这样具有常用功能的内置包在 Go语言中有 150 个以上,它们被称为标准库,大部分(一些底层的除外)内置于 Go 本身。
包要求在同[详细] -
自定义 go语言程序包
所属栏目:[语言] 日期:2023-06-29 热度:9355
包是Go语言中代码组成和代码编译的主要方式。关于包的基本信息我们已经在前面介绍过了,本节我们主要来介绍一下如何自定义一个包并使用它。
到目前为止,我们所使用的例子都是以一个包的形式存在的,比如 main 包[详细] -
Go语言常用内置包概述
所属栏目:[语言] 日期:2023-06-29 热度:2936
标准的Go语言代码库中包含了大量的包,并且在安装 Go 的时候多数会自动安装到系统中。我们可以在 $GOROOT/src/pkg 目录中查看这些包。下面简单介绍一些我们开发中常用的包。
1) fmt
fmt 包实现了格式化的标准输入输[详细] -
Go语言GOPATH分析(Go语言工作目录)
所属栏目:[语言] 日期:2023-06-29 热度:3211
GOPATH 是 Go语言中使用的一个环境变量,它使用绝对路径提供项目的工作目录。
工作目录是一个工程开发的相对参考目录,好比当你要在公司编写一套服务器代码,你的工位所包含的桌面、计算机及椅子就是你的工作区。[详细] -
Go语言封装简介和实现细节
所属栏目:[语言] 日期:2023-06-29 热度:9593
在Go语言中封装就是把抽象出来的字段和对字段的操作封装在一起,数据被保护在内部,程序的其它包只能通过被授权的方法,才能对字段进行操作。
封装的好处:
隐藏实现细节;
可以对数据进行验证,保证数据安全合[详细]
