Go语言开发实战
Go语言(或称Golang)是云计算时代的C语言。Go语言的诞生是为了让程序员有更高的生产效率,Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。
Mike江
A goal is not always meant to be reached, it often serves simply as something to aim at. ──Bruce Lee
目标不一定是需要达到的,目标往往只是用来帮助你瞄准方向。──李小龙
展开
-
Go语言版黑白棋(七):初始化棋子、改变角色
功能说明启动程序时,棋盘默认有黑白棋各2枚,落子时,黑白子交替下(角色切换)原理说明示例代码package mainimport ( "fmt" "os" "unsafe" "github.com/mattn/go-gtk/gdk" "github.com/mattn/go-gtk/gdkpixbuf" "g.原创 2018-02-11 11:42:49 · 2784 阅读 · 0 评论 -
Go语言版黑白棋(八):倒计时
功能说明通过定时器实现倒计时功能,时间为20s,时间到后,如果没有落子,让对方下。示例代码package mainimport ( "fmt" "os" "strconv" "unsafe" "github.com/mattn/go-gtk/gdk" "github.com/mattn/go-gtk/gdkpixbuf&quo原创 2018-02-11 12:26:22 · 2102 阅读 · 0 评论 -
Go语言版黑白棋(九):吃子
功能说明增加吃子规则算法。在一个空格新落下一个棋子,并且翻转对手一个或多个棋子,落子必须要吃子。原理说明示例代码package mainimport ( "fmt" "os" "strconv" "unsafe" "github.com/mattn/go-gtk/gdk" "github.com/matt.原创 2018-02-11 12:40:13 · 3475 阅读 · 0 评论 -
Go语言版黑白棋(十):棋子个数统计、胜负判断
功能说明增加棋子个数统计、胜负判断功能,游戏结束后可选择继续游戏。示例代码package mainimport ( "fmt" "os" "strconv" "unsafe" "github.com/mattn/go-gtk/gdk" "github.com/mattn/go-gtk/gdkpixbuf"原创 2018-02-11 12:46:31 · 2562 阅读 · 0 评论 -
Go语言版黑白棋(十一):机器落子
功能说明机器为白子。机器优先在4个角落落子,如果这4个位置不能吃子,则落在能吃子最多的位置。示例代码package mainimport ( "fmt" "os" "strconv" "unsafe" "github.com/mattn/go-gtk/gdk" "github.com/mattn/go-gtk/gdkpi.原创 2018-02-11 12:51:16 · 6239 阅读 · 0 评论 -
Go语言版黑白棋(一):游戏说明
1 界面参考图片资源下载:https://pan.baidu.com/s/1i6TyX5V2 游戏说明棋盘为8×8的方格布局,开局时在棋盘正中有摆好的四枚棋子,黑白各2枚,交叉放置,由执黑棋的一方先落子,双方交替下子,棋子落在方格内,一局游戏结束后双方更换执子颜色。合法的棋步包括:在一个空格新落下一个棋子,并且翻转对手一个或多个棋子,落子必须要吃子。下子方式:把自己颜色...原创 2018-02-10 23:54:54 · 5531 阅读 · 1 评论 -
Go语言版黑白棋(二):无边框窗口实现
功能说明需要实现功能为,给窗口去表框,却可以通过鼠标实现移动。glade界面设计示例代码package mainimport ( "fmt" "os" "unsafe" "github.com/mattn/go-gtk/gdk" // "github.com/mattn/go-gtk/gdkpixbuf" "git.原创 2018-02-11 00:04:03 · 4104 阅读 · 1 评论 -
Go语言版黑白棋(三):背景图、最小化、关闭窗口
功能说明设置一张背景图,增加2个按钮:最小化、关闭窗口。glade界面设计示例代码package mainimport ( "fmt" "os" "unsafe" "github.com/mattn/go-gtk/gdk" "github.com/mattn/go-gtk/gdkpixbuf" ".原创 2018-02-11 00:09:35 · 3157 阅读 · 0 评论 -
Go语言版黑白棋(四):界面其它设计
功能说明界面上增加3个标签,分别用于显示黑白子棋子个数,还有一个用于显示倒计时的时间。还增加2个图片控件,用于提示该谁落子(当前该黑子下,还是白子下)。glade界面设计示例代码package mainimport ( "fmt" "os" "unsafe" "github.com...原创 2018-02-11 00:16:13 · 4173 阅读 · 0 评论 -
Go语言版黑白棋(五):黑白子提示闪烁效果
功能说明通过定时器,实现黑白子提示闪烁效果。大致流程是这样,定时器每隔500毫秒产生一次信号,调用其处理函数,函数里做这样的事情,如果image原来是显示的,则隐藏,原来是隐藏的,则显示。示例代码package mainimport ( "fmt" "os" "unsafe" "github.com/mattn/go-gtk/gdk" "g...原创 2018-02-11 00:22:04 · 3513 阅读 · 0 评论 -
Go语言版黑白棋(六):落子
功能说明鼠标点击棋盘方格,落子。需要使用鼠标事件,棋子通过绘图事件画的。原理说明通过二维数组标志棋盘: 示例代码package mainimport ( "fmt" "os" "unsafe" "github.com/mattn/go-gtk/gdk" "github.com/mattn/go-gtk/gdkpixbu...原创 2018-02-11 00:39:26 · 3709 阅读 · 0 评论 -
Go版GTK:常用事件—绘图事件
GTK界面只要有图片的地方,其底层实际上是通过绘图实现的。绘图实际上也是事件的一种,GTK中,绘图事件也叫曝光事件。绘图的操作需要放在事件回调函数里。1 绘图触发条件绘图时所触发的信号:expose-event。只要触发曝光事件信号”expose-event”,就会自动调用所连接的回调函数。这里需要注意的是,曝光事件信号 “expose-event” 默认的情况下,是自动触发的(当...原创 2018-02-08 17:04:59 · 9482 阅读 · 2 评论 -
Go版GTK:常用事件—大小改变事件
当窗口初始化,被移动或拉伸时,会触发大小改变事件。事件标识: 事件标识 触发条件 “configure_event” 窗口大小改变时触发示例代码:package mainimport ( "fmt" "os" "github.com/mattn/go-gtk/gtk")func main() { gtk...原创 2018-02-08 20:19:23 · 5954 阅读 · 0 评论 -
Go语言图形界面开发:Go版GTK
本人录制的Go入门视频go语言开发实战:https://pan.baidu.com/s/1bqOR9qZ Go语言GUI编程:https://pan.baidu.com/s/13yoUhqEUyrT_9bpi7K0rYQ初识GTK01、GUI概述 02、GTK简介 03、环境搭建(windows)Go语言快速入门04、Go入门教程Hello GTK05、一...原创 2018-02-08 21:17:27 · 266522 阅读 · 20 评论 -
Go版GTK:常用事件—键盘事件
事件标识: 事件标识 触发条件 “key-press-event” 键盘按下时触发 “key-release-event” 键盘抬起时触发示例代码:package mainimport ( "fmt" "os" "unsafe" "github.com/mattn/go-gtk/gdk" "g...原创 2018-02-08 11:40:22 · 7277 阅读 · 0 评论 -
Go版GTK:常用事件—鼠标事件
鼠标事件,可以理解为操作鼠标的动作。对于窗口而言,用户操作鼠标,窗口检测到鼠标的操作( 产生一个信号 ),然后去做相应处理( 调用其规定的回调函数 ),即为鼠标事件。窗口默认不捕获鼠标的操作,需要手动添加让其捕获: //添加鼠标按下事件 //BUTTON_PRESS_MASK: 鼠标按下,触发信号"button-press-event" //BUTTON_RELE...原创 2018-02-07 18:40:50 · 7572 阅读 · 0 评论 -
Go版GTK:鼠标事件应用—窗口移动
创建窗口时,如果指定类型为弹出类型,即为无边框窗口,这时候,无法通过边框移动窗口,这时可以借助鼠标点击、移动事件实现窗口的移动。坐标说明: 移动坐标说明: 示例代码:package mainimport ( // "fmt" "os" "unsafe" "github.com/mattn/go-gtk/gdk" "github...原创 2018-02-07 20:57:03 · 7061 阅读 · 0 评论 -
Go版GTK:定时器
定时器在应用编程里用得很广,我们手机里的闹钟,幻灯片播放图片等应用都用到定时器。定时器,每隔一段时间干一件事(程序里表现为调用一个函数),像闹钟,每隔一天响一次。1 核心API说明import "github.com/mattn/go-gtk/glib"func TimeoutAdd(interval uint, f interface{}, datas ...interfac...原创 2018-02-06 23:29:52 · 5385 阅读 · 1 评论 -
Go版GTK:常用控件—对话框
glade设计如下: 示例代码:package mainimport ( "fmt" "os" "github.com/mattn/go-gtk/gtk")func main() { gtk.Init(&os.Args) builder := gtk.NewBuilder() //新建builder b...原创 2018-02-07 13:05:49 · 8013 阅读 · 1 评论 -
Go版GTK:常用控件—图片控件
图片控件和标签的作用很类似,都是作为显示用的,只是图片控件显示的内容是图片。 示例代码:package mainimport ( "fmt" "os" "github.com/mattn/go-gtk/gdkpixbuf" "github.com/mattn/go-gtk/gtk")func main() { gtk.Init(...原创 2018-02-05 18:04:37 · 14560 阅读 · 6 评论 -
Go版GTK:常用控件—进度条
我们到处都能看到进度条的应用,我们下载拷贝个文件,下载个电影等总能看到进度条的影子,如图: 示例代码:package mainimport ( "fmt" "os" "github.com/mattn/go-gtk/gtk")func main() { gtk.Init(&os.Args) builder := gtk...原创 2018-02-06 11:15:35 · 39556 阅读 · 2 评论 -
Go版GTK:常用控件—按钮
按钮在GUI里应用最为广泛,我们几乎能在所有的界面中看到按钮。 glade设计如下: 按钮的常用信号: 信号标识 触发条件 “clicked” 按下按钮时触发 “pressed” 按下按钮时触发 “released” 释放按钮时触发示例代码:package mainimport ( "fmt" ...原创 2018-02-06 12:19:09 · 32344 阅读 · 0 评论 -
Go版GTK:常用控件—行编辑
行编辑,只允许输入一行内容的控件,如密码输入框。 glade设计如下: 常用信号: 信号标识 触发条件 “activate” 行编辑区内部按回车键时触发示例代码:package mainimport ( "fmt" "os" "github.com/mattn/go-gtk/gtk")func main...原创 2018-02-06 17:45:08 · 6044 阅读 · 0 评论 -
Go版GTK:常用控件—布局
1 水平布局glade设计如下: 示例代码:package mainimport ( "os" "github.com/mattn/go-gtk/gtk")func main() { gtk.Init(&os.Args) builder := gtk.NewBuilder() //新建builder ...原创 2018-02-06 20:30:10 · 7205 阅读 · 0 评论 -
Go版GTK:环境搭建(windows)
1 下载安装msys2MSYS2 (Minimal SYStem 2) 是一个MSYS的独立改写版本,主要用于 shell 命令行开发环境。同时它也是一个在Cygwin (POSIX 兼容性层) 和 MinGW-w64(从”MinGW-生成”)基础上产生的,追求更好的互操作性的 Windows 软件。官方网址:http://www.msys2.org/ 百度云下载地址:https:/...原创 2018-01-31 19:58:54 · 81303 阅读 · 42 评论 -
Go版GTK:一个简单的空白窗口
1 示例代码package mainimport ( "os" "github.com/mattn/go-gtk/gtk")func main() { gtk.Init(&os.Args) //环境初始化 window := gtk.NewWindow(gtk.WINDOW_TOPLEVEL) //创建窗口 window.SetP...原创 2018-02-01 13:12:28 · 59021 阅读 · 4 评论 -
Go版GTK:控件
1 控件简介控件是对数据和方法的封装。控件有自己的属性和方法。属性是指控件的特征。方法是指控件的一些简单而可见的功能。如按钮就是一个控件,这个按钮是方形的,里面有张图片,这是我们能看到外观属性,同时,这个按钮具备被人按下的功能。GTK中控件主要分为两类:容器控件,非容器控件。容器控件:它可以容纳别的控件,我们可以理解为盒子,盒子拿来装东西。容器控件又分为两类,一类只能容纳一个控件,如...原创 2018-02-02 10:55:14 · 16144 阅读 · 1 评论 -
Go版GTK:信号处理
1 概述前面我们学习的GTK界面都是静态的,我们按下按钮它是没有响应的,如何让它有响应呢?接下来我们一起学习GTK的信号处理。GTK采用了信号与回调函数来处理窗口外部传来的事件、消息或信号。当信号发生时,程序自动调用为信号连接(注册)的回调函数。学习图形界面编程,我们会经常接触到“信号”这个名词。GTK中的“信号”实际上是一种软件中断。“中断”在我们生活中经常遇到,譬如,我正在房间里打...原创 2018-02-03 21:02:42 · 27191 阅读 · 0 评论 -
Go版GTK:glade
1 glade简介请参考:http://blog.csdn.net/tennysonsky/article/details/430160352 glade安装go源码使用的是gtk2版本,默认安装的glade关联的为gtk3.0以上的版本,需要单独安装一个合适版本的glade。详情请参考:http://blog.csdn.net/tennysonsky/article/deta...原创 2018-02-04 23:57:03 · 44123 阅读 · 5 评论 -
Go版GTK:常用控件—窗口
常用信号: 信号标识 触发条件 “destroy” 按关闭窗口按钮时触发示例代码:package mainimport ( "os" "github.com/mattn/go-gtk/gtk")func main() { gtk.Init(&os.Args) builder := gtk.Ne...原创 2018-02-05 01:42:55 · 32841 阅读 · 4 评论 -
Go版GTK:常用控件—标签
标签主要是显示文本信息,用作标志: 示例代码:package mainimport ( "fmt" "os" "github.com/mattn/go-gtk/gtk")func main() { gtk.Init(&os.Args) builder := gtk.NewBuilder() //新建buil...原创 2018-02-05 01:45:01 · 24694 阅读 · 1 评论 -
Go入门教程
本人录制的Go入门视频go语言开发实战:https://pan.baidu.com/s/1bqOR9qZ Go语言GUI编程:https://pan.baidu.com/s/13yoUhqEUyrT_9bpi7K0rYQ基础编程01、Go语言介绍 02、环境搭建 03、第一个Go程序04、命名、变量、常量 05、基础数据类型 06、格式化输出、类型转换、类型别名 07、...原创 2018-01-19 10:06:11 · 140693 阅读 · 5 评论 -
Go基础编程:JSON处理
JSON (JavaScript Object Notation)是一种比XML更轻量级的数据交换格式,在易于人们阅读和编写的同时,也易于程序解析和生成。尽管JSON是JavaScript的一个子集,但JSON采用完全独立于编程语言的文本格式,且表现为键/值对集合的文本描述形式(类似一些编程语言中的字典结构),这使它成为较为理想的、跨平台、跨语言的数据交换语言。开发者可以用 JSON 传输...原创 2018-01-17 14:32:33 · 8427 阅读 · 1 评论 -
Go基础编程:文件操作
1 相关api介绍1.1 建立与打开文件新建文件可以通过如下两个方法:func Create(name string) (file *File, err Error)根据提供的文件名创建新的文件,返回一个文件对象,默认权限是0666的文件,返回的文件对象是可读写的。func NewFile(fd uintptr, name string) *File根据文件描述符创建相...原创 2018-01-17 16:09:17 · 5201 阅读 · 1 评论 -
Go基础编程:网络概述
1 网络协议从应用的角度出发,协议可理解为“规则”,是数据传输和数据的解释的规则。假设,A、B双方欲传输文件。规定:第一次,传输文件名,接收方接收到文件名,应答OK给传输方;第二次,发送文件的尺寸,接收方接收到该数据再次应答一个OK;第三次,传输文件内容。同样,接收方接收数据完成后应答OK表示文件内容接收成功。由此,无论A、B之间传递何种文件,都是通过三次数据传输来完成。A...原创 2018-01-18 10:10:32 · 3047 阅读 · 0 评论 -
Go基础编程:Socket编程
1 什么是SocketSocket起源于Unix,而Unix基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。Socket就是该模式的一个实现,网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用:Socket(),该函数返回一个整型的So...原创 2018-01-18 10:56:06 · 2813 阅读 · 0 评论 -
Go基础编程:HTTP报文浅析
1 概述1.1 Web工作方式我们平时浏览网页的时候,会打开浏览器,输入网址后按下回车键,然后就会显示出你想要浏览的内容。在这个看似简单的用户行为背后,到底隐藏了些什么呢?对于普通的上网过程,系统其实是这样做的:浏览器本身是一个客户端,当你输入URL的时候,首先浏览器会去请求DNS服务器,通过DNS获取相应的域名对应的IP,然后通过IP地址找到IP对应的服务器后,要求建立TCP连接...原创 2018-01-18 18:44:57 · 3727 阅读 · 0 评论 -
Go基础编程:HTTP编程
Go语言标准库内建提供了net/http包,涵盖了HTTP客户端和服务端的具体实现。使用net/http包,我们可以很方便地编写HTTP客户端或服务端的程序。1 HTTP服务端示例代码:package mainimport ( "fmt" "net/http")//服务端编写的业务逻辑处理程序//hander函数: 具有func(w http.Res...原创 2018-01-18 18:49:29 · 3717 阅读 · 0 评论 -
Go基础编程:并发编程—select
1 select作用Go里面提供了一个关键字select,通过select可以监听channel上的数据流动。select的用法与switch语言非常类似,由select开始一个新的选择块,每个选择条件由case语句来描述。与switch语句可以选择任何可使用相等比较的条件相比, select有比较多的限制,其中最大的一条限制就是每个case语句里必须是一个IO操作,大致的结构如下:...转载 2018-01-16 08:58:50 · 11670 阅读 · 0 评论 -
Go基础编程:字符串处理
本文转自:https://github.com/astaxie/build-web-application-with-golang/blob/master/zh/07.6.md字符串在开发中经常用到,包括用户的输入,数据库读取的数据等,我们经常需要对字符串进行分割、连接、转换等操作,我们可以通过Go标准库中的strings和strconv两个包中的函数进行相应的操作。1 字符串操作...转载 2018-01-16 11:43:59 · 10159 阅读 · 0 评论