
go
pg_dog
今日有酒今日醉,明日愁来明日愁。
展开
-
CSP并发模型
不要以共享内存的方式来通信,相反,要通过通信来共享内存Go语言的并发模型参考的是CSP理论(Go推荐的,通信顺序进程,一种并发编程模型),另一种就是多线程共享内存,在访问共享数据时,通过锁来访问,因此衍生出了许多方便的数据结构,叫做“线程安全的数据结构”。Go的CSP并发模型CSP = goroutine + ChannelGoroutine实际并发执行的实体,它底层是使用协程(coro...原创 2020-03-31 00:08:40 · 471 阅读 · 0 评论 -
游戏上线问题总结
1,Log问题(吃过亏才会重视)游戏上线后,随着玩家数据量的剧增,许多bug就会随之出现,但同时有些bug是很难复现的,这时候定位问题就不可能通过打断点来进行查找,这时候完整的log信息才是定位问题的关键。log等级:Trace:Debug:Info:Warn:Fatal:2,recover使用(循环时处理/加锁时处理)3,线程panic崩溃,使得channel读端出错,导致ch...原创 2019-10-31 00:27:16 · 514 阅读 · 0 评论 -
Go语言中的interface理解
1、interface 是一种类型 首先 interface 是一种类型,从它的定义可以看出来用了 type 关键字,更准确的说 interface 是一种具有一组方法的类型,这些方法定义了 interface 的行为。go 允许不带任何方法的 interface ,这种类型的 interface 叫 empty interface。如果一个类型实现了一个 interface ...转载 2018-02-26 11:20:13 · 514 阅读 · 0 评论 -
golang: string与byte的区别
golang string和[]byte的对比为啥string和[]byte类型转换需要一定的代价?为啥内置函数copy会有一种特殊情况copy(dst []byte, src string) int?string和[]byte,底层都是数组,但为什么[]byte比string灵活,拼接性能也更高(动态字符串拼接性能对比)?今天看了源码探究了一下。以下所有观点都是个人愚见,有不同建议或...转载 2018-02-26 15:44:36 · 2795 阅读 · 1 评论 -
golang channel
<p> Go语言内置了书写并发程序的工具。将go声明放到一个需调用的函数之前,在相同地址空间调用运行这个函数,这样该函数执行时便会作为一个独立的并发线程。这种线程在Go语言中称作goroutine。在这里我要提一下,并发并不总是意味着并行。Goroutines是指在硬件允许情况下创建能够并行执行程序的架构。 </p> 让我们从一个例子开始: fu...转载 2018-02-27 14:14:47 · 468 阅读 · 0 评论 -
golang defer
在Go中,defer语句用于延迟一个函数或方法(或者当前创建的匿名函数)的执行。它会在外围函数或方法返回之前但是其返回值(有的话)计算之后执行,这样就有可能在函数内部修改函数的命名返回值。 如果一个函数或方法中有多个defer语句,它们会以LIFO(后进先出)的顺序执行。 最常用的用法: 1,保证使用完一个文件后将其成功关闭; 2,将一个不再使用的通道关闭; 3,捕获异...原创 2018-02-28 13:39:58 · 183 阅读 · 0 评论 -
猜数字游戏(Go实现)
后面会使用Unity3D加上UIpackage mainimport ( "fmt" "bufio" "os" "strconv" "math/rand" "time")var RANGENUM int = 20func CreateRangeNum(num int) int { ret := rand.New(原创 2018-04-04 18:57:23 · 444 阅读 · 0 评论 -
Go问题
//错误代码this.tombPlayerData = make(map[AvatarID]TTombPlayerData)this.ParentZone.GetSpaceHolder().ForeachPlayer(func(player INodePlayer) bool { this.tombPlayerData[player.GetAvatarID()].RoleName = pla...原创 2019-08-20 18:49:21 · 486 阅读 · 0 评论