
Golang
文章平均质量分 92
Leor_Gopher
这个作者很懒,什么都没留下…
展开
-
Go 标准库 sync.Atomic
在 Go 语言标准库中,包将底层硬件提供的原子操作封装成了 Go 的函数。但这些操作只支持几种基本数据类型,因此为了扩大原子操作的适用范围,Go 语言在 1.4 版本的时候向包中添加了一个新的类型。此类型的值相当于一个容器,可以被用来“原子地"存储(Store)和加载(Load)任意类型的值。我在邮件列表中翻到了14年的这段讨论,有用户报告了包在多核机器上(80-core)上的性能问题,认为之所以不能完全利用到多核的特性是因为它里面使用了大量的互斥锁(mutex)...原创 2022-06-04 02:14:24 · 430 阅读 · 0 评论 -
Go 的值传递与引用传递
在说 Go 的 与 之前需要先了解一下 Go 的传递方式。首先,Go 的变量有 与 两种类型,某种意义上来说这两种参数传递的方式都是按值传递。为什么这么说呢?当一个变量被声明为 类型。将其作为参数传递时,传递的是变量的副本。你会发现它的内存地址以及引用内存地址与原变量都是不一样的。如果变量被声明为 类型。传递变量时,会创建一个新的指针,同时这个指针会指向原变量的内存地址。所以这种传递方式可以看作是传递了一份变量引用地址的副本。这就是为什么前面说 Go 的参数传递都是按值传递。...原创 2022-06-04 02:07:25 · 2423 阅读 · 1 评论 -
Golang 中的 Goroutine 调度原理与 Chanel 通信
简介 在 Go 中,每一个并发的活动称为一个 Goroutine 或者 协程。当一个程序启动时,只有一个 Goroutine 来调用 main 函数,称之为 主Goroutine。新的 Goroutine 通过 go 关键字进行创建。例如 go f() // 新建一个调用 f() 的 Goroutine 理论上 Goroutine 与其他编程语言的 线程 或 OS线程 做类似。不过 Go...原创 2019-09-25 14:37:07 · 771 阅读 · 1 评论 -
go modules 包管理工具使用
包管理工具 Go 最初使用 GOPATH 模式管理第三方扩展包。但是,项目使用的第三方包多了,依然使用这种方式一个个下载,则显得太过麻烦。随后在 golang 1.5 引入了 vendor 机制。但是,依然需要将文件下载到本地项目中的 vendor 目录中。所以在 go 1.11 版本后推出了 go module 功能,go module 只需要在本地保存 go.mod 文件以及用作校验的 g...原创 2019-09-25 14:38:26 · 1482 阅读 · 0 评论 -
Golang 中 make 与 new 的区别
make make 内建函数,只能用来作为 slice、map 和 channel 的声明,返回的是类型本身,而不是指针,因为它们本身就是一个引用类型。并且会对其进行一些初始化操作。例如,slice 在创建时,会初始化底层数组,并且初始化 slice 的长度、指针和容量等基础数据。 s := make([]int, 0, 5) // 创建 slice m := make(map[string]...原创 2019-09-25 14:40:16 · 421 阅读 · 0 评论 -
Beego RESTful 小记
什么是 RESTful 这个的话在这里还是不做太多赘述,留等以后再开一篇关于 RESTful 的博客。这里只简单的说明。 RESTful 可以理解为一套接口规范,以资源为核心的一套规范。比如"用户信息"就可以看成是一个资源,针对"用户信息"这个资源就有相应的CURD操作。对应HTTP的Post,Put,Get,Delete请求。 HTTP 请求方法与CURD的对应关系 POST : 新增...原创 2019-09-25 14:47:24 · 747 阅读 · 0 评论