Go语言教程
Go 语言教程 Go 是一个开源的编程语言,它能让构造简单、可靠且高效的软件变得容易。Go是从2007年末由Robert Griesemer, Rob Pike, Ken Thompson主持开发,后来还加入了Ian Lance Taylor, Russ Cox等人,并最终于2009年11月开源,在2012年早些时候发布了Go 1稳定版本。现在Go的开发已经是完全开放的,并且拥有一个活跃的社区。 Go 语言特色 简洁、快速、安全并行、有趣、开源内存管理、数组安全、编译迅速 Go 语言用途Go 语言被设计成一门应用于搭载 Web 服务器,存储集群或类似用途的巨型中央服务器的系统编程语言。对于高性能分布式系统领域而言,Go 语言无疑比大多数其它语言有着更高的开发效率。它提供了海量并行的支持,这对于游戏服务端的开发而言是再好不过了。 第一个 Go 程序接下来我们来编写第一个 Go 程序 hello.go(Go 语言源文件的扩展是 .go),代码如下: hello.go 文件 package main import “fmt” func main() { ...
Go语言接口
Go 语言接口 接口(interface)是 Go 语言中的一种类型,用于定义行为的集合,它通过描述类型必须实现的方法,规定了类型的行为契约。Go 语言提供了另外一种数据类型即接口,它把所有的具有共性的方法定义在一起,任何其他类型只要实现了这些方法就是实现了这个接口。Go 的接口设计简单却功能强大,是实现多态和解耦的重要工具。接口可以让我们将不同的类型绑定到一组公共的方法上,从而实现多态和灵活的设计。接口的特点隐式实现: Go 中没有关键字显式声明某个类型实现了某个接口。只要一个类型实现了接口要求的所有方法,该类型就自动被认为实现了该接口。 接口类型变量: 接口变量可以存储实现该接口的任意值。接口变量实际上包含了两个部分:动态类型:存储实际的值类型。动态值:存储具体的值。 零值接口: 接口的零值是 nil。一个未初始化的接口变量其值为 nil,且不包含任何动态类型或值。 空接口: 定义为 interface{},可以表示任何类型。接口的常见用法多态:不同类型实现同一接口,实现多态行为。解耦:通过接口定义依赖关系,降低模块之间的耦合。泛化:使用空接口 interface{}...
Go语言指针
Go 语言指针Go 语言中指针是很容易学习的,Go 语言中使用指针可以更简单的执行一些任务。接下来让我们来一步步学习 Go 语言指针。我们都知道,变量是一种使用方便的占位符,用于引用计算机内存地址。Go 语言的取地址符是 &,放到一个变量前使用就会返回相应变量的内存地址。以下实例演示了变量在内存中地址:实例package main import “fmt” func main() { var a int = 10 fmt.Printf(“变量的地址: %x\n”, &a )} 执行以上代码输出结果为:变量的地址: 20818a220 现在我们已经了解了什么是内存地址和如何去访问它。接下来我们将具体介绍指针。 什么是指针一个指针变量指向了一个值的内存地址。类似于变量和常量,在使用指针前你需要声明指针。指针声明格式如下:var var_name *var-type var-type 为指针类型,var_name 为指针变量名,* 号用于指定变量是作为一个指针。以下是有效的指针声明:var ip int /...
Go语言循环语句
Go 语言循环语句在不少实际问题中有许多具有规律性的重复操作,因此在程序中就需要重复执行某些语句。以下为大多编程语言循环程序的流程图: Go 语言提供了以下几种类型循环处理语句: 循环类型 描述 for 循环 重复执行语句块 循环嵌套 在 for 循环中嵌套一个或多个 for 循环 循环控制语句循环控制语句可以控制循环体内语句的执行过程。GO 语言支持以下几种循环控制语句: 控制语句 描述 break 语句 经常用于中断当前 for 循环或跳出 switch 语句 continue 语句 跳过当前循环的剩余语句,然后继续进行下一轮循环。 goto 语句 将控制转移到被标记的语句。 无限循环如果循环中条件语句永远不为 false 则会进行无限循环,我们可以通过 for 循环语句中只设置一个条件表达式来执行无限循环:实例package main import “fmt” func main() { for true { fmt.Printf(“这是无限循环。\n”); }}
Go语言开发工具
Go 语言开发工具 VSCodeVScode 安装教程参见:https://www.runoob.com/w3cnote/vscode-tutorial.html然后我们打开 VSCode 的扩展(Ctrl+Shift+P): 搜索 go: 点击安装,安装完成后我们就可以使用代码提示、测试、调试等功能了。 GoLandGoLand 是 Jetbrains 家族的 Go 语言 IDE,有 30 天的免费试用期。安装也很简单访问 Goland 的下载页面,根据你当期的系统环境三大平台(Mac、Linux、Windows)下载对应的软件。 LiteIDELiteIDE 是一款开源、跨平台的轻量级 Go 语言集成开发环境(IDE)。支持的 操作系统 Windows x86 (32-bit or 64-bit)Linux x86 (32-bit or 64-bit) 下载地址 :http://sourceforge.net/projects/liteide/files/源码地址 :https://github.com/visualfc/liteide EclipseEclipse...
Go语言常量
Go 语言常量 常量是一个简单值的标识符,在程序运行时,不会被修改的量。常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。常量的定义格式:const identifier [type] = value你可以省略类型说明符 [type],因为编译器可以根据变量的值来推断其类型。 显式类型定义: const b string = “abc”隐式类型定义: const b = “abc” 多个相同类型的声明可以简写为:const c_name1, c_name2 = value1, value2以下实例演示了常量的应用: 实例package main import “fmt” func main() { const LENGTH int = 10 const WIDTH int = 5 var area int const a, b, c = 1, false, “str” //多重赋值 area = LENGTH * WIDTH ...
Go语言基础语法
Go 语言基础语法上一章节我们已经了解了 Go 语言的基本组成结构,本章节我们将学习 Go 语言的基础语法。 Go 标记Go 程序可以由多个标记组成,可以是关键字,标识符,常量,字符串,符号。如以下 GO 语句由 6 个标记组成: fmt.Println(“Hello, World!”) 6 个标记是(每行一个): fmt . Println ( “Hello, World!” ) 行分隔符在 Go 程序中,一行代表一个语句结束。每个语句不需要像 C 家族中的其它语言一样以分号 ; 结尾,因为这些工作都将由 Go 编译器自动完成。如果你打算将多个语句写在同一行,它们则必须使用 ; 人为区分,但在实际开发中我们并不鼓励这种做法。以下为两个语句: fmt.Println(“Hello, World!”)fmt.Println(“菜鸟教程:runoob.com”) 注释注释不会被编译,每一个包应该有相关注释。 单行注释是最常见的注释形式,你可以在任何地方使用以 // 开头的单行注释。多行注释也叫块注释,均已以 /* 开头,并以 */...
Go语言变量作用域
Go 语言变量作用域作用域为已声明标识符所表示的常量、类型、变量、函数或包在源代码中的作用范围。Go 语言中变量可以在三个地方声明: 函数内定义的变量称为局部变量函数外定义的变量称为全局变量函数定义中的变量称为形式参数 接下来让我们具体了解局部变量、全局变量和形式参数。 局部变量在函数体内声明的变量称之为局部变量,它们的作用域只在函数体内,参数和返回值变量也是局部变量。以下实例中 main() 函数使用了局部变量 a, b, c:实例package main import “fmt” func main() { /* 声明局部变量 */ var a, b, c int /* 初始化参数 */ a = 10 b = 20 c = a + b fmt.Printf (“结果: a = %d, b = %d and c = %d\n”, a, b, c)} 以上实例执行输出结果为:结果: a = 10, b = 20 and c...
Go语言变量
Go 语言变量 变量来源于数学,是计算机语言中能储存计算结果或能表示值抽象概念。变量可以通过变量名访问。Go 语言变量名由字母、数字、下划线组成,其中首个字符不能为数字。声明变量的一般形式是使用 var 关键字:var identifier type可以一次声明多个变量:var identifier1, identifier2 type实例package mainimport “fmt”func main() { var a string = “Runoob” fmt.Println(a) var b, c int = 1, 2 fmt.Println(b, c)} 以上实例输出结果为:Runoob1 2变量声明第一种,指定变量类型,如果没有初始化,则变量默认为零值。 var v_name v_typev_name = value 零值就是变量没有做初始化时系统默认设置的值。实例package mainimport “fmt”func main() { // 声明一个变量并初始化 var...
Go语言切片(Slice)
Go 语言切片(Slice)Go 语言切片是对数组的抽象。Go 数组的长度不可改变,在特定场景中这样的集合就不太适用,Go 中提供了一种灵活,功能强悍的内置类型切片(“动态数组”),与数组相比切片的长度是不固定的,可以追加元素,在追加时可能使切片的容量增大。 定义切片你可以声明一个未指定大小的数组来定义切片:var identifier []type 切片不需要说明长度。或使用 make() 函数来创建切片:var slice1 []type = make([]type, len) 也可以简写为 slice1 := make([]type, len) 也可以指定容量,其中 capacity 为可选参数。make([]T, length, capacity) 这里 len 是数组的长度并且也是切片的初始长度。切片初始化s :=[] int {1,2,3 } 直接初始化切片,[] 表示是切片类型,{1,2,3} 初始化值依次是 1,2,3,其 cap=len=3。s := arr[:] 初始化切片 s,是数组 arr...