
go
文章平均质量分 66
Zerore
这个作者很懒,什么都没留下…
展开
-
go类型转换、赋值和比较
go语言类型转换、赋值、比较原创 2023-02-13 14:25:08 · 352 阅读 · 0 评论 -
go interface类型
interface原创 2023-01-31 09:34:45 · 149 阅读 · 0 评论 -
go build详解
go build原创 2022-09-22 17:35:42 · 4168 阅读 · 0 评论 -
go项目目录结构
go项目目录管理原创 2022-07-08 14:05:07 · 4882 阅读 · 0 评论 -
python的装饰器和go的filter
go filter 和 python decorator原创 2022-07-05 14:44:32 · 258 阅读 · 0 评论 -
CentOS8.2 配置go开发环境
CentOS8配置go开发环境原创 2022-07-05 11:40:06 · 378 阅读 · 0 评论 -
go error处理
error处理原创 2022-07-01 16:00:52 · 432 阅读 · 0 评论 -
go栈内存管理
栈内存管理原创 2022-06-23 18:17:08 · 299 阅读 · 0 评论 -
Go内存分配
go内存分配原创 2022-06-23 18:16:14 · 948 阅读 · 0 评论 -
Go垃圾回收
垃圾回收 GC原创 2022-06-23 17:57:32 · 642 阅读 · 0 评论 -
go-Context包详解
在go语言中,上下文context.Context用来设置截止日期、同步信号、传递请求相关值得结构体。上下文与Goroutine得关系比较密切,是go语言中独特得设计,在其他编程语言中很少见到类似的概念。context.Context是一个接口,定义了如下四个方法:// A Context carries a deadline, a cancellation signal, and other values across// API boundaries.//// Context's method原创 2022-05-21 17:47:58 · 582 阅读 · 0 评论 -
bytes.buffer详解
Buffer原创 2022-05-15 02:09:45 · 1602 阅读 · 0 评论 -
go-json
将map或struct转为jsonstr:package mainimport ( "encoding/json" "fmt")func main() { mymap := make(map[string]string) mymap["name"] = "zhang" mymap["addr"] = "China" jsonstr, _ := json.Marshal(mymap) // Marsh返回[]byte类型 fmt.Println(string(jsonstr))}原创 2022-05-11 20:57:32 · 183 阅读 · 0 评论 -
Pool池对象-sync.Pool
pool对象的使用原创 2022-05-06 22:31:34 · 1733 阅读 · 0 评论 -
go mod使用
常用命令:go getgo buildgo installgo rungo testgo list6-2-2-1-16个环境变量: GO111MODULE、GOPROXY、GONOPROXY、GOSUBDB、GONOSUMDB、GOPRIVATE两个概念: Go module proxy和Go checksum database两个主要文件: go.mod和go.sum-一个主要管理命令: go mod一个build flag概念: 包(package)和模块(module)原创 2022-04-16 21:09:38 · 2718 阅读 · 0 评论 -
go程序设计语言第十章-包管理和Go工具
如今一个不太大的程序可能会包含10000个函数。程序的作者只需要考虑其中的一部分,是自己设计的可能会少,因为大多数都是其他人所写的,且能够通过包实现重复使用。Go提供了超过100个标准包。Go社区,一个蓬勃发展的生态,用于包设计、分享、重用和发展,已经发布了很多包。本章,我们将会展示如何使用已经存在的包和创建包。Go也自带了go tool工具,一个用于go包管理的复杂巧妙的但易于使用的命令。本书开头,我们已经展示了如何使用go tool来download、build和run程序。本章中,我们将会看到工原创 2021-12-30 15:47:52 · 616 阅读 · 0 评论 -
go程序设计语言第七章-接口类型
The Go Programming Language7 Interfaces7.1 Interfaces as Contracts 接口作为合约之前所讲的都是具体的类型concrete type。一个具体类型规定了它的值的表达形式,暴露内在的操作方法,例如数字的算术运算,slice的index、append、range操作。一个具体的类型通过它的方法也提供了另外的行为。当有一个具体类型的值时,你精确的知道它是什么和它能干什么。还有另外一个类型在go中称为interface类型。它是一个抽象类型ab原创 2021-12-20 18:18:20 · 680 阅读 · 0 评论 -
go程序设计语言第二章-- 程序结构
go程序设计语言第二章-- 程序结构命名与关键字:固定关键字25个break default func interface selectcase defer go map structchan else goto package switchconst fallthrough if range typecontinue for import return var预定义关键字内建常量: true false iota nil内建类型: int int8原创 2021-11-23 15:41:26 · 320 阅读 · 0 评论 -
go-reflect.Select使用
type SelectCase struct {Dir SelectDir // direction of caseChan Value // channel to use (for send or receive)Send Value // value to send (for send)}SelectCase描述了select操作中的一种case。case种类取决于Dir如果Dir是SelectDefault,代表case中的default case,Chan和Send原创 2021-09-17 17:39:32 · 698 阅读 · 0 评论 -
go-channel使用(3)
通过反射的方式执行 select 语句,在处理很多的 case clause,尤其是不定长的 case clause 的时候,非常有用。而且,在后面介绍任务编排的实现时,我也会采用这种方法,所以,我先带你具体学习下 Channel 的反射用法。使用反射操作 Channelselect可以处理chan的send和recv,它们都可以作为case clause。当用select处理不定长case clause时,可以使用reflect.SelectCase方法func main() { ch1 :=原创 2021-09-17 15:49:04 · 218 阅读 · 0 评论 -
go-channel使用
channel的使用qcount:代表 chan 中已经接收但还没被取走的元素的个数。内建函数 len 可以返回这个字段的值。dataqsiz:队列的大小。chan 使用一个循环队列来存放元素,循环队列很适合这种生产者 - 消费者的场景(我很好奇为什么这个字段省略 size 中的 e)。buf:存放元素的循环队列的 buffer。elemtype 和 elemsize:chan 中元素的类型和 size。因为 chan 一旦声明,它的元素类型是固定的,即普通类型或者指针类型,所以元素大小也是固定的。原创 2021-09-16 18:25:32 · 370 阅读 · 0 评论 -
go-channel实现
channel入门channel基础goroutines之间的通信,让它们之间可以进行数据交换。像管道一样,一个goroutine_A向channel中放数据,另一个goroutine_B从channel取数据。(在放和取的过程中,有互斥保证、hapen before保证,具体见unbuffer管道和buffer管道的阻塞现象)定义及类型ch := make(chan int) // unbuffer的chanch := make(chan string) //buffer的chanchan原创 2021-09-16 18:23:21 · 209 阅读 · 0 评论 -
go-mutex的代码注释
func (m *Mutex) Lock() { // 如果mutext的state没有被锁,也没有等待/唤醒的goroutine, 锁处于正常状态,那么获得锁,返回. // 比如锁第一次被goroutine请求时,就是这种状态。或者锁处于空闲的时候,也是这种状态。 if atomic.CompareAndSwapInt32(&m.state, 0, mutexLocked) { return } // 标记本goroutine的等待时间原创 2021-09-16 09:41:12 · 107 阅读 · 0 评论 -
go-sync的疑问
go 的semophor机制,不是内核态的semephor,而是模拟futex,为其他同步原语提供一个sleep和wakeup机制。因此他们总是成对出现的。疑问,在使用mutex时,最后信号量唤醒时有个handoff参数,是有什么作用呢?...原创 2021-09-16 09:39:06 · 85 阅读 · 0 评论 -
go-cond实现
常见的等待通知机制:请实现一个限定容量的队列(queue),当队列满或者空的时候,利用等待 / 通知机制实现阻塞或者唤醒。。在 Go 中,也可以实现一个类似的限定容量的队列,而且实现起来也比较简单,只要用条件变量(Cond)并发原语就可以。Cond 并发原语相对来说不是那么常用,但是在特定的场景使用会事半功倍,比如你需要在唤醒一个或者所有的等待者做一些检查操作的时候。Go 标准库的 Condtype Condfunc NeWCond(l Locker) *Condfunc (c *Cond) Br原创 2021-09-16 09:37:08 · 217 阅读 · 0 评论 -
go-内存模型与指令重排
内存模型:Go如何保证并发读写的顺序?Go 官方文档里专门介绍了 Go 的内存模型,你不要误解这里的内存模型的含义,它并不是指 Go 对象的内存分配、内存回收和内存整理的规范,它描述的是并发环境中多 goroutine 读相同变量的时候,变量的可见性条件。具体点说,就是指,在什么条件下,goroutine 在读取一个变量的值的时候,能够看到其它 goroutine 对这个变量进行的写的结果。由于 CPU 指令重排和多级 Cache 的存在,保证多核访问同一个变量这件事儿变得非常复杂。毕竟,不同 CPU原创 2021-09-16 09:33:55 · 1662 阅读 · 0 评论 -
go-Once实现
go once原创 2021-09-15 10:47:27 · 603 阅读 · 0 评论 -
go-WaitGroup实现
WaitGroup解决的是并发-等待问题:有一个goroutine A在检查点等待一组goroutine 的完成,如果任务组还没有全部完成,则goroutine A阻塞在检查点,知道任务组goroutine全部完成。很多操作系统提供了类似的原语,如Linux的Barrier、Pthread(POSIX 线程)中的 barrier、C++ 中的 std::barrier、Java 中的 CyclicBarrier 和 CountDownLatch 等。基本用法func (wg *WaitGroup)原创 2021-09-14 18:36:56 · 181 阅读 · 0 评论