三分钟掌握Go mod常用与高级操作

使用go module之后,go get 拉取依赖的方式就发生了变化下载项目依赖go get ./...拉取最新的版本(优先择取 taggo get golang.org/x/text@lates拉取 master 分支的最新 commigo get golang.org/x/text@maste拉取 tag 为 v0.3.2 的 commigo get golang.org/x/text@v0.3.拉取 hash 为 342b231 的 commit,最终会被转换为 v0.3.2go get golang.org/x/text@342b2指定版本拉取,拉取v3版本go get github.com/smartwalle/alipay/v Read More

Golang 调度器 GMP 原理与调度全分析

该文章主要详细具体的介绍 Goroutine 调度器过程及原理,可以对 Go 调度器的详细调度过程有一个清晰的理解,花 费 4 天时间作了 30 + 张图 (推荐收藏),包括如下几个章节。我们知道,一切的软件都是跑在操作系统上,真正用来干活 (计算) 的是 CPU。早期的操作系统每个程序就是一个进程,知道一个程序运行完,才能进行下一个进程,就是 “单进程时代” Read More

GO 垃圾回收机制

垃圾回收(Garbage Collection,简称GC)是编程语言中提供的内存管理功能。在传统的系统级编程语言(主要指C/C++)中,程序员定义了一个变量,就是在内存中开辟了一段相应的空间来存值。由于内存是有限的,所以当程序不再需要使用某个变量的时候,就需要销毁该对象并释放其所占用的内存资源,好重新利用这段空间。在C/C++中,释放无用变量内存空间的事情需要由程序员自己来处理。就是说当程序员认为变量没用了,就手动地释放其占用的内存。但是这样显然非常繁琐,如果有所遗漏,就可能造成资源浪费甚至内存泄露。当软件系统比较复杂,变量多的时候程序员往往就忘记释放内存或者在不该释放的时候释放内存了。这对于程序开发人员是一个比较头痛的问题。为了解决这个问题,后来开发出来的几乎所有新语言(java,python,php等等)都引入了语言层面的自动内存管理 – 也就是语言的使用者只用关注内存的申请而不必关心... Read More

Using Go Module

IntroductioThis post is part 1 in a series.Part 1 — Using Go Modules(this post)Part 2 —Migrating To Go ModulesPart 3 —Publishing Go ModulesPart 4 —Go Modules: v2 and BeyonGo 1.11 and 1.12 include preliminarysupport for modules, Go’snew dependency management systemthat makes dependency version information explicit and easier to manage. This blog post is an introduction to the basic operations nee... Read More

convert json to map/struct in golang

Go offers built-in support for JSON encoding and decoding, including to and from built-in and custom data types.We’ll use these two structs to demonstrate encoding and decoding of custom types below.Only exported fields will be encoded/decoded in JSON. Fields must start with capital letters to be exported.First we’ll look at encoding basic data types to JSON strings. Here are some examples for ato... Read More

使用Cgo的一点总结

今天想给一个C库写一个Golang binding,就查了一下cgo的使用,也遇到了一些坑。cgo的基本使用想在Go代码中使用C语言必须在代码开头注释中写,然后再紧接着的下一行写import "C",这样就算是导入完成了。这个”C”不是一个真正的包,而是一个类似于命名空间的东西,所有能调用的C的变量、函数都包含在里面。举个最简单的例子package mai// #include <stdi// #include <stdli/void print(char *str) printf("%s\n", str);*import "C"import "unsafe"func main() s := "hello"cs := C.CString(sdefer C.free(unsafe.Pointer(cs)C.print(cs这个例子展示了cgo的基本使用方法。... Read More

Golang并发编程中的同步(sync)与通信(channel)

Golang中实现并发非常简单,只需在需要并发的函数前面添加关键字"go",但是如何处理go并发机制中不同goroutine之间的同步与通信,golang 中提供了sync包和channel机制来解决这一问题。Synsync 包提供了互斥锁这类的基本的同步原语。除 Once 和 WaitGroup 之外的类型大多用于底层库的例程。更高级的同步操作通过信道与通信进行。[code lang="c"type Confunc NewCond(l Locker) *Confunc (c *Cond) Broadcast(func (c *Cond) Signal(func (c *Cond) Wait(type Locketype Mutefunc (m *Mutex) Lock(func (m *Mutex) Unlock(type Oncfunc (o *Once) Do(f func()... Read More

GO语言实现的多人WEB聊天室

前段时间的工作,大部分都在“热门微博推荐流”的性能优化上。前期通过源码分析对源码的逻辑进行了优化,其中可优化的地方大多都是落在了Redis的多次调用、外部接口的调用以及自身过多的IO操作。近期,提出利用GO语言做一层RPC服务,将较数据层进行封装。所以,为了尽快熟悉并上手GO,先写个小程序熟悉熟悉程序名称:聊天室源码地址:http://github.com/genialx/gurin截图程序中固然存在不合理的地方,仅供参考文章来源:胡旭个人博客 => 【原】GO语言实现的多人WEB聊天室转载请注明出处,违者必究 Read More

我用 Go 语言做了一个红白机模拟器

最近我编写了一个 FC 模拟器。制作这样一个模拟器主要是出于兴趣以及为了从中学习 FC 的工作原理。在这个过程中我学到了很多有趣的知识,于是写下这篇文章同诸位分享我所学到的内容。由于相关的文档已经有很多了,所以这里我只打算讲述一些有趣的特性。请注意,接下来都将是些技术方面的内容。图1 我的模拟器可以将画面录制成 GIF。这是我正在玩《大金刚》(Donkey Kong)的画面。CPFC 使用 MOS 6502(主频1.79MHz)作为其CPU。6502 是一枚诞生于 1975 年(距今已有 40 年之久了)的 8位微处理器。在当时这款芯片非常流行,不仅应用于 FC,还被广泛应用于雅达利 2600 & 800、Apple I & II、Commodore 64、VIC-20、BBC Micro等机器上。事实上,直到今天6502的修订版(65C02)还依然在生产。 6502 的... Read More