GO语言学习笔记-Goroutines
原文,建议理解并发(concurrency)、并行(parallelism)区别后再看这方面的内容。
Goroutines是啥?
Goroutines是一个可以和其他函数或方法并发执行的函数或方法。也可以把它理解为轻量级的线程(roy注:这话听起来和大python中的协程很像啊!),而创建Goroutine的开销却远远小于线程。因此在大多数的Go程序都可以并发执行成千上万的Goroutine。
原文,建议理解并发(concurrency)、并行(parallelism)区别后再看这方面的内容。
Goroutines是一个可以和其他函数或方法并发执行的函数或方法。也可以把它理解为轻量级的线程(roy注:这话听起来和大python中的协程很像啊!),而创建Goroutine的开销却远远小于线程。因此在大多数的Go程序都可以并发执行成千上万的Goroutine。
分布式系统中有个经典的CAP理论,就是说任何分布式系统最多满足一致性(Consistency),可用性(Availability),分区容错性(Partition Tolerance)这三者中的两个。
既然是分布式,必然将节点部署到不同的网络中,而这则会引起一致性问题。想解决一致性,就需要保证每次操作所有节点都成功执行,而这又会降低可用性。既然分区已经是事实,所以工程上应该尽量在保证一致性的前提下提高可用性。
而一致性又可以分为:
本地开发环境可以使用geth
和testrpc
(已经改名成ganache-cli)2种,如果只是进行测试或者学习智能合约开发的话,建议使用第二个。至于docker怎么安装网上很多这里不再赘述。
上篇文章中所有接口实现我们都使用的传值,当然也可以使用传指针这种方式来实现接口。但使用传指针这种方式有一点需要注意,我们来看下面这个代码。
package main
import "fmt"
type Describer interface {
Describe()
}
type Person struct {
name string
age int
}
func (p Person) Describe() { //implemented using value receiver
fmt.Printf("%s is %d years old\n", p.name, p.age)
}
type Address struct {
state string
country string
}
func (a *Address) Describe() { //implemented using pointer receiver
fmt.Printf("State %s Country %s", a.state, a.country)
}
func main() {
var d1 Describer
p1 := Person{"Sam", 25}
d1 = p1
d1.Describe()
p2 := Person{"James", 32}
d1 = &p2
d1.Describe()
var d2 Describer
a := Address{"Washington", "USA"}
/* compilation error if the following line is
uncommented
cannot use a (type Address) as type Describer
in assignment: Address does not implement
Describer (Describe method has pointer
receiver)
*/
//d2 = a
d2 = &a //This works since Describer interface
//is implemented by Address pointer in line 22
d2.Describe()
}
在面向对象的世界中,接口的意思是:“接口定义了对象的行为”。它只表明对象应该能做什么,而具体怎么做则由对象内部实现。
Go语言中,接口是方法的集合,若某个类型实现了接口中定义的所有方法,则可以说这个类型实现了这个接口。用OOP的形式来说就是: 接口表明了类型应该有哪些方法,而类型则决定如何实现那些方法。
比如,WashingMachine
这个接口中可以定义Cleaning()
和Drying()
方法,任何类型实现了这2个方法都可以说是实现了WashingMachine
接口。
原文,需要科学上网。省略了一些无关的内容。
上篇文章我们学习了如何编写区块链并且对进行Hash运算和验证,但所有都运行在一个节点。我们如何让其他的节点连接到我们的主节点并让这些新节点贡献新区块呢?并且,我们如何通知所有的节点区块链有更新呢?
这篇文章将进行就解答。