随笔分类 - GO
摘要:扩展已有类型 go没有继承,如果对别人的类型或系统类型扩展方法,两种方法 使用组合 定义别名 使用组合 package main import ( "fmt" "gin/tree" ) type MyTreeNode struct { node *tree.Node } func (myNode *
阅读全文
摘要:封装 针对包来说 名字一般采用camelCase方法 首字母大写 public 首字母小写 private 针对方法和属性、常量都是这样的规则 一个目录下只能有有一个包 封装案例 node.go package tree import "fmt" type Node struct { Value i
阅读全文
摘要:go面向对象 package main import "fmt" type treeNode struct { value int left,right *treeNode } func createNode(value int) *treeNode{ return &treeNode{value:
阅读全文
摘要:golang中实现并发非常简单,只需在需要并发的函数前面添加关键字"go",但是如何处理go并发机制中不同goroutine之间的同步与通信,golang 中提供了sync包和channel机制来解决这一问题. sync 包提供了互斥锁这类的基本的同步原语.除 Once 和 WaitGroup 之外
阅读全文
摘要:1、channel通道是阻塞的,一个协程给通道发送数据,则必须有另一个协程接收数据,否则报错 可以建立很过个通道,指定哪个协程通过哪个通道读取数据 2、可以返回一个channel,看下面这个修改 下面这个例子的执行结果 结果如下 发现hello会输出很多次
阅读全文
摘要:1、下面协程执行后看不到执行的结果 func main(){ for i :=0;i<10;i++{ go func(i int){ // 协程 Coroutine 轻量级线程 for{ fmt.Println(i) } }(i) } } main也可以看做是一个协程,main里面又开了很多的协程,
阅读全文