近期在写一个扫雷的小游戏,用到了fyne框架,但是不是很熟悉这个框架,遇见了很多报错信息。其中就包括这个问题。问题描述:我写了一个menu界面用来选择游戏难度,然后点击相应按钮之后生成游戏界面。想法是很合理的,但是我的show()函数出现了如题所示的报错。原因:原因在于我是用了ShowAndRun()方法来显示游戏界面。在Go中,有一些函数和操作是安全的,可以在任何goroutine中运行,但是大多数函数和操作,包括许多GUI和网络操作,都只能在主goroutine中运行。这是因为在Go中,所有的goroutine都是并行的,但是主goroutine是特别的那个,它是所有goroutine的协调者,它负责启动和停止所有的goroutine。因此,只有主goroutine可以安全地执行许多操作,包括显示GUI或启动和停止其他goroutine。而三个函数:“show()”是非模式对话框(Modeless Dialog)。调用该函数后,程序的控制权会立即返回给调用函数,不会阻塞程序的其他操作。也就是说,即使对话框在弹出的时候,用户没有关闭它,程序的其他部分也可以继续运行。“ShowAndR
起因今天下载了英伟达的控制面板,调整了一下缩放又不习惯,于是又设置回去了。打开PS后发现PS弹框,屏幕2351配置错误什么的(手太快点掉了)后来ps之后输出图像,发现图像色差太大。经过后来在知乎上找到一篇,说是因为色彩配置文件出了问题。选择编辑菜单里的转换为配置文件选项打开,选择配置文件默认情况现在是adobe rgb(1998)选项,点击下拉列表,把其改为Srgb IEC61966-2.1色彩配置文件进行保存有时导出的图片有色差,跟电脑的色彩配置文件也有一定的关系,打开颜色管理,把其改为SRGB IEC61966-2.1即可经过以上努力,我的问题并未解决,依旧存在色差。结果于是我抱着试一试的心态, 在电脑左下角的开始按钮中搜索校准→校准显示器颜色→根据电脑指导来校准显示器 ;出人意料的是,这个方法奏效了。配置文件中多了一行显示校准文件,事情解决了。如果你也有这个问题,不妨试一试这个解决方法。
else { this.server.mapLock.Lock() delete(this.server.OnlineMap, this.Name) this.server.OnlineMap[newName] = this this.server.mapLock.Unlock() //this是一个指针对象 this.Name = newName this.SendMsg("更换用户名" + this.Name + "\n") }第一次看这段代码没有反应过来,为什么先存储到OnlineMap之后,再更新对象的Name还能改变OnlineMap中的对象。后来发现this本身是个指针对象,而OnlineMap存储的是this的指针。因此改变this指向的对象其实就是改变OnlineMap中存储的对象。
Tips: Goroutine是Go语言中的轻量级线程实现,由Go运行时管理;Goroutine比线程更小,十几个Goroutine可能体现在底层就是五六个线程。比thread更易用、更高效、更轻便。总所周知,Go语言以其良好的原生多线程支持闻名于世。而golang多线程的声明极其简单,只需要在执行函数前添加go便可实现java一顿Thread.run()的操作。而其优秀的channal机制可以轻易的让线程之间进行通信,甚至不用加锁就线程安全。今日就来小实验一下来探究他们的特性。并发实验莫过于消费者与生产者实验最为经典。首先我们请出二位主角:func producer(ch chan int) { list := [6]int{1, 2, 3, 4, 5, 6} for _, value := range list { fmt.Println("我放进去了:", value) ch <- value } close(ch) } func customer(ch chan int) { f
walker
人生若只如初见
本站由
特别加持