获得徽章 0
- 一个OS线程都有一个固定大小的内存块(一般会是2MB)来做栈,这个栈会用来存储当前正在被调用或挂起(指在调用其它函数时)的函数的内部变量。这个固定大小的栈同时很大又很小。因为2MB的栈对于一个小小的goroutine来说是很大的内存浪费,比如对于我们用到的,一个只是用来WaitGroup之后关闭channel的goroutine来说。而对于go程序来说,同时创建成百上千个goroutine是非常普遍的,如果每一个goroutine都需要这么大的栈的话,那这么多的goroutine就不太可能了。除去大小的问题之外,固定大小的栈对于更复杂或者更深层次的递归函数调用来说显然是不够的展开评论点赞
- 两个相同类型的channel可以使用==运算符比较。如果两个channel引用的是相同的对象,那么比较的结果为真。一个channel也可以和nil进行比较。评论点赞
- Java SDK提供了基于abi和binary文件来直接部署和调用合约的方式。本场景下适用于默认的情况,通过创建和使用AssembleTransactionProcessor对象来完成合约相关的部署、调用和查询等操作评论点赞
- "**合约部署**":是指新创建和发布一个合约。交易创建传入的数据会被转换为 EVM 字节码并执行,执行的输出将作为合约代码被永久存储。
**“查询”**:被view修饰符修饰的方法一般称为“查询”,“查询”无需被同步和发送给到其他节点全网共识。
**“交易”**:未被修饰的才会称为“交易”。,而“交易”需发送全网进行上链的共识。展开评论点赞 - 为了效率,对内存的写入一般会在每一个处理器中缓冲,并在必要时一起flush到主存。这种情况下这些数据可能会以与当初goroutine写入顺序不同的顺序被提交到主存。像channel通信或者互斥量操作这样的原语会使处理器将其聚集的写入flush并commit,这样goroutine在某个时间点上的执行结果才能被其它处理器上运行的goroutine得到。评论点赞
- 一个对象的变量或者方法如果对调用方是不可见的话,一般就被定义为“封装”。封装有时候也被叫做信息隐藏,同时也是面向对象编程最关键的一个方面。
Go语言只有一种控制可见性的手段:大写首字母的标识符会从定义它们的包中被导出,小写字母的则不会。这种限制包内成员的方式同样适用于struct或者一个类型的方法。因而如果我们想要封装一个对象,我们必须将其定义为一个struct。展开评论点赞 - map查找(§4.3)、类型断言(§7.10)或通道接收(§8.4.2)出现在赋值语句的右边时,并不一定是产生两个结果,也可能只产生一个结果。
对于只产生一个结果的情形,
map查找失败时会返回零值,
类型断言失败时会发生运行时panic异常,
通道接收失败时会返回零值(阻塞不算是失败)
可以用下划线空白标识符`_`来丢弃不需要的值展开评论点赞 - var形式的声明语句往往是用于需要显式指定变量类型的地方,
或者因为变量稍后会被重新赋值而初始值无关紧要的地方
简短变量声明语句中必须至少要声明一个新的变量评论点赞 - ### **内建常量: true false iota nil**
### **内建类型: int int8 int16 int32 int64**
### **uint uint8 uint16 uint32 uint64 uintptr**
### **float32 float64 complex128 complex64**
### **bool byte rune string error**展开评论点赞