区块链项目很多用go语言实现。go语言语法简单,并发性好。看go语言写的区块链项目,比其他语言写的区块链项目,逻辑上清晰多了。就以以太坊为例,go语言的版本,比cpp的版本,代码逻辑更清晰(大量的并发,以及网络通讯逻辑被go语言本身实现)。
熟悉C语言的朋友,看go语言代码非常容易,很容易上手。
想快速入门go语言的朋友,可以参考github上的一个go语言入门手册:
https://github.com/a8m/go-lang-cheat-sheet
go语言详细介绍可以参看官方网站:https://golang.org/。
总的来说,一个go语言的代码如下:
packagemain
import"fmt"
funcmain() { fmt.Println("Hello Go")}
package说明代码的域,import引入其他代码,main函数是程序执行的入口。
几个和C语言不一样的地方,列举一下:
*)执行语句不用;结束
*)原生类型
*)申明的变量类型在变量名称之后,比如:
varfooint
varfooint=42
*)函数可以返回多个输出
funcreturnMulti() (int,string)
{
return42,"foobar"
}
比如上图中的代码,同时返回一个int以及一个字符串。
*)if/for/switch几乎和c语言语法一致
*)数组和slice,slice的数据长度不定
vara[10]int //数组,10个int类型
vara= []int{1,2,3,4} //slice,初始为4个元素
数组或者slice的枚举如下:
fori,e:=rangea {
//i是序号, e是元素
}
*)没有对象,只有struct和interface
typeVertexstruct{X,Yint}
stuct可以有函数,函数必须在函数名前指明struct的名称:
func(vVertex)Abs()float64{
returnmath.Sqrt(v.X*v.X+ v.Y*v.Y)}
*)并发性相关:goroutines以及channels
goroutines是go语言实现的轻量级的多线程:
//just a function (which can be later started as a goroutine)
funcdoStuff(sstring) {}
funcmain() {//using a named function in a goroutinegodoStuff("foobar")//using an anonymous inner function in a goroutinegofunc(xint) {//function body goes here}(42)}
channels是go语言的一个核心类型,可以把它看成一个管道,通过它并发核心单元就可以发送或者接收数据进行通讯。
ch:=make(chanint)//create a channel of type int
ch
v:=
领取专属 10元无门槛券
私享最新 技术干货