【Go语言】
Mike江
A goal is not always meant to be reached, it often serves simply as something to aim at. ──Bruce Lee
目标不一定是需要达到的,目标往往只是用来帮助你瞄准方向。──李小龙
展开
-
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 · 140662 阅读 · 5 评论 -
Go基础编程:基础数据类型
分类Go语言内置以下这些基础类型: 类型 名称 长度 零值 说明 bool 布尔类型 1 false 其值不为真即为假,不可以用数字代表true或false byte 字节型 1 0 uint8别名 rune 字符类型 4 0 专用于存储unicode编码,等价于uint32 int,...原创 2017-09-15 09:43:49 · 12777 阅读 · 2 评论 -
Go基础编程:格式化输出、类型转换、类型别名
使用fmt包来格式化字符串fmt.Printf()格式字符串: 打印格式 含义 %% 一个%字面量 %b 一个二进制整数值(基数为2),或者是一个(高级的)用科学计数法表示的指数为2的浮点数 %c 字符型。可以把输入的数字按照ASCII码相应转换为对应的字符 %d 一个十进制数值(基数为10) %e 以科学记数法e表...原创 2017-09-15 10:38:33 · 7851 阅读 · 0 评论 -
Go基础编程:运算符
算术运算符 运算符 术语 示例 结果 + 加 10 + 5 15 - 减 10 - 5 5 * 乘 10 * 5 50 / 除 10 / 5 2 % 取模(取余) 10 % 3 1 ++ 后自增,没有前自增 a=0; a++ a=1 – 后自...转载 2017-09-15 15:15:02 · 8500 阅读 · 1 评论 -
Go基础编程:流程控制
Go语言支持最基本的三种程序运行结构:顺序结构、选择结构、循环结构。顺序结构:程序按顺序执行,不发生跳转。选择结构:依据是否满足条件,有选择的执行相应功能。循环结构:依据条件是否满足,循环多次执行某段代码。选择结构if语句if var a int = 3 if a == 3 { //条件表达式没有括号 fmt.Println...原创 2017-09-24 18:40:44 · 4648 阅读 · 0 评论 -
Go基础编程:自定义函数
定义格式函数构成代码执行的逻辑结构。在Go语言中,函数的基本组成为:关键字func、函数名、参数列表、返回值、函数体和返回语句。Go 语言函数定义格式如下:func FuncName(/*参数列表*/) (o1 type1, o2 type2/*返回类型*/) { //函数体 return v1, v2 //返回多个值}函数定义说明:func:函数由关...原创 2017-10-01 15:35:14 · 13477 阅读 · 1 评论 -
Go基础编程:递归函数、函数类型、匿名函数与闭包
1. 递归函数递归指函数可以直接或间接的调用自身。递归函数通常有相同的结构:一个跳出条件和一个递归体。所谓跳出条件就是根据传入的参数判断是否需要停止递归,而递归体则是函数自身所做的一些处理。//通过循环实现1+2+3……+100func Test01() int { i := 1 sum := 0 for i = 1; i <= 100; i++ {...原创 2017-10-01 16:38:43 · 4417 阅读 · 0 评论 -
Go基础编程:作用域
作用域为已声明标识符所表示的常量、类型、变量、函数或包在源代码中的作用范围。局部变量在函数体内声明的变量、参数和返回值变量就是局部变量,它们的作用域只在函数体内:func test(a, b int) { var c int a, b, c = 1, 2, 3 fmt.Printf("a = %d, b = %d, c = %d\n", a, b, c)...原创 2017-11-11 11:51:30 · 2765 阅读 · 0 评论 -
Go基础编程:工作区
工作区介绍Go代码必须放在工作区中。工作区其实就是一个对应于特定工程的目录,它应包含3个子目录:src目录、pkg目录和bin目录。src目录:用于以代码包的形式组织并保存Go源码文件。(比如:.go .c .h .s等)pkg目录:用于存放经由go install命令构建安装后的代码包(包含Go库源码文件)的“.a”归档文件。bin目录:与pkg目录类似,在通过go install...原创 2017-11-11 12:18:56 · 4578 阅读 · 0 评论 -
Go基础编程:包
所有 Go 语言的程序都会组织成若干组文件,每组文件被称为一个包。这样每个包的代码都可以作为很小的复用单元,被其他项目引用。一个包的源代码保存在一个或多个以.go为文件后缀名的源文件中,通常一个包所在目录路径的后缀是包的导入路径。自定义包对于一个较大的应用程序,我们应该将它的功能性分隔成逻辑的单元,分别在不同的包里实现。我们创建的的自定义包最好放在GOPATH的src目录下(或者G...原创 2017-11-11 12:25:41 · 4571 阅读 · 0 评论 -
Go基础编程:工程管理
概述在实际的开发工作中,直接调用编译器进行编译和链接的场景是少而又少,因为在工程中不 会简单到只有一个源代码文件,且源文件之间会有相互的依赖关系。如果这样一个文件一个文件逐步编译,那不亚于一场灾难。 Go语言的设计者作为行业老将,自然不会忽略这一点。早期Go语言使用makefile作为临时方案,到了Go 1发布时引入了强大无比的Go命令行工具。Go命令行工具的革命性之处在于彻底消除了工程...原创 2017-11-11 12:57:36 · 6025 阅读 · 0 评论 -
Go基础编程:复合类型—指针
指针是一个代表着某个内存地址的值。这个内存地址往往是在内存中存储的另一个变量的值的起始位置。Go语言对指针的支持介于Java语言和C/C++语言之间,它既没有想Java语言那样取消了代码对指针的直接操作的能力,也避免了C/C++语言中由于对指针的滥用而造成的安全和可靠性问题。基本操作Go语言虽然保留了指针,但与其它编程语言不同的是:默认值 nil,没有 NULL 常量操作符 “...原创 2017-11-11 14:24:47 · 5910 阅读 · 1 评论 -
Go基础编程:复合类型—数组
概述数组是指一系列同一类型数据的集合。数组中包含的每个数据被称为数组元素(element),一个数组包含的元素个数被称为数组的长度。数组⻓度必须是常量,且是类型的组成部分。 [2]int 和 [3]int 是不同类型。 var n int = 10 var a [n]int //err, non-constant array bound n var b [1...原创 2017-11-11 14:28:15 · 7511 阅读 · 0 评论 -
Go基础编程:复合类型—切片slice
1. 概述数组的长度在定义之后无法再次修改;数组是值类型,每次传递都将产生一份副本。显然这种数据结构无法完全满足开发者的真实需求。Go语言提供了数组切片(slice)来弥补数组的不足。切片并不是数组或数组指针,它通过内部指针和相关属性引⽤数组⽚段,以实现变⻓⽅案。slice并不是真正意义上的动态数组,而是一个引用类型。slice总是指向一个底层array,slice的声明也可以像arr...原创 2017-12-13 11:21:56 · 7758 阅读 · 0 评论 -
Go基础编程:复合类型—map
1. 概述Go语言中的map(映射、字典)是一种内置的数据结构,它是一个无序的key—value对的集合,比如以身份证号作为唯一键来标识一个人的信息。 map格式为: map[keyType]valueType在一个map里所有的键都是唯一的,而且必须是支持==和!=操作符的类型,切片、函数以及包含切片的结构类型这些类型由于具有引用语义,不能作为映射的键,使用这些类型会...原创 2017-12-13 17:01:03 · 5257 阅读 · 0 评论 -
Go基础编程:复合类型—结构体
1 结构体类型有时我们需要将不同类型的数据组合成一个有机的整体,如:一个学生有学号/姓名/性别/年龄/地址等属性。显然单独定义以上变量比较繁琐,数据不便于管理。结构体是一种聚合的数据类型,它是由一系列具有相同类型或不同类型的数据构成的数据集合。每个数据称为结构体的成员。2 结构体初始化2.1 普通变量type Student struct { id ...原创 2017-12-26 09:40:37 · 3487 阅读 · 0 评论 -
Go基础编程:面向对象—匿名组合
1 匿名字段一般情况下,定义结构体的时候是字段名与其类型一一对应,实际上Go支持只提供类型,而不写字段名的方式,也就是匿名字段,也称为嵌入字段。当匿名字段也是一个结构体的时候,那么这个结构体所拥有的全部字段都被隐式地引入了当前定义的这个结构体。//人type Person struct { name string sex byte age int}...原创 2017-12-26 16:48:31 · 22933 阅读 · 0 评论 -
Go基础编程:命名、变量、常量
命名Go语言中的函数名、变量名、常量名、类型名、语句标号和包名等所有的命名,都遵循一个简单的命名规则:一个名字必须以一个字母(Unicode字母)或下划线开头,后面可以跟任意数量的字母、数字或下划线。大写字母和小写字母是不同的:heapSort和Heapsort是两个不同的名字。Go语言中类似if和switch的关键字有25个(均为小写)。关键字不能用于自定义名字,只能在特定语法结构中使用...原创 2017-09-12 09:57:27 · 8006 阅读 · 0 评论 -
Go基础编程:第一个Go程序
Hello Go// hello.gopackage mainimport ( "fmt")func main() { fmt.Println("Hello Go!")}代码分析每个Go源代码文件的开头都是一个package声明,表示该Go代码所属的包。包是Go语言里最基本的分发单位,也是工程管理中依赖关系的体现。要生成Go可执行程序,必须建立...原创 2017-09-11 18:05:33 · 5845 阅读 · 1 评论 -
Go基础编程:环境搭建
安装和设置Go环境搭建:ubuntu+sublime3Go环境搭建:ubuntu+liteideGo环境搭建:windows+sublime3Go环境搭建:windows+liteide标准命令概述Go语言中包含了大量用于处理Go语言代码的命令和工具。其中,go命令就是最常用的一个,它有许多子命令。这些子命令都拥有不同的功能,如下所示。build:用于编译给定的代码...原创 2017-09-11 18:00:59 · 5150 阅读 · 1 评论 -
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 · 266453 阅读 · 20 评论 -
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 · 6228 阅读 · 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 · 2552 阅读 · 0 评论 -
Go语言版黑白棋(九):吃子
功能说明增加吃子规则算法。在一个空格新落下一个棋子,并且翻转对手一个或多个棋子,落子必须要吃子。原理说明示例代码package mainimport ( "fmt" "os" "strconv" "unsafe" "github.com/mattn/go-gtk/gdk" "github.com/matt.原创 2018-02-11 12:40:13 · 3461 阅读 · 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 · 2090 阅读 · 0 评论 -
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 · 2775 阅读 · 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 · 3705 阅读 · 0 评论 -
Go语言版黑白棋(五):黑白子提示闪烁效果
功能说明通过定时器,实现黑白子提示闪烁效果。大致流程是这样,定时器每隔500毫秒产生一次信号,调用其处理函数,函数里做这样的事情,如果image原来是显示的,则隐藏,原来是隐藏的,则显示。示例代码package mainimport ( "fmt" "os" "unsafe" "github.com/mattn/go-gtk/gdk" "g...原创 2018-02-11 00:22:04 · 3505 阅读 · 0 评论 -
Go语言版黑白棋(四):界面其它设计
功能说明界面上增加3个标签,分别用于显示黑白子棋子个数,还有一个用于显示倒计时的时间。还增加2个图片控件,用于提示该谁落子(当前该黑子下,还是白子下)。glade界面设计示例代码package mainimport ( "fmt" "os" "unsafe" "github.com...原创 2018-02-11 00:16:13 · 4165 阅读 · 0 评论 -
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 · 3148 阅读 · 0 评论 -
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 · 4097 阅读 · 1 评论 -
Go语言版黑白棋(一):游戏说明
1 界面参考图片资源下载:https://pan.baidu.com/s/1i6TyX5V2 游戏说明棋盘为8×8的方格布局,开局时在棋盘正中有摆好的四枚棋子,黑白各2枚,交叉放置,由执黑棋的一方先落子,双方交替下子,棋子落在方格内,一局游戏结束后双方更换执子颜色。合法的棋步包括:在一个空格新落下一个棋子,并且翻转对手一个或多个棋子,落子必须要吃子。下子方式:把自己颜色...原创 2018-02-10 23:54:54 · 5508 阅读 · 1 评论 -
Go版GTK:常用事件—绘图事件
GTK界面只要有图片的地方,其底层实际上是通过绘图实现的。绘图实际上也是事件的一种,GTK中,绘图事件也叫曝光事件。绘图的操作需要放在事件回调函数里。1 绘图触发条件绘图时所触发的信号:expose-event。只要触发曝光事件信号”expose-event”,就会自动调用所连接的回调函数。这里需要注意的是,曝光事件信号 “expose-event” 默认的情况下,是自动触发的(当...原创 2018-02-08 17:04:59 · 9461 阅读 · 2 评论 -
Go版GTK:常用控件—按钮
按钮在GUI里应用最为广泛,我们几乎能在所有的界面中看到按钮。 glade设计如下: 按钮的常用信号: 信号标识 触发条件 “clicked” 按下按钮时触发 “pressed” 按下按钮时触发 “released” 释放按钮时触发示例代码:package mainimport ( "fmt" ...原创 2018-02-06 12:19:09 · 32317 阅读 · 0 评论 -
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 · 14526 阅读 · 6 评论 -
Go基础编程:Go语言介绍
本文转自:https://www.zhihu.com/question/21409296Go语言是什么2009年11月10日,Go语言正式成为开源编程语言家庭的一员。Go语言(或称Golang)是云计算时代的C语言。Go语言的诞生是为了让程序员有更高的生产效率,Go语言专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并...转载 2017-09-11 17:53:51 · 5520 阅读 · 0 评论 -
Go基础编程:面向对象—方法
1 概述在面向对象编程中,一个对象其实也就是一个简单的值或者一个变量,在这个对象中会包含一些函数,这种带有接收者的函数,我们称为方法(method)。 本质上,一个方法则是一个和特殊类型关联的函数。一个面向对象的程序会用方法来表达其属性和对应的操作,这样使用这个对象的用户就不需要直接去操作对象,而是借助方法来做这些事情。在Go语言中,可以给任意自定义类型(包括内置类型,但不包括指针类型...原创 2017-12-28 14:03:03 · 3913 阅读 · 0 评论 -
Go基础编程:面向对象—接口
1 概述在Go语言中,接口(interface)是一个自定义类型,接口类型具体描述了一系列方法的集合。接口类型是一种抽象的类型,它不会暴露出它所代表的对象的内部值的结构和这个对象支持的基础操作的集合,它们只会展示出它们自己的方法。因此接口类型不能将其实例化。Go通过接口实现了鸭子类型(duck-typing):“当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以...原创 2017-12-29 14:55:46 · 5139 阅读 · 0 评论 -
Go版GTK:信号处理
1 概述前面我们学习的GTK界面都是静态的,我们按下按钮它是没有响应的,如何让它有响应呢?接下来我们一起学习GTK的信号处理。GTK采用了信号与回调函数来处理窗口外部传来的事件、消息或信号。当信号发生时,程序自动调用为信号连接(注册)的回调函数。学习图形界面编程,我们会经常接触到“信号”这个名词。GTK中的“信号”实际上是一种软件中断。“中断”在我们生活中经常遇到,譬如,我正在房间里打...原创 2018-02-03 21:02:42 · 27154 阅读 · 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 · 44091 阅读 · 5 评论