Go语言中文网 为您找到相关结果 1019

go panic recover源码解析

panic和recover是golang的两个内置函数。当函数F调用panic,函数F会停止运行,F包裹着的defer函数会全部正常运行,然后返回调用F的函数。如果没有recover,F对于调用方,就像panic。Process继续执行堆栈,直到发生panic的goroutine所有方法返回。panic可以被runtime errors,或者直接调用 panic()函数触发 recover只在defer函数中有效这一部分内容来自Defer, Panic, and Recover翻译 panic例子 func main() { defer println("defer in main") go func() { defer println("defer in goroutine") panic...阅读全文

博文 2019-10-12 20:02:40 bunnyhuangw

兄弟连区块链入门教程以太坊源码分析ethdb源码分析

兄弟连区块链入门教程以太坊源码分析ethdb源码分析,2018年下半年,区块链行业正逐渐褪去发展之初的浮躁、回归理性,表面上看相关人才需求与身价似乎正在回落。但事实上,正是初期泡沫的渐退,让人们更多的关注点放在了区块链真正的技术之上。go-ethereum所有的数据存储在levelDB这个Google开源的KeyValue文件数据库中,整个区块链的所有数据都存储在一个levelDB的数据库中,levelDB支持按照文件大小切分文件的功能,所以我们看到的区块链的数据都是一个一个小文件,其实这些小文件都是一个同一个levelDB实例。这里简单的看下levelDB的go封装代码。levelDB官方网站介绍的特点**特点**:- key和value都是任意长度的字节数组;- entry(即一条K-V...阅读全文

博文 2018-10-23 16:34:49 兄弟连区块链培训

走进Golang之编译器原理

为了学好Golang底层知识装逼,折腾了一下编译器相关知识。下面的内容并不会提升你的生产技能点,但可以提高你的装逼指数。请按需阅读! 本文目录速览: 认识 go build 编译器原理 词法分析 语法分析 语义分析 中间码生成 代码优化 机器码生成 总结 认识 go build 当我们敲下 go build 的时候,我们的写的源码文件究竟经历了哪些事情?最终变成了可执行文件。 这个命令会编译go代码,今天就来一起看看go的编译过程吧! 首先先来认识以下go的代码源文件分类 命令源码文件:简单说就是含有 main 函数的那个文件,通常一个项目一个该文件,我也没想过需要两个命令源文件的项目 测试源码文件:就是我们写的单元测试的代码,都是以 _test.go 结尾 库源码文件:没有上面特征的就是库...阅读全文

博文 2019-11-14 10:04:22 大愚Talk

rune的使用

一、定义 经常在开源库中,能rune关键字,从golang源码中看出,它是int32的别名(-231~231-1),对于byte(-128~127),可表示的字符更多。 二、使用 由于rune可表示的范围更大,所以能处理一切字符,当然也包括中文字符。在平时计算中文字符,可用rune。所以通常在处理中文的时候,会用到。 package main import ( "fmt" "unicode/utf8" ) func main() { var chinese = "我是中国人, I am Chinese" fmt.Println("chinese length", len(chinese)) fmt.Println("chinese word length", len([]rune(chine...阅读全文

博文 2019-06-21 21:32:40 哆啦在这A梦在哪

一文搞定Go语言开发环境的搭建

文章首发自公众号:Go编程时光 《Go编程时光》,一个能带你学习 Go 语言的专栏,同时欢迎搜索我的同名公众号【Go编程时光】(排版精美更适合阅读),第一时间获取Go语言干货。 1. 下载安装 Go语言 下载地址:https://golang.google.cn/dl/ 下载完成后,直接双击 msi 文件进行安装,我习惯将软件安装在我的 E 盘下的 Program Files 目录下 后面就是一路点击 Next 即可,直到出现如下界面,安装完成。 2. 配置 Goland 环境 学习编程语言,使用一个称心的 IDE,可以帮你省去很多麻烦。 开发 Python 项目,我习惯使用 PyCharm,因为已经习惯了 JetBrains 风格的IDE,可以替我省去很多熟悉新IDE的成本,所以这里我照样...阅读全文

博文 2020-03-15 01:33:12 PythonTime

Golang Notes

Go 语言环境安装 下载安装包 https://golang.google.cn/dl/ CentOS安装为例: 1、下载源码包:go1.4.linux-amd64.tar.gz。 2、将下载的源码包解压至 /usr/local目录。 tar -C /usr/local -xzf go1.4.linux-amd64.tar.gz 3、配置GOPATH、GOROOT环境变量: vi /etc/profile添加以下几行在文件末尾 export GOROOT=/usr/local/go export GOPATH=/home/www/go export PATH=$PATH:$GOROOT/bin 保存退出 source /etc/profile立即生效 这个时候输入以下命令就能看到安装配置完成...阅读全文

博文 2018-09-12 11:34:40 ImClive

安卓invalidate()、postInvalidate()、requestLayout()源码分析

最近在撸Golang有点上火了,来整理下源码资料 分析结果基于Audroid API 26 requestLayout()源码分析 假如在一个页面上有个按钮,点击按钮就对一个 view.requestLayout(),这个 view 执行的方法如下: InvalidateTextView------onMeasure InvalidateTextView------onMeasure InvalidateTextView-------layout InvalidateTextView--------onLayout InvalidateTextView----------draw InvalidateTextView------------onDraw view.requestLayout(...阅读全文

博文 2018-08-07 16:34:47 豌豆射手_BiuBiu

FileHeader contains filtered or unexported fields

golang 处理文件上传的时候会用到 http.Request.FormFile() func (r *Request) FormFile(key string) (multipart.File, *multipart.FileHeader, error) 直接查godoc 的文档 FileHeader 是这样描述的 type FileHeader struct { Filename string Header textproto.MIMEHeader Size int64 // contains filtered or unexported fields } 这个注释 contains filtered or unexported fields 是什么?? 查看源码发下,这个文档中少说明...阅读全文

博文 2019-02-20 23:34:43 cc180912

golang源码学习之context

本文不对context的具体用法讲解,仅对源码走读。 context一共分为6类:Background、TODO、WithCancel、WithDeadline、WithTimeout、WithValue,下面依次走读。 数据结构 // context/context.go type Context interface { // 返回deadline和true, ok写死为true Deadline() (deadline time.Time, ok bool) // 用于cancel监听 Done() <-chan struct{} // 返回错误消息 Err() error // 获取WithValue存储的value Value(key interface{}) interface{}...阅读全文

博文 2019-07-25 19:32:41 ihornet

golang学习之ngrok源码分析

从去年开始就对go语言产生一点兴趣,总感觉java有时太过臃肿,是时候尝试一种新语言了。我看了几本关于go的书,不过看完就忘了,最近开发一个微信公众号项目,使用ngrok做内网穿透,顺道研究一下ngrok源码,巩固一下go语言。 网上有两篇文章已对ngrok原理讲得很清晰了: https://blog.messyidea.com/archives/41/ https://tonybai.com/2015/05/14/ngrok-source-intro/ 我试图记录一些细节,然后实现在个简单的ngrok。 源码/ngrok/cache/lru.go,这是随手点开的一个文件,从名字可以看出它的用处:实现一个lru(Least Recently Used)缓存,在以往的项目中,我使用的本地缓存是...阅读全文

博文 2019-01-10 16:34:42 栖梧楼主

如何理解Golang的 “must not be copied after first use”(源码解析)

前言 阅读Golang sync包时,总会看到一句话“must not be copied after first use”,对此感到很好奇,查阅过程中发现这篇文章总结得挺到位的,因此转载,记录一下,因为我只是对于原理上面好奇,因此没有全文翻译过来,只挑选了一些自己感兴趣的地方用自己的话总结了一下,感兴趣的可以看看原文章: What does “nocopy after first use” mean in golang and how 正文 must not be copied after first use 初次使用后不能复制,sync包大多跟并发控制相关,出于安全考虑(避免指针的复制使得指针污染不安全,误操作而使程序崩溃)不能复制可以理解,但Golang是怎么样办到的呢,接下来就从源码...阅读全文

golang中你不知道的 string

golang中你不知道的 string 字符串对于一篇博客文章来说似乎太简单了,但是一个简单的东西想用好,其实也不容易。 遍历字符串 package main import ( "fmt" "unicode/utf8" ) func main() { const sample = "我爱golang" for i := 0; i < len(sample); i++ { runeValue, _ := utf8.DecodeRuneInString(sample[i:]) fmt.Printf("position:%v, value:%c \n", i, runeValue) } } 复制代码position:0, value:我 position:1, value:� position:2...阅读全文

博文 2019-12-09 16:34:41 _西门吹牛

兄弟连区块链入门教程以太坊源码分析p2p-dial.go源码分析

dial.go在p2p里面主要负责建立链接的部分工作。 比如发现建立链接的节点。 与节点建立链接。 通过discover来查找指定节点的地址。等功能。dial.go里面利用一个dailstate的数据结构来存储中间状态,是dial功能里面的核心数据结构。 // dialstate schedules dials and discovery lookups. // it get's a chance to compute new tasks on every iteration // of the main loop in Server.run. type dialstate struct { maxDynDials int //最大的动态节点链接数量 ntab discoverTable /...阅读全文

博文 2018-10-25 16:34:43 兄弟连区块链培训

go flag

flag 用法参考:https://golang.google.cn/pkg/flag/1. 命令源码文件怎样接收参数package main import ( "flag" #导入flag包 "fmt" ) var name string func init(){ flag.StringVar(&name,"name","everyone","The greting object") # } func main(){ flag.Parse() #函数flag.Parse用于真正解析命令参数,并把它们的值赋给相应的变量。 fmt.Printf("hello,%s!\n",name) }函数flag.StringVar接受 4 个参数。第 1 个参数是用于存储该命令参数值的地址,具体到这里就是...阅读全文

博文 2019-11-07 10:33:21 1350368559

区块链入门教程以太坊源码分析node源码分析

区块链入门教程以太坊源码分析node源码分析,2018年下半年,区块链行业正逐渐褪去发展之初的浮躁、回归理性,表面上看相关人才需求与身价似乎正在回落。但事实上,正是初期泡沫的渐退,让人们更多的关注点放在了区块链真正的技术之上。node在go ethereum中代表了一个节点。 可能是全节点,可能是轻量级节点。 node可以理解为一个进程,以太坊由运行在世界各地的很多中类型的node组成。一个典型的node就是一个p2p的节点。 运行了p2p网络协议,同时根据节点类型不同,运行了不同的业务层协议(以区别网络层协议。 参考p2p peer中的Protocol接口)。node的结构。 // Node is a container on which services can be registere...阅读全文

博文 2018-10-24 14:34:40 兄弟连区块链培训

以太坊源码机制:挖矿

链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 miner.start()miner即矿工的意思,矿工要做的工作就是“挖矿”,挖矿就是将一系列最新未封装到块中的交易封装到一个新的区块的过程。学习以太坊挖矿之前,我们要先搞清楚几个概念: 拜占庭将军问题分布式系统的状态同步问题。 拜占庭帝国繁荣富饶,周边的几个小国家的将军对其垂涎已久但又各自心怀鬼胎。他们必须有超过一半以上的将军同意进攻拜占庭并且不能在战场上做出背叛的动作(达成共识),否则就会进攻失败,引火烧身。而将军的领土有可能被其他几个将军瓜分。基于这种情况,将军们之间的沟通很成问题,有的人口是心非,有的人是忠诚为了组织的利益。如何能最终达成共识,这是个问题。 分布式系统中的每个结点就是将军,这些结点要同步状...阅读全文

博文 2019-09-20 14:02:41 链客

Go sync.Once介绍

go中sync.Once也是一个工作中会用到的一个类型,它是开箱即用的 var once sync.Once once.Do(func(){ fmt.Println("do once") }) 只要声明改类型的once变量,就可以直接使用它的Do方法,Do方法的参数是一个无参数,无返回的函数。 它有一个特性,就是不管调用Do方法多少次,里面的函数只会执行一次。 我们可以看下它的实现源码,非常精简 // Once is an object that will perform exactly one action. type Once struct { done uint32 // 判断函数是否已经执行过 m Mutex } func (o *Once) Do(f func()) { if at...阅读全文

博文 2020-02-29 19:32:38 iuoui

golang源码学习之select

先上结论吧 select 是针对chan类型的, 所以case 只有default和chan(读/写)两种 遍历case的时候顺序不确定,但chan的优先级比default高。当有default和可执行的chan时,总是执行chan 当没有default,且无可执行的chan时,阻塞 select{}, 阻塞 开始看源码吧 scase // case 的几种类型 const ( caseNil = iota caseRecv caseSend caseDefault ) type scase struct { c *hchan // chan elem unsafe.Pointer // data element 数据元素 kind uint16 // 对应const的那几种类型 pc ui...阅读全文

博文 2019-07-18 18:32:40 ihornet

Golang源码 container 系列三 heap堆排序

参考 GO语言heap剖析及利用heap实现优先级队列 Golang: 详解container/heap 在Golang sort介绍了sort接口,实现自定义排序: type Interface interface { // Len is the number of elements in the collection. Len() int // Less reports whether the element with // index i should sort before the element with index j. Less(i, j int) bool // Swap swaps the elements with indexes i and j. Swap(i, j i...阅读全文

博文 2019-03-18 18:34:42 懒皮

go-源码阅读-准备

golang语言写起来很方便,但是如果想把代码写的更好,例如规避gc潜在的问题,节约内存,提升运行性能,都需要对虚拟机做一些了解。这一系列的文章是我再阅读雨痕的《GO语言学习笔记》,记录一些信息。环境go 1.5.1 amd64 ubuntu14.04.3 LTS gdb 7.7.1引导程序启动不是使用main.main函数,之前有命令行处理,运行时初始化工作之后,才会进入用户逻辑。编写一个最简单的helloworld的文件。使用gdb来调试。作者建议平时多使用编译命令行来处理,减少对于IDE的依赖,有利于自己记住这些编译选项。编译的时候使用-gcflags "-N-1" -o test 。使用gdb加载test使用(gdb)info files检查本地可执行文件入口点,直接对这个地址加断点...阅读全文

博文 2020-01-18 15:32:42 阿彪2020

阿里巴巴淘票票专家分享:如何利用阿里云ARMS,搭建国际化在线售票的业务监控系统

摘要: 淘票票为了开拓国际业务,需要做国际化的在线售票,并选择了阿里云新加坡节点作为技术方案,项目上线后急需一套自动化的监控系统代替人肉维护监控。看了ARMS的功能说明,发现其刚好以很低的接入成本来满足我们业务实时监控的需求。 阿里巴巴旗下-淘票票 王伟 撰稿 1. 简介 淘票票为了开拓国际业务,需要做国际化的在线售票,并选择了阿里云新加坡节点作为技术方案,项目上线后急需一套自动化的监控系统代替人肉维护监控。看了ARMS的功能说明,发现其刚好以很低的接入成本来满足我们业务实时监控的需求,因此决定采用阿里云的业务实时监控服务(ARMS)做业务监控。 业务的基本需求是需要实时大盘和报警功能,对要实时统计订票接口的各种状态进行统计和报警,包括: 订票成功率,从业务层面看是...阅读全文

练习:密码生成工具

实现一个密码生成工具,支持以下功能: a) 用户可以通过-l指定生成密码的长度 b) 用户可以通过-t指定生成密码的字符集,比如 -t num 生成全数字的密码 -t char 生成包含全英文字符的密码, -t mix 包含生成数字和英文的密码, -t advance 生成包含数字、英文以及特殊字符的密码package main import ( "crypto/rand" "flag" "fmt" "math/big" ) func generatePassword(l int, t string) string { var password string var elements []rune switch t { case "num": elements = []rune{'0', '...阅读全文

博文 2020-01-07 16:49:25 go100

fabric源码学习笔记1-整体结构

整体结构 fabric-peer:主要起到peer作用,包括endorser(背书者)、committer两种角色 fabric-ca:即原先的membersrvc,独立成一个新的项目 fabric-order:起到order作用 核心代码包 bccsp包:实现对加解密算法和机制的支持 common包:一些通用的模块 core包:大部分核心实现代码都在本包下,其他包的代码封装上层接口,最终调用本包内代码 events包:支持event框架 examples包:包括一些示例的chaincode代码 gossip包:实现gossip协议 msp包:Member Service Provider包 order包:order服务相关的入口和框架代码 peer包:peer的入口和框架代码 protos...阅读全文

博文 2017-09-28 02:34:57 莫名FCJ

Golang学习-基础命令

链客,专为开发者而生,有问必答!此文章来自[区块链技术社区](https://www.liankexing.com),未经允许拒绝转载。 Golang学习-基础命令11一、go run 用于运行命令源码文件,只能接收一个命令源码文件以及若干个库源码文件作为参数。先将源码文件编译成临时文件,然后再运行这个临时文件,临时文件可能包括可执行文件和归档文件。这些临时文件如果不做命令标记,会在被运行后被删除。下面是go run命令常用的标记:–a : 强制编译相关代码文件,无论代码文件是否有更新 –n : 打印编译过程中所需要的命令,但是不执行它 –p N : 并行编译,其中N为CPU逻辑个数 –v : 列出被编译的代码包名称 –work : 显示编译时创建的临时工作目录,注意这些目录并不会删除 –x...阅读全文

博文 2019-06-28 13:02:39 链客区块链技术问答社区

Go - http.Server源码分析

? 本文将从如下几部分分析net/http模块中关于server部分的源码: Handler类型和HandlerFunc类型是什么? ServeMux对HTTP handler的注册管理和分发 Server启动流程 1. Handler 1.1 从注册HTTP handler入手 原生注册HTTP handler有如下两种写法,它们有什么区别呢? func handler(w http.ResponseWriter, r *http.Request) {} http.HandleFunc("/some-pattern", handler) http.Handle("/some-pattern", http.HandlerFunc(handler)) 复制代码两个方法对应的源码如下: func...阅读全文

博文 2019-09-02 00:34:30 hsabalaaaC

【MPS最佳实践】媒体工作流转码

摘要: 背景 1个输入文件对应多个输出文件(不同分辨率,不同格式等),通过控制台的图形化界面,快速搭建常用视频处理流程。 优势 简单易用,视频上传完成自动触发转码任务。 功能强大,支持截图、转码、转封装、水印、加密、剪辑等功能。 **点此查看原文:http://click.aliyun.com/m/42850/** **背景** 1个输入文件对应多个输出文件(不同分辨率,不同格式等),通过控制台的图形化界面,快速搭建常用视频处理流程。 **优势** 简单易用,视频上传完成自动触发转码任务。 功能强大,支持截图、转码、转封装、水印、加密、剪辑等功能。 在媒体工作流开始执行和完成执行时,支持向指定的消息队列或消息通知发送工作流执行信息。 媒体库,为您提供音视频...阅读全文

{区块链教程}以太坊源码分析fast sync算法二

兄弟连区块链教程以太坊源码分析fast sync算法二:上面的表格应该这样解释:如果我们每隔K个区块头验证一次区块头,在N个区块头之后,伪造的概率小于攻击者产生SHA3冲突的概率。这也意味着,如果确实发现了伪造,那么最后的N个头部应该被丢弃,因为不够安全。可以从上表中选择任何{N,K}对,为了选择一个看起来好看点的数字,我们选择N = 2048,K = 100。后续可能会根据网络带宽/延迟影响以及可能在一些CPU性能比较受限的设备上运行的情况来进行调整。 Using this caveat however would mean, that the pivot point can be considered secure only after N headers have been impor...阅读全文

博文 2018-10-26 16:34:48 兄弟连区块链培训

golang源码安装时fatal error: MSpanList_Insert错误

本使用的golang是1.9版本,今天想升到最新的1.11。遇到如下错误 failed MSpanList_Insert 0x905000 0x9b51f3c97b8 0x0 0x0 fatal error: MSpanList_Insert runtime stack: runtime.throw(0x5e5cf0, 0x10) /home/travis/.gimme/versions/go1.6.linux.amd64/src/runtime/panic.go:530 +0x90 fp=0x7fff5fbff0b0 sp=0x7fff5fbff098 runtime.(*mSpanList).insert(0x865d08, 0x905000) /home/travis/.gimme/v...阅读全文

博文 2019-01-10 19:34:41 左手java右手go

中文转换成html中的utf-8

在HTML中,中文的“好好学习”可以表示为 “好好学习”在项目中,需要对接短信告警,短信告警返回数据要求是utf8的后来继续沟通,才发现要的是html-utf8的;没有找到合适的golang工具包,涉及语言转码的包主要有mahonia,支持各种格式的数据转换,gbk,utf8,gb2312net/html,支持网页转码,改的是转换网页中的<,>,&,',',.根据网上经验,提供三个版本的转换:Javascript function ConvUtf8(obj) { returnobj.replace(/[^\u0000-\u00FF]/g,function($0) {returnescape($0).replace(/(%u)(\w{4})/gi, "&#x$2;") }); } JAVA p...阅读全文

博文 2020-02-09 15:32:41 一把人才

golang 标准命令

go源码文件:命令源码文件:总是作为可执行的程序的入口库源码文件:一般用于集中放置各种待被使用的程序实体(全局常量、全局变量、接口、结构体、函数等等)go buildgo build: 用于编译指定的源码文件或者代码包以及它们的依赖包,默认不会编译目标代码包所依赖的那些代码包。当然如果依赖的代码包的归档文件不存在,后者源码文件有了变化,那它还是会被编译。go build 在编译只包含库源码文件的代码包时,只会检查性的编译,不会输出任何结果文件在编译命令源码文件时,生成可执行包go build 既不能编译包含多个命令源码文件的代码包,也不能同时编译多个命令源码文件。因为如果把多个命令源码文件作为一个整体看待,那么每个文件中的main函数都属于重名函数,在编译时会抛出重复定义错误。go buil...阅读全文

博文 2020-03-11 16:34:37 白也

兄弟连区块链教程以太源码分析accounts账户管理分析

兄弟连区块链教程以太源码分析accounts账户管理分析。 数据结构分析 ETH的账户管理定义在accounts/manager.go中,其数据结构为: // Manager is an overarching account manager that can communicate with various// backends for signing transactions.type Manager struct {backends map[reflect.Type][]Backend // Index of backends currently registeredupdaters []event.Subscription // Wallet update subscriptions...阅读全文

博文 2018-10-17 15:34:40 兄弟连区块链培训

兄弟连区块链入门教程eth源码分析core-vm源码分析

兄弟连区块链入门教程eth源码分析core-vm源码分析,2018年下半年,区块链行业正逐渐褪去发展之初的浮躁、回归理性,表面上看相关人才需求与身价似乎正在回落。但事实上,正是初期泡沫的渐退,让人们更多的关注点放在了区块链真正的技术之上。## contract.gocontract代表了eth state database里面的一个合约。包含了合约代码,调用参数。结构 // ContractRef is a reference to the contract's backing object type ContractRef interface { Address() common.Address } // AccountRef implements ContractRef. // // A...阅读全文

博文 2018-10-23 16:34:50 兄弟连区块链培训

区块链入门教程以太坊源码分析p2p-dial.go源码分析

兄弟连区块链入门教程以太坊源码分析p2p-dial.go源码分析,2018年下半年,区块链行业正逐渐褪去发展之初的浮躁、回归理性,表面上看相关人才需求与身价似乎正在回落。但事实上,正是初期泡沫的渐退,让人们更多的关注点放在了区块链真正的技术之上。dial.go在p2p里面主要负责建立链接的部分工作。 比如发现建立链接的节点。 与节点建立链接。 通过discover来查找指定节点的地址。等功能。dial.go里面利用一个dailstate的数据结构来存储中间状态,是dial功能里面的核心数据结构。 // dialstate schedules dials and discovery lookups. // it get's a chance to compute new tasks on ev...阅读全文

博文 2018-10-24 15:34:47 兄弟连区块链培训

golang 字符转换

中文转码代码如下: package main import ( "bytes" "golang.org/x/text/encoding/simplifiedchinese" "golang.org/x/text/transform" "io/ioutil" "fmt" ) func GbkToUtf8(s []byte) ([]byte, error) { reader := transform.NewReader(bytes.NewReader(s), simplifiedchinese.GBK.NewDecoder()) d, e := ioutil.ReadAll(reader) if e != nil { return nil, e } return d, nil } func Ut...阅读全文

博文 2018-12-29 10:35:59 渣渣曦

Go语言开发环境的搭建(Goland和VSCode)

教程首发于:微信公众号《Go编程时光》 1. 下载安装 Go语言 下载地址:https://golang.google.cn/dl/ 下载完成后,直接双击 msi 文件进行安装,我习惯将软件安装在我的 E 盘下的 Program Files 目录下 后面就是一路点击 Next 即可,直到出现如下界面,安装完成。 2. 配置 Goland 环境 学习编程语言,使用一个称心的 IDE,可以帮你省去很多麻烦。 开发 Python 项目,我习惯使用 PyCharm,因为已经习惯了 JetBrains 风格的IDE,可以替我省去很多熟悉新IDE的成本,所以这里我照样使用 JetBrains 专门为 Go语言开发的IDE:Goland。 Goland 下载地址:https://download.jetb...阅读全文

博文 2020-02-04 19:32:41 Python编程时光

学习笔记-go库源码文件

库源码文件 库源码文件是不能被直接运行的源码文件,它仅用于存放程序实体,这些程序实体可以被其他代码使用(只要遵从 Go 语言规范的话)。他代码”可以与被使用的程序实体在同一个源码文件内,也可以在其他源码文件,甚至其他代码包中。 怎样把命令源码文件中的代码拆分到其他库源码文件? cat demo4.go package main //这里也申明了属于main包 import ( "flag" ) var name string func init() { flag.StringVar(&name, "name", "everyone", "The greeting object.") } func main() { flag.Parse() hello(name) //调用了代码包一个叫作he...阅读全文

博文 2019-11-08 15:03:13 1350368559

Go Micro Client 源码分析

概述 Client 主要是用来执行请求服务和订阅发布事件。是对于broker,Transort的一种封装方便使用。 Init 初始化客户端函数 初始化连接池数量和连接池TTL 调用注入的opts函数列表 最后初始化连接池 func (r *rpcClient) Init(opts ...Option) error { size := r.opts.PoolSize ttl := r.opts.PoolTTL for _, o := range opts { o(&r.opts) } // update pool configuration if the options changed if size != r.opts.PoolSize || ttl != r.opts.PoolTTL { ...阅读全文

博文 2019-07-22 18:32:38 大二小的宝

Golang包——net

net/http 一个简单的网络请求 func helloWorld(w http.ResponseWriter, r *http.Request) { w.Write([]byte("hello world")) } func main() { http.HandleFunc("/hello", helloWorld) err := http.ListenAndServe(":8080", nil) if err != nil { log.Fatal(err) } } 请求http://localhost:8080/hello会打印hello world go web的请求流程 图片来源astaxie的build-web-application-with-golang go10.1的源码 ...阅读全文

博文 2019-04-03 00:34:38 羊羽share

Golang学习 - unicode 包

const ( MaxRune = '\U0010FFFF' // Unicode 码点的最大值 ReplacementChar = '\uFFFD' // 表示无效的码点 MaxASCII = '\u007F' // 最大 ASCII 值 MaxLatin1 = '\u00FF' // 最大 Latin-1 值 ) // 判断字符 r 是否在 rangtab 范围内。 // 可用的 RangeTable 参见 go/src/unicode/tables.go。 func Is(rangeTab *RangeTable, r rune) bool // RangeTable 定义一个 Unicode 码点集合,包含 16 位和 32 位两个范围列表。 // 这两个列表必须经过排序而且不能重叠...阅读全文

博文 2019-04-19 18:34:40 佛心看世界

兄弟连区块链教程eth源码分析p2p-udp.go源码分析(一)

兄弟连区块链教程eth源码分析p2p-udp.go源码分析(一),2018年下半年,区块链行业正逐渐褪去发展之初的浮躁、回归理性,表面上看相关人才需求与身价似乎正在回落。但事实上,正是初期泡沫的渐退,让人们更多的关注点放在了区块链真正的技术之上。p2p的网络发现协议使用了Kademlia protocol 来处理网络的节点发现。节点查找和节点更新。Kademlia protocol使用了UDP协议来进行网络通信。阅读这部分的代码建议先看看references里面的Kademlia协议简介来看看什么是Kademlia协议。首先看看数据结构。 网络传输了4种数据包(UDP协议是基于报文的协议。传输的是一个一个数据包),分别是ping,pong,findnode和neighbors。 下面分别定义...阅读全文

博文 2018-10-17 17:34:42 兄弟连区块链培训

兄弟连区块链教程以太坊源码分析core-state-process源码分析

StateTransition 状态转换模型 /* The State Transitioning Model 状态转换模型 A state transition is a change made when a transaction is applied to the current world state 状态转换 是指用当前的world state来执行交易,并改变当前的world state The state transitioning model does all all the necessary work to work out a valid new state root. 状态转换做了所有所需的工作来产生一个新的有效的state root 1) Nonce handlin...阅读全文

博文 2018-10-22 15:34:38 兄弟连区块链培训

兄弟连区块链教程以太坊源码分析core-state-process源码分析(二)

兄弟连区块链教程以太坊源码分析core-state-process源码分析(二):关于g0的计算,在黄皮书上由详细的介绍和黄皮书有一定出入的部分在于if contractCreation && homestead {igas.SetUint64(params.TxGasContractCreation) 这是因为 Gtxcreate+Gtransaction = TxGasContractCreation func IntrinsicGas(data []byte, contractCreation, homestead bool) *big.Int { igas := new(big.Int) if contractCreation && homestead { igas.SetUint6...阅读全文

博文 2018-10-22 16:35:00 兄弟连区块链培训

命令源码文件

包是有源码文件组成,源码文件分为三种,库源码文件,命令源码文件,测试源码文件 命令源码文件 定义:命令源码文件是程序的原型入口,是每个可独立运行的程序必须拥有的,我们可以通过构建和安装生成对应的可执行文件,后者一般与该命令源码文件的直接父目录同名 下面演示如何创建命令源码文件和执行该源码文件 创建一个文件夹 main 创建一个源码文件main.go package main import "fmt" func main(){ fmt.Println("hello world") } 在命令行输入命令 go run main.go image.png 千万注意一点 对于一个独立程序而言,命令源码文件只能有一个,如果有与命令源码同包的源码文件,应该声明属于main包 命令源码文件怎么接受参数 g...阅读全文

博文 2018-12-24 09:34:43 酷走天涯

【设计模式】【golang源码】 单例模式(Singleton Pattern)

单例模式目的:对象初始化成本比较高,防止一个被多次初始化。 var ( confOnce sync.Once // guards init of confVal via initConfVal confVal = &conf{goos: runtime.GOOS} ) // systemConf returns the machine's network configuration. func systemConf() *conf { confOnce.Do(initConfVal) return confVal ...阅读全文

博文 2019-10-12 14:32:47 山丘

兄弟连区块链教程btcpool矿池源码分析BlockMaker模块解析

兄弟连区块链教程btcpool矿池源码分析BlockMaker模块解析,2018年下半年,区块链行业正逐渐褪去发展之初的浮躁、回归理性,表面上看相关人才需求与身价似乎正在回落。但事实上,正是初期泡沫的渐退,让人们更多的关注点放在了区块链真正的技术之上。# btcpool矿池-BlockMaker模块解析## 核心机制总结* blkmaker可以连多个bitcoind节点* blkmaker监听和接收4类消息:RAWGBT、STRATUM_JOB、SOLVED_SHARE和NMC_SOLVED_SHARE* 监听RAWGBT目的为获取gbtHash/交易列表,用于构建Block,gbtHash和vtxs写入rawGbtMap_* rawGbtMap_保存最近100条gbtHash/vtxs对*...阅读全文

博文 2018-10-16 18:34:41 兄弟连区块链培训

Go 语言编译过程概述

Golang 是一门需要编译才能运行的编程语言,也就说代码在运行之前需要通过编译器生成二进制机器码,随后二进制文件才能在目标机器上运行,如果我们想要了解 Go 语言的实现原理,理解它的编译过程就是一个没有办法绕过的事情。 这一节会先对 Go 语言编译的过程进行概述,从顶层介绍编译器执行的几个步骤,随后的章节会分别剖析各个步骤完成的工作和实现原理,同时也会对一些需要预先掌握的知识进行介绍和准备,确保后面的章节能够被更好的理解。 目录 编译原理概述 词法和语法分析器 类型检查 中间代码生成 机器码生成 预备知识 想要深入了解 Go 语言的编译过程,需要提前了解一下编译过程中涉及的一些术语和专业知识。这些知识其实在我们的日常工作和学习中比较难用到,但是对于理解编译的过程和原理还是非常重要的。这一小...阅读全文

博文 2019-02-11 11:34:43 draveness

golang+cgo的搭建以及使用

摘要由于自己新的工作接触到了图像识别,于是开始从零开始整理自己怎么从一个空白到实现识别的完整功能所需要的技术要点。当然并不是完全的从零开始,前提条件至少会用go和c++,go简单很容易就能上手,如果你有开发的工作经验,学习go那是相当容易的。C++相对于go会比较困难点,但是笔者也没有做过c++的经历,也就大学学过c而已,照葫芦画瓢,依然能用的来c++,所以相信大家花点时间也能熟练的使用这两门语言。为什么要cgo所谓的cgo就是go调用c/c++或者是反过来,如果你是一名go开发者,由于现在很多强大的开源库是使用c/c++编写的,比如Opencv、Opengl、Zbar等等,你既想用又不想切换语言,那么cgo就是很好的选择,这将使你站在巨人的肩膀上开发出自己的应用程序。学会cgo将会打开你新...阅读全文

Docker registryV2-启动过程 源码分析

Registry是什么: 官网上介绍Registry是一个无状态,高度可扩展的服务器端应用程序,可存储并允许您分发Docker镜像。Registry是Apache开源的。我们暂且只要知道Registry是负责存储Docker镜像的就可以了。说明: 现在网络上有一些关于registry 启动的源码分析,由于感觉不太详细并且讲解不够清晰,所以自己重新记录一下,以便自己以后快速回顾,也希望对想要阅读源码的同学有所帮助。由于从未发过博客,如有发现错误或者有疑问,都欢迎随时联系我。一、v1基本已经弃用了 1、镜像是以layer的形式存储,v1下载一个layer后回去找parent layer串行下载,速度当然上不去。 而v2增加了mainfest(manifest主要保存镜像layer信息,及一些校验...阅读全文

博文 2018-11-09 15:35:35 ZhangZhiFei

密码学家的工具箱(golang代码实现)

本文参考《图解密码技术》第三版    密码学家的工具箱,指六种常用加密方式包括 对称密码、非对称密码、单向散列函数、消息认证码、数字签名、伪随机数生成器。堪称六大杀器,现代社会的信息安全皆基于此。本文用go语言代码实现六种工具的具体应用。 对称密码 是指加密解密时用同一个秘钥,下面代码采用AES进行加解密,私钥长度只支持128,192,256位的字节数组。 AES加解密的代码应用: package main import ( "bytes" "crypto/aes" "crypto/cipher" "fmt" ) func PKCS5Padding(ciphertext []byte, blockSize int) []byte { padding := blockSize - len(ci...阅读全文