## 关键词 [vue](https://cn.vuejs.org/v2/guide/) [iview](https://www.iviewui.com/) [vue-qr](https://github.com/Binaryify/vue-qr) ## 完整源码 [点击进入github仓库](https://github.com/KenmyZhang/qrcode)
go golang 判断base64数据 获取随机字符串 截取字符串 先少写点,占个坑,以后接着加。 1,获取指定长度随机字符串 func RandomDigits(length int) string { return randomString(length, []byte(Digits)) } func randomString(length int, base []byte) string { bytes := make([]byte, length) maxIndex := len(base) for i := 0; i < length; i++ { index := rand.Intn(maxIndex) bytes[i] = byte(base[index]) } return...阅读全文
## Jetbrains 系列产品2019.2.*最新破解激活方法 最近jetbrains产品激活码被封的厉害。某宝买来的码现在都已用不了,卖家已不再更新新激活码!说是卖家在 **服刑** ???我估计是卖家跑路了,不会再继续更新激活码了!无意中发现网上有人免费提供了一个本地注册的破解文件, 下载地址 https://sn9.us/file/259249-417852471  ### 下面以golang的IDE举例来学习如何本地文件注册ide #### 一、先从...阅读全文
随机生成验证码 /** * size 随机码的位数 * kind 0 // 纯数字 1 // 小写字母 2 // 大写字母 3 // 数字、大小写字母 */ func krand(size int, kind int) []byte { ikind, kinds, result := kind, [][]int{[]int{10, 48}, []int{26, 97}, []int{26, 65}}, make([]byte, size) is_all := kind > 2 || kind < 0 rand.Seed(time.Now().UnixNano()) for i := 0; i < size; i++ { if is_all { // random ikind ikind = ...阅读全文
安装Go语言,建议通过源码安装。通过源码安装Go,一般只需要安装一个GCC编译器就可以了。(Windows下是安装MinGW)。该文分析通过源码安装Go语言的过程。一、分析安装脚本在《探究Go中各个目录的功能》一文中提到了几个脚本,以及它们的作用。现在来分析这些脚本都做了些什么。(以linux下为例,Windows对应的脚本类似)1、all.bash1set -e2if [ ! -f make.bash ]; then3 echo 'all.bash must be run from $GOROOT/src' 1>&24 exit 15fi6OLDPATH="$PATH"7. ./make.bash --no-banner8bash run.bash --no-rebuild9PATH="$...阅读全文
# 哈希算法 ** 文章转自go语言中文文档 [http://www.topgoer.com](http://www.topgoer.com/?from=studygolang "文章转自go语言中文文档http://www.topgoer.com") ** ### 使用场景 + 对用户输入的密码进行加密 + 用户登录时对用户的密码进行比对 ### 例子 ```go package main import ( "errors" "fmt" "golang.org/x/crypto/bcrypt" ) func main() { userPassword := "123456" passwordbyte, err := GeneratePassword(userPassword) if err...阅读全文
自定义协议和Golang实现 写在这里一是做一下总结在忘的时候方便查看,二是如果文章有错误请各位大佬喷我哈哈,欢迎指正。如果能帮到别人也挺好的。 协议 所谓协议就是指定一系列规则,这些规则使想要交流的双方或多方可以正常通信交流。如我们说的汉语就是协议,如果不按照汉语规则说话,交流的人就听不懂对方说什么,汉语和英语就是不同的协议,用汉语和只会英语的人交流,人家也听不懂你说啥。在计算机中,入参出参是协议,最简单的服务端rest接口是协议,系统实现一层层的网络协议使计算机可以互相通信。 自定义协议 自定义协议就是在现有协议满足不了我们需求时,在现有协议之上构建的满足我们自己程序的通信需求的协议。目前的操作系统,会把我们应用需要的底层网络协议实现好,这对我们来说是透明的,但是在我们写rest时,是不...阅读全文
mac环境用容器编译go项目源码 背景 个人工作中时不时会需要写点linux下的临时用的工具。可是自己本机是mac环境,要想把工具放到线上运行,需要代码提交到git服务器上,然后再在linux上拉取代码,然后再编译。总觉得步骤有点繁琐。 于是想自己在mac上直接编译成linux可执行文件,然后直接拷贝到服务器上运行。 其实3年前自己就干过这样的事情,不过当时自己采用的方法时搞个ubuntu的docker镜像,在这个镜像的基础上搭建go语言编译环境。 然后用这个镜像启动一个容器来运行编译。可惜就是镜像有点大。如今docker hub上有了官方的golang镜像,我们可以直接使用官方的docker镜像来进行编译。 具体如下: docker pull golang:1.12.6 docker ru...阅读全文
Golang: 思路:简单题。。。 代码如下: func countLargestGroup(n int) int { res:=make([]int,37) for i:=1;i<=n;i++{ res[getSum(i)]++ } sort.Ints(res) temp:=res[len(res)-1] m:=0 for i:=len(res)-1;i>=0;i--{ if res[i]==temp{ m++ } } return m } func getSum(n int) int{ res:=0 for n!=0{ res+=n%10 n=n/10 } return res ...阅读全文
```
// Original key 均为普通字符串
key := []byte(Original)
mac := hmac.New(sha1.New, key)
mac.Write([]byte(SecretKey))
SignTmp := mac.Sum(nil)
fmt.Printf("%x", mac.Sum(nil)) // 正常打印 cb679a19c10ea9153da5281e88fb34fa145b3174
```
如上,然后我尝试将其转换为字符串
```
tmp := []byte(SignTmp[:])
result := string([]byte(tmp[:])) //result变为乱码
```
发现resul...阅读全文
有什么简单点的 GO WEB源码呢,论坛的源码看起来太复杂了 新人看起来...阅读全文
bytom是专注资产领域的公有区块链平台,最近开发者社区基于比原做了一款资产转换平台。我们可以在上面通过自己现有的资产在比原上发行资产。然后达到资产转换的目的。 一. 以太币资产转换成比原上的资产 首先打开bytomswap, 网址:https://www.bytomswap.io然后我们选择我们要交换的资产,我们可以发现支持很多种交换的资产。因为笔者刚好手里有以太币(ETH),所以就用imToken钱包里的以太币(ETH)来做资产交换,然后在比原上发行自己的资产。在接收地址中输入比原钱包的地址。点击Next。(imToken和bycoin都可以在Apple store 非大陆区搜到)然后我们看到下图出现一个ETH的二维码地址,这个地址主要是作为我们转账ETH的二维码地址。通过imToken...阅读全文
查看docker信息(version、info) 查看docker版本$docker version 显示docker系统的信息$docker info 对image的操作(search、pull、images、rmi、history) 检索image$docker search image_name 下载image$docker pull image_name 列出镜像列表; -a, --all=false 显示所有镜像; --no-trunc=false 不要截断输出; -q, --quiet=false 仅显示数字ID$docker images 删除一个或者多个镜像; -f, --force=false 强行; --no-prune=false 不要删除未标记的父级$docker r...阅读全文
整体结构 首先我们要知道,项目结构往往指的是gopath。类似我们java中的classpath。 gopath包含三块内容:src、bin、package,那么他们都是用来干什么的呢? src存放的是我们的源码,即我们编写的go语言程序 bin存放的是编译后的可执行文件 package存放的是编译后生成的文件 src下的结构 src下我们可以创建多个项目 --src --app1 --a --b --c --main.go --app2 --main.go --app3 .... 实例 在src下分别创建a,b,c,d四个文件夹 其中a文件夹下创建文件夹a1,a2 a1下创建a_sub文件夹,同时创建subA.go package a_sub import ( "fmt" ) func S...阅读全文
1.Go语言环境搭建及基础知识 Go语言官方网站(http://golang.org) 代码包文档网站(http://godoc.org) Go语言中文网(http://studygolang.com) Go语言开发包下载路径: go1.6.2.linux-amd64(包含part1和part2两部分,下载后一起解压) http://download.csdn.net/download/u012855229/9560392 http://download.csdn.net/download/u012855229/9560394 go1.6.2.windows-amd64(包含part1和part2两部分,下载后一起解压) http://download.csdn.net/download/u...阅读全文
Go命令教程 (访问密码:kmNYam)Go命令教程build compile packages and dependencies clean remove object files doc show documentation for package or symbol env print Go environment information fix run go tool fix on packages fmt run gofmt on package sources generate generate Go files by processing source get download and install packages and dependencies install comp...阅读全文
网络架构 Docker启动时会在主机上自动创建一个docker0虚拟网桥,它会在挂载其上的接口之间进行网络转发,如下图所示: Docker网络 同时,Docker随机分配一个本地未被占用的私有网段中的一个地址给docker0接口。比如典型的172.17.42.1,掩码为255.255.255.0。此后启动的容器内的网口也会自动分配一个同一网段(172.17.0.0/16)的地址。 当创建一个Docker容器的时候,同时会创建一个veth pair接口(veth pair,是一个成对的端口,所有从这对端口一 端进入的数据包都将从另一端出来,反之也是一样)。 这对veth pair一端放在容器内,名称为eth0,另一端在本地并被挂载到docker0网桥,名称以veth开头(如上图所示)。 通过这...阅读全文
func copy(dst, src []Type) int
如果dst == src,我记得C++中memcpy如果二者相同则不执行拷贝,因为拷不拷贝结果都一样。
golang会这样吗?我用下列代码试了一下,结果不管dst和src是否相同,执行效率都一样,t3-t2和t2-t1基本接近。是不是能说明不管怎样,copy都执行了拷贝?哪位大神能提供一下源码?
func TestSomething() {
a_size := uint32(1024 * 1024)
copy_size := uint32(1024 * 1024)
r := rand.New(rand.NewSource(time.Now().UnixNano()))
a := make([]by...阅读全文
os.Stdout.Write(row[0].([]byte)) //往标准输出时写入必须是二进制 fmt.Println(row[0].([]byte)) //输出结果 一个显示正常值 一个显示二进制值 astaxie6 [54] php json 时总会出现乱码 头六个字符 但是在linux上用文本编辑器打开后就没有了 这个有可能跟utf8的bom头有关 没有进一步确...阅读全文
简介 // Package utf8 implements functions and constants to support text encoded in // UTF-8. It includes functions to translate between runes and UTF-8 byte sequences. package utf8 复制代码包utf-8实现的功能和常量用于文章utf8编码,包含runes和utf8字节序列的转换功能.在unicode中,一个中文占两个字节,utf-8中一个中文占三个字节,golang默认的编码是utf-8编码,因此默认一个中文占三个字节,但是golang中的字符串底层实际上是一个byte数组. package main import (...阅读全文
简介 设计错误码 代码实现 常见的错误码 总结 当前部分的代码 简介 不管在什么系统中, 定义错误码都是必不可少的. 错误码可以帮助定义问题, 通常错误码设计为某种模式结构,可以判断出错误的级别, 错误的模块和具体错误信息. 设计错误码 一个良好结构的错误码有助于简化问题描述,当前设计的错误码共有五位, 结构如下: 1 00 01 服务级别 模块 具体错误 第一位是服务级别, 1 为系统错误, 2 为普通错误. 第二三位是模块, 模块不是指 Go 中的模块, 而是指代某个范围, 比如数据库错误, 认证错误. 第四五位是具体错误, 比如数据库错误中的插入错误, 找不到数据等. 定义错误码的时候不光有 Code 数字, 也会有对应的文本信息, 通常, 文本分为两类,一类是给用户看的, 另一类是用...阅读全文
首先说一下go中的字符串类型:字符串就是一串固定长度的字符连接起来的字符序列。Go的字符串是由单个字节连接起来的。Go语言的字符串的字节使用UTF-8编码标识Unicode文本。Go语言的字符串的字节使用UTF-8编码标识Unicode文本,这样Golang统一使用UTF-8编码,中文乱码问题不会再困扰程序员。字符串一旦赋值了,字符串就不能修改了:在Go中字符串是不可变的。下面介绍字符串的三种遍历方式,根据实际情况选择即可。常规遍历方式: var str = "Hello world!" for i := 0; i < len(str); i++ { fmt.Printf("str[%d]=%c\n", i, str[i]) }运行结果:str[0]=Hstr[1]=estr[2]=lstr...阅读全文
问个问题 GO的Gopath
D:\GoPath 存放一些 模板template CSS JS 文件夹 信息等
D:\GoPath\src\XX 存放源码等
这种针对单个WEB项目比较合适
如果还有个项目要开发,这样 会造成 模板CSS JS和 src源码里比较混乱冲突
...阅读全文
载自:https://halfrost.com/go_command/引言Go 语言这两年在语言排行榜上的上升势头非常猛,Go 语言虽然是静态编译型语言,但是它却拥有脚本化的语法,支持多种编程范式(函数式和面向对象)。Go 语言最最吸引人的地方可能是其原生支持并发编程(语言层面原生支持和通过第三方库支持是有很大区别的)。Go 语言的对网络通信、并发和并行编程的支持度极高,从而可以更好地利用大量的分布式和多核的计算机。开发者可以通过 goroutine 这种轻量级线程的概念来实现这个目标,然后通过 channel 来实现各个 goroutine 之间的通信。他们实现了分段栈增长和 goroutine 在线程基础上多路复用技术的自动化。2017年7月 TIOBE 语言排行榜 Go 首次进入前十。...阅读全文
boltdb 启动和初始化 根据前面的简述,boltdb只使用单个文件进行持久化,在boltdb启动时,会先打开对应的 持久化文件,然后根据是否是只读模式来获取该文件的文件锁。当不是只读模式时,boltdb 会采用排他文件锁来保证只有一个进程能够操作该文件,避免多个进程同时操作,造成数据毁坏。 当持久化文件大小为0时,boltdb会认为该数据库为新创建的,然后对其进行初始化(写入4个初 始page),然后将文件映射到内存空间,最后从映射的内存中读取meta0、meta1数据。 然后从从meta数据中标识的当前freelist页来读取freelist pgid数据,然后freelist根据这些 数据构建free page cache。即用一个map来记录那些page是空闲的。 此时即完成启动和...阅读全文
我的知乎回答,问题是关于如何阅读 Go 源码。地址。胡扯了些自己的想法。 Go 的源码在安装包的 src/ 目录下。怎么看它的源码呢?直接看吧!没人教的情况下,只能自己撸了。当然,这种内容一般也不会有人教。 怎么撸? Go 源码中,应该可分为与语言息息相关的部分,和官方提供的标准库。与语言实现相关的肯定是最难的,不是那么容易理解。可以先主要看标准库,其他的可以先大概了解下。 先把源码目录整体扫一遍,大概看看涉及了哪些模块,然后再挑自己喜欢的部分进行更深一步的学习与研究。建议每个目录都简单写个 hello world,如此的体悟会更深。如果连 hello world 也写不出来,这个模块的源码暂时就没必要研究了,先学好基础吧。毕竟,包的使用不仅与语言相关,还涉及具体场景和实现原理,这都是要学习...阅读全文
## 前言 4 月 22 日,国内某站后端 Go 语言源码在 GitHub 突然被开源。  发布那个 repo 的账号是 22 日当日才注册的。那个 repo 暴露在公共领域大约有 8~9 小时,Star 数超过 9k,后来被 GitHub 站方封禁。如果不是及时被封,那个 repo 必定要上 23 日的 GitHub 热榜。 ## **别以身试法** 敲黑板,先说一下: > 未经作品版权方的许可,(尤其是在公共领域)擅自发布和传播...阅读全文
项目地址:yeqown/go-qrcode同类项目:skip2/go-qrcode 纠错算法和bitset使用了该库,后续可能会考虑自己实现一遍 go-qrcode 示例 link to CODE package main import ( "fmt" qrcode "github.com/yeqown/go-qrcode" ) func main() { qrc, err := qrcode.New("https://github.com/yeqown/go-qrcode") if err != nil { fmt.Printf("could not generate QRCode: %v", err) } // save file if err := qrc.Save("../testd...阅读全文
golang源码探究-strings Contain() func Contains(s, substr string) boolContains()返回一个布尔值,若substr存在于s中,则返回true,不存在则返回false。 // Contains reports whether substr is within s func Contains(s, substr string) bool { return Index(s, substr) >= 0 } Index() 我们再来看Index(),func Index(s, substr string) intIndex()返回substr出现在原始string s 中的 位置,如果s中meiyousubstr,则返回-1 // In...阅读全文
最近在看微服务,跟大佬们请教了下很多微服务的知识,然后看教程自己实践,在此特别感谢0.01km(QQ昵称)大佬的帮助 本节主要是针对与go-micro服务注册的过程中源码阅读的分享, s := micro.NewService( micro.Name("go.micro.srv.user"), micro.Version("latest"), ) s.Init() 这里做了很多事 func newOptions(opts ...Option) Options { opt := Options{ Broker: broker.DefaultBroker, Cmd: cmd.DefaultCmd, Client: client.DefaultClient, Server: server.Defa...阅读全文
1.引出 src/runtime/time.go 中的 startTimer NewTimer 和 NewTicker 分别在 src/time/sleep.go、src/time/tick.go 这两个文件下。这两个函数最主要的区别是NewTimer在初始化runtimeTimer的时候没有初始化period属性。不管是 NewTimer 还是 NewTicker 最终的实现都是调用 startTimer,startTimer 在 src/time/sleep.go 下没有函数体的,它的实现是在 src/runtime/time.go 中的 startTimer,这两者是通过 go:linkname 指令关联的。 2.阅读 src/runtime/time.go 中的 startTimer...阅读全文
gifCaptcha gif 图形验证码 https://github.com/zxbit2011/gifCaptcha 丰富自定义设置 图片大小 多颜色 文字模式 文字数量 干扰强度 快速使用 > go get github.com/zxbit2011/gifCaptcha 示例代码 package main import ( "github.com/zxbit2011/gifCaptcha" "image/color" "image/gif" "net/http" ) var captcha = gifCaptcha.New() func main() { //设置颜色 captcha.SetFrontColor(color.Black, color.RGBA{255, 0, 0, 25...阅读全文
区块链入门教程eth源码分析core-vm源码分析(二),合约创建 Create 会创建一个新的合约。 // Create creates a new contract using code as deployment code.func (evm EVM) Create(caller ContractRef, code []byte, gas uint64, value big.Int) (ret []byte, contractAddr common.Address, leftOverGas uint64, err error) { // Depth check execution. Fail if we're trying to execute above the // limit. ...阅读全文
一个项目把全部代码文件都放在一个package中,这就是扁平项目代码结构(Flat Application Structure). 原文地址 https://mojotv.cn/go/golang-flat-app-structur...阅读全文
本文将讲解Go中字符串相关的知识。 1 编码知识 在讲解String之前,我们先讲解一下编码。因为在讲解string过程中,会用到编码知识。 1.1 字符集 字符集规定了某个文字对应的二进制数字存放方式(编码)以及某串二进制数字代表了哪个文字(解码)的转换关系。比如我们常见的Unicode字符集。相当于定义了一套标准。 1.2 编码 编码字符集:用一个编码值(code point)来表示一个字符在字库中的位置。 字符编码:编码字符集和实际存储数据之间的转换关系。比如我们常见的utf-8编码。相当于标准的一个实现。 1.3 乱码 我们在开发中,经常遇到的一个棘手的问题就是乱码。为什么乱码呢?就是因为编、解码采用的字符编码不一致。就好比同样的一串字符,在英语跟俄语中的含义可能不一样。 2 str...阅读全文
1. go get与go install 可能有同学在刚使用go get的时候会有一个小疑问,就是有些包go get下来的时候,有些包会“下载”一个二进制包在GOPATH/bin目录下,有些又没有。其实这是因为go get这个命令会分两步走,一个是下载源码包,一个是执行go install。所以有些包里面有main包的时候,下载完源码包就可以被go install编译放在GOPATH/bin目录下。来看个小例子。 起先,我的GOPATH/bin目录下没有something.exe,在执行"go get -v -u github.com/TomatoMr/something"之后,$GOPATH/bin目录就有something.exe了。 2. go get与go mod 再来看看go ge...阅读全文
01从事java开发的都知道java有个垃圾回收机制Garbage collection,要准确理解Java的垃圾回收机制,我们可以从:“什么时候”,“对什么东西”,“做了什么事情”这三个方面来分析。01、“什么时候”“什么时候”即是GC触发的条件。GC触发的条件有两种:程序调用System.gc时可以触发;系统自身来决定GC触发的时机。系统判断GC触发的依据:根据Eden区和From Space区的内存大小来决定。当内存大小不足时,则会启动GC线程并停止应用线程。新生代、老年代结构minor gc/full gc,还需要了解Minor GC 金额Full GC 触发条件Minor GC触发条件:当Eden区满时,触发Minor GC。Full GC触发条件:调用System.gc时,系统...阅读全文
参考了几份资料。未查阅源码,故不是非常肯定。 总结几点: new会分配结构空间,并初始化为清空为零,不进一步初始化 new之后需要一个指针来指向这个结构 make会分配结构空间及其附属空间,并完成其间的指针初始化 make返回这个结构空间,不另外分配一个指针 例子new: var p *[]int = new([]int) 或 p := new([]int) 以上分配了一个slice结构,但是结构中的应该指向底层数组的ptr指针为空,故实际不能往这个slice里面存取数据 同时分配了一个指针p,也即(在32位系统中)占4个字节并存放slice结构的地址 例子make: var v []int = make([]int, 0) v := make([]int, 0) 以上分配了一个slice结...阅读全文
LiteIDE简介 go语言开发工具,更新到0.1.5。 实现特征: *) UTF8文件读写 *) GO语法高亮 *) 项目管理 *) 支持.pro项目编译 *) 支持无项目单独文件编译 *) gopromake自动编译工具 *) 可以从编译错误中定位到源码 项目主页: http://code.google.com/p/golangide/ 项目下载: http://code.google.com/p/golangide/downloads/list GO编译器下载: http://code.google.com/p/gomingw/ 操作系统支持: WIN3...阅读全文
golang 链表 简介 golang自身实现了一个双向链表 导入 import "container/list" 定义 // 链表元素 type Element func (e *Element) Next() *Element func (e *Element) Prev() *Element //链表 type List func New() *List func (l *List) Back() *Element func (l *List) Front() *Element func (l *List) Init() *List func (l *List) InsertAfter(v interface{}, mark *Element) *Element func (l *Li...阅读全文
ubuntu可以通过 apt-get install golang 的方式来安装golang开发环境,只是这样安装的是go1.6.2 如果想要安装最新版本的golang,应该怎么办呢? 下载源码 网上搜的流程下载源码都是需要翻墙的,国内镜像安装如下: wget https://www.golangtc.com/static/go/1.9.2/go1.9.2.linux-amd64.tar.gz 解码源码 将源码解压在/usr/bin目录下面 tar zxf go1.9.2.linux-amd64.tar.gz -C /usr/bin 设置环境变量 将go的bin目录加入环境变量 echo "export PATH=/usr/bin/go/bin:$PATH" >> /etc/profile ...阅读全文
源码位置 net/rpc/server.go 数据结构 // Server represents an RPC Server. type Server struct { serviceMap sync.Map // map[string]*service reqLock sync.Mutex // protects freeReq freeReq *Request respLock sync.Mutex // protects freeResp freeResp *Response } // 成员函数 func (server *Server)freeRequest(req *Request) func (server *Server)getRequest() *Request { serv...阅读全文
摘要: 业务实时监控服务 ARMS 很好的提供了这么一个入口,为公司提供了一个实时查询Tengine运行情况的解决方案。在未来,ARMS将很好的和ODPS为公司监控形成互补方案,tengine日志日后可同时投递到ARMS和MaxCompute中: ARMS响应第一时间的多维度报警; MaxCompute来做深层次分析,例如接口的请求数、响应时长等,并有针对性地进行调优。
来自 深圳市小亿网络有限公司 王昕岩
最近公司通过业务实时监控服务 ARMS 成功搭建了基于tengine的日志监控系统。这里简单分享一下使用ARMS用于监控tengine日志的经验。
公司发展至今,现阶段所有接口都使用阿里的tengine作为web容器,类似nginx,在日志中也记录了包括host, ur...阅读全文
前言 前面一篇文章我们介绍了怎么在windows下安装配置GO开发环境。这一篇我们来介绍代码Golang的目录结构、应用编译、自定义包及远程包的引用。 代码目录结构 上一篇末尾我们设置的GOPATH下的src目录就是我们接下来开发程序的主要目录,所有的源码都是放在这个目录下面,一般的做法就是一个目录一个项目。 例如: %GOPATH%/src/mymath 这个目录就代表mymath这个应用包或者可执行应用(根据package是main还是其他来决定,如果是main就是可执行应用,非main就是应用包。) 所以当我们新建应用或者一个代码包时都是在src目录下新建一个文件夹,文件夹名称一般是代码包名称。当然新建多级目录也是可以的,例如在src下面新建了目录%GOPATH%/src/github...阅读全文
各位朋友,这次想跟大家分享一下Go调度器源码阅读相关的知识和经验,网络上已经有很多剖析源码的好文章,所以这篇文章不是又一篇源码剖析文章,注重的不是源码分析分享,而是带给大家一些学习经验,希望大家能更好的阅读和掌握Go调度器的实现。 本文主要分2个部分: 解决如何阅读源码的问题。阅读源码本质是把脑海里已经有的调度设计,看看到底是不是这么实现的,是怎么实现的。 带给你一个探索Go调度器实现的办法。源码都到手了,你可以修改、窥探,通过这种方式解决阅读源码过程中的疑问,验证一些想法。比如:负责调度的是g0,怎么才能schedule()在执行时,当前是g0呢? 如何阅读源码 阅读前提 阅读Go源码前,最好已经掌握Go调度器的设计和原理,如果你还无法回答以下问题: 为什么需要Go调度器? Go调度器与系...阅读全文
阅读go项目源码时,不方便知道interface有哪些struct实现,很不方便。 list-interfaces这个工具,用来分析go项目源码,帮你快速找出interface有哪些struct实现。 list-interfaces使用 list-interfaces --codedir /appdev/gopath/src/github.com/contiv/netplugin \ --gopath /appdev/gopath \ --outputfile /tmp/result 参数说明 --codedir 要分析的代码目录 --gopath GOPATH环境变量目录 --outputfile 分析结果保存到该文件 输出样例: interface item 在文件/appdev/gop...阅读全文
假如你已安装了golang环境,你可以在命令行执行go命令查看相关的Go语言命令: $ go Go is a tool for managing Go source code. Usage: go command [arguments] The commands are: build compile packages and dependencies clean remove object files doc show documentation for package or symbol env print Go environment information bug start a bug report fix run go tool fix on packages fmt run go...阅读全文