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

Go语言(golang)新发布的1.13中的Error Wrapping深度分析

2019.09.03日,Golang 1.13版本发布,这次更新算是比较大的了,有大家期待的GOPROXY和GOPRIVATE等,具体的可以去看这个版本的 Go 1.13 Release Notes。 Go 1.13发布的功能还有一个值得深入研究的,就是对Error的增强,也是今天我们要分析的 Error Wrapping. 背景 做Go语言开发的,肯定经常用error,但是我们也知道error非常弱,只能自带一串文本其他什么都做不了,比如给已经存在的error增加一些附加文本,增加堆栈信息等都做不了。如果我们想给error增加一些附加文本怎么做呢?有两种办法: 第一种: newErr:=fmt.Errorf("数据上传问题: %v", err) 通过fmt.Errorf函数,基于已经存在的...阅读全文

博文 2019-09-07 08:42:46 飞雪无情

剥开比原看代码13:比原是如何通过/list-balances显示帐户余额的?

作者:freewind 比原项目仓库: Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockc... 在前几篇里,我们研究了比原是如何通过web api接口来创建密钥、帐户和地址的,今天我们继续看一下,比原是如何显示帐户余额的。 在Dashboard中,左侧有一栏名为"Balances"(余额),点击后,我们可以看到每个帐户当前有多少余额,如下图: 这又是怎么实现的呢?我们还是和以前一样,把它分成两个部分: 前端是如何向后端发送请求的 后端接收到请求数据后,是如何去查询出帐户余额的 前端是如何向后端发送请求的 对应这个功能的前端代码远比想像中复杂,我花了很多功夫才把逻辑理清楚,主要原因是它是一...阅读全文

博文 2018-07-23 15:34:54 比原链Bytom

剥开比原看代码16:比原是如何通过/list-transactions显示交易信息的?

作者:freewind 比原项目仓库: Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockc... 在前一篇文章中,我们试图理解比原是如何交易的,但是由于内容太多,我们把它分成了几个小问题,并在前一篇解决了“在dashboard中如何提交交易信息”,以及“比原后台是如何操作的”。 在本文我们继续研究下一个问题:在提交的交易成功完成后,前端会以列表的方式显示交易信息,它是如何拿到后台的数据的?也就是下图是如何实现的: 由于它同时涉及到了前端和后端,所以我们同样把它分成了两个小问题: 前端是如何获取交易数据并显示出来的? 后端是如何找到交易数据的? 下面依次解决。 前端是如何获取交易数据并显示出...阅读全文

博文 2018-07-23 16:34:48 比原链Bytom

剥开比原看代码02:比原启动后去哪里连接别的节点

作者:freewind 比原项目仓库: Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockc... 最开始我对于这个问题一直有个疑惑:区块链是一个分布式的网络,那么一个节点启动后,它怎么知道去哪里找别的节点从而加入网络呢? 看到代码之后,我才明白,原来在代码中硬编码了一些种子地址,这样在启动的时候,可以先通过种子地址加入网络。虽然整个网络是分布式的,但是最开始还是需要一定的中心化。 预编码内容 对于配置文件config.toml,比原的代码中硬编码了配置文件内容: config/toml.go#L22-L45 var defaultConfigTmpl = `# This is a TOML...阅读全文

博文 2018-07-23 15:34:48 比原链Bytom

剥开比原看代码01:初始化时生成的配置文件在哪儿

作者:freewind 比原项目仓库: Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockc... 人们常说,“阅读源代码”是学习编程的一种重要方法。作为程序员,我们在平时的学习工作中,都应该阅读过不少源代码。但是对于大多数人来说,阅读的可能更多是一些代码片断、示例,或者在老师、同事的指导下,先对要阅读的项目代码有了整体的了解之后,再进行针对性的阅读。 但是如果我们面对的是一个像比原这样比较庞大的项目,身边又没有人指导,只能靠自己去看,这时应该怎么来阅读呢?也许每个人也都能找到自己的办法,或高效,或低效,或放弃。 我在这次阅读比原源代码的过程中,尝试的是这样一种方法:从外部入手,通过与比原节...阅读全文

博文 2018-07-23 15:34:47 比原链Bytom

剥开比原看代码12:比原是如何通过/create-account-receiver创建地址的?

作者:freewind 比原项目仓库: Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockc... 在比原的dashboard中,我们可以为一个帐户创建地址(address),这样就可以在两个地址之间转帐了。在本文,我们将结合代码先研究一下,比原是如何创建一个地址的。 首先看看我们在dashboard中的是如何操作的。 我们可以点击左侧的"Accounts",在右边显示我的帐户信息。注意右上角有一个“Create Address”链接:点击后,比原会为我当前选择的这个帐户生成一个地址,马上就可以使用了:本文我们就要研究一下这个过程是怎么实现的,分成了两个小问题: 前端是如何向后台接口发送请求...阅读全文

博文 2018-07-23 15:34:53 比原链Bytom

剥开比原看代码10:比原是如何通过/create-key接口创建密钥的

作者:freewind 比原项目仓库: Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockc... 在前一篇,我们探讨了从浏览器的dashboard中进行注册的时候,密钥、帐户的别名以及密码,是如何从前端传到了后端。在这一篇,我们就要看一下,当比原后台收到了创建密钥的请求之后,将会如何创建。 由于本文的问题比较具体,所以就不需要再细分,我们直接从代码开始。 还记得在前一篇中,对应创建密钥的web api的功能点的配置是什么样的吗? 在API.buildHandler方法中: api/api.go#L164-L244 func (a *API) buildHandler() { // ... ...阅读全文

博文 2018-07-23 15:34:52 比原链Bytom

剥开比原看代码03:比原是如何监听p2p端口的

比原是如何监听p2p端口的 我们知道,在使用bytomd init --chain_id mainnet/testnet/solonet初始化比原的时候,它会根据给定的chain_id的不同,使用不同的端口(参看config/toml.go#L29): mainnet(连接到主网): 46657 testnet(连接到测试网): 46656 solonet(本地单独节点): 46658 对于我来说,由于只需要对本地运行的一个比原节点进行分析,所以可以采用第3个chain_id,即solonet。这样它启动之后,不会与其它的节点主动连接,可以减少其它节点对于我们的干扰。 所以在启动的时候,我的命令是这样的: cd cmd/bytomd ./bytomd init --chain_id solo...阅读全文

博文 2018-07-23 15:34:48 比原链Bytom