摘要:
本文档演示使用Hyperledger Fabric V1.0来部署一个开发者环境并运行一个简单例子。文档包括创建和加入通道(账本)、客户端认证以及部署和调用智能合约。CLI将用于创建和加入通道(账本),NodeJS SDK将用于客户端身份验证和使用账本的智能合约功能。 Docker Compose将 阅读全文
摘要:
本节分享有关拆超级账本的概念以及体验部署过程。 一、简介 是一个带有可插入各种功能模块架构的区块链实施方案,目标是打造成一个由全社会共同维护的开源超级账本。由Linux 基金会的开源项目,全称是Hyperledger Fabric)是区块链的商用平台。开源地址:https://github.com/ 阅读全文
摘要:
本文紧接上文所述,讲解socket编程和HTTP编程。 一、socket编程 在上一节我们介绍了网络体系的五层模型,介绍了每层模型所遵守的协议。TCP/IP是一个协议族,它由网络层的IP协议和传输层的TCP协议组成,其中网络层建立了主机到主机的通信,传输层建立了端口到端口的通信。只要确定主机和端口, 阅读全文
摘要:
网络编程分为上下两节。上节介绍网络概述,下节介绍socket和HTTP编程。 一、网络概述 1.1 网络协议 网络协议就是为网络数据交换而制定的规则、约定与标准。 1.2 分层模型 为了降低网络设计的复杂性,绝大多数网络都组织成一堆相互叠加的层。每一层都建立在下一层的基础之上,且每一层的目的都是向上 阅读全文
摘要:
本节紧接上节内容,介绍JSON处理和对文本的几种操作。 一、JSON处理 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,方便人们阅读和编写,也方便程序地解析和生成。虽然JSON是JavaScript的子集,但其格式完全独立于编程语言,表现为键/值对集合的 阅读全文
摘要:
常用工具包分为两节内容。本节介绍格式化输入输出和对字符串处理的常用工具包和函数;下节介绍JSON处理和对文本的几种操作。 fmt包提供了格式化的输入和输出的操作。 1.1 常见的函数 主要介绍fmt包中常用的Println、Printf和Scanf函数,如表1所示。 1.2 格式化符号 格式化符号如 阅读全文
摘要:
本节紧接上一节的内容,主要介绍channel中的有缓冲channel、单方向的channel、定时器,以及select语句在channel中的应用。 3.4 有缓冲的channel 3.4.1 概述 有缓冲的通道(buffered channel)是一种在被接收前能存储一个或者多个值的通道。这种类型 阅读全文
摘要:
并发编程分为上、下两节。这一节包括了并发编程的概述、goroutine和channel的部分内容。 一、概述 1.1 并行和并发并行(parallel):在多个处理器上同时执行多条指令,如图1所示。 并发(concurrency):同一时刻只有一条指令在执行,但多个进程指令被快速轮换地执行,使得宏观 阅读全文
摘要:
任何编程语言的学习都要考虑错误处理。早期的语言,比如C语言中的errno,不是语言规范的一部分,通常只作为一种编程范式存在。但C++语言从语言层面上增加错误处理的支持,比如异常的概念和try-catch关键字的引入。而Go语言最大的亮点之一就是拥有漂亮的错误处理规范。 一、error error是G 阅读全文
摘要:
多态是面向对象的三大基本特性之一。多态是指对于不同的实例,同样的操作可能会有不同的表现形式。例如加法操作,如果操作的数据是数,那么它对两个数进行求和;如果操作的数据是字符串,那么它将连接两个字符串。多态机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对象的具体操作不同,但通 阅读全文
摘要:
继承也是面向对象的三大基本特性之一。通过继承创建的新类称为“子类”或“派生类”,被继承的类称为“基类”、“父类”或“超类”。通过继承,不仅可以让某个类型的对象拥有属于自己的数据结构和操作,还会自动拥有父类的数据结构和操作。这使得现有的类在无需重新编写原来类的情况下对这些功能进行了扩展,很好地解决了代 阅读全文
摘要:
封装是面向对象三大特性之一。封装的好处,一个是增加代码内聚性,就是将数据和对数据的操作封装在一起,提高可复用性和可维护性;还有就是信息隐藏,就是把不该暴露的信息藏起来,通过访问控制来隐藏数据,不被外界干扰。也就是说,一个对象就是一个封装了数据和操作这些数据的代码的逻辑实体。Go语言没有封装这个名词, 阅读全文
摘要:
一、面向过程和面向对象的区别 面向对象(Object Oriented,简称OO)和面向过程(Procedure Oriented,简称PO)是两种不同的编程思想。 1.1 面向过程的编程 面向过程编程(Process Oriented Programming,简称POP),以事物的发展过程为中心的 阅读全文
摘要:
在实际开发工作中,工程不会简单到只有一个源代码文件,且源文件之间有相互依赖的关系。Go语言利用命令行工具,消除了工程文件的概念,完全用目录结构和包名来推导工程结构和构建顺序。 一、包的由来 为了代码更好地维护和复用,Go语言程序按程序的功能性将源代码分割成一个个逻辑单元,组织成若干组文件,每组文件被 阅读全文
摘要:
一、结构体概述 Go语言结构体是一种聚合的数据类型,由一系列具有相同类型或不同类型的数据构成的数据集合。结构体的声明格式如图1所示,内部没有关键词var,每个数据称为结构体成员。例如,图1所示,利用结构体表示法,以一个班级为单位,记录这个班的班级名称,统计班级的总人数、男女生人数。定义一个结构体需要 阅读全文
摘要:
在C++、Java、C#语言里,使用map,需要先引用相应的库。在Go语言里,使用map不需要引入任何库,并且使用更加方便。在C++、Java、C#语言里,使用map,需要先引用相应的库。在Go语言里,使用map不需要引入任何库,并且使用更加方便。 一、概述 Go语言中的map(映射、字典)是一种内 阅读全文
摘要:
上一节介绍了切片的基础知识:切片的声明、空切片、切片和数组的区别、切片和底层数组的关联、切片的创建。这一节主要介绍切片的几个操作(遍历、追加、拷贝、插入、删除),最后介绍切片作为函数参数的传递方式。 一、切片的几个操作 1.1 对切片的遍历 类似于对数组的遍历,range结合for循环可以对切片进行 阅读全文
摘要:
上一章节我们已经了解了数组的特点:数组的长度在定义之后无法再次修改;数组是值类型,每次传递都将产生一份副本。数组的这种特点无法满足特定场景的开发需求,Go语言提供了更为灵活、功能强悍的内置类型——切片(slice)来弥补数组的不足。切片分为上、下两节。本节介绍切片的基础知识:切片的声明、空切片、切片 阅读全文
摘要:
数组是Go语言编程中最常用的数据结构之一。本节从以下角度介绍数组:数组的定义和基本要素、数组的声明和初始化、数组元素的编号及数组元素的获取和修改、数组变量之间的比较和赋值、指针数组和数组指针、数组作为函数参数的传递方式和二维数组。 一、数组定义和基本要素 1.1 数组的定义 数组是一系列已编号、长度 阅读全文
摘要:
一、基本概念 1.1 内存地址 电脑存储器由一个个存储单元构成,为了对存储器进行有效的管理,就需要对各个存储单元编号,即给每个单元赋予一个地址码,这叫编址。计算机里每个内存单元的地址码就是这个内存单元的内存地址。 1.2 指针变量 通过内存单元的内存地址能找到这个内存单元,那么这个内存地址叫作指针( 阅读全文