Table of Contents
地址:https://www.w3cschool.cn/go/go-tutorial.html
Go 语言教程
Go 语言特色
- 简洁、快速、安全
- 并行、有趣、开源
- 内存管理、数组安全、编译迅速
Go 语言用途
Web 服务器、高性能分布式、游戏服务端。
第一个 Go 程序
经典的 Hello, World!。hello.go:
package main import "fmt" func main() { fmt.Println("Hello, World!") }
执行以上代码:
$ go run hello.go Hello, World!
Go 语言环境安装
安装包地址:https://golang.google.cn/dl/
Go 语言结构
Go 语言的基础组成有以下几个部分:
- 包声明
- 引入包
- 函数
- 变量
- 语句 & 表达式
- 注释
需要在源文件中非注释的第一行指明这个文件属于哪个包。比如:package main。package mian 表示一个可独立执行的程序,每个 Go 应用程序都包含一个名为 main 的包。
main 函数是每一个可执行程序所必须包含的,一般来说都是启动后第一个执行的函数。如果有 init 函数会优先执行该函数。
当标识符(包括常量、变量、类型、函数名、结构字段等等)以一个大写字母开头,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(客户端程序需要先导入这个包),这被称为导出(像面向对象语言中的 public);标识符如果以小写字母开头,则对包外是不可见的,但是他们在整个包的内部是可见并且可用的(像面向对象语言的中的 private)
Go 语言基础语法
Go 标记
Go 程序可以由多个标记组成,可以是关键字、标识符、常量、字符串和符号。
行分隔符
Go 程序中,一行代表一个语句结束。Go 并不要求语句后面添加分号(;)。
注释
行注释 // 和块注释 /**/
标识符
标识符用来命名变量、类型等程序实体。标识符由字母、数字、下划线组成。第一个字符必须是字母或下划线。
字符串连接
Go 语言的字符串可以通过 + 实现。
关键字
下面是 Go 代码中会使用到的 25 个关键字或保留字:
break | default | func | interface | select |
case | defer | go | map | struct |
chan | else | goto | package | switch |
const | fallthrough | if | range | type |
continue | for | import | return | var |
此外,还有 36 个预定义标识符:
append | bool | byte | cap | close | complex |
complex64 | complex128 | copy | true | false | float32 |
float64 | imag | init | int8 | init16 | nit32 |
int64 | uint | uint8 | unit16 | uint32 | uint64 |
uintptr | iota | len | make | new | nil |
panic | println | real | recover | string |
Go 语言的空格
Go 语言中变量的声明必须使用空格隔开。在变量与运算符间加入空格可以让源码美观易读。
Go 语言数据类型
数据类型用于声明函数和变量。数据类型的出现是为了更好地利用内存。
Go 用于按类别有以下几种数据类型:
- 布尔型——true/false。
- 数字类型——整形 int 和浮点型 float。Go 还原生支持复数。位的运算采用补码。
- 字符串类型——Go 语言使用 UTF-8 编码标识 Unicode 文本。
- 派生类型
- 指针类型(Pointer)
- 数组类型
- 结构化类型(struct)
- 联合体类型(union)
- 函数类型
- 切片类型
- 接口类型(interface)
- Map 类型
- Channel 类型
数字类型
Go 也有基于架构的类型,例如:int,uint 和 uintptr。
- uint8——无符号 8 位整型(0 到 255)
- uint16——无符号 16 位整型(0 到 65535)
- uint32——无符号 32 位整型(0 到 4294967295)
- uint64——无符号 64 位整型(0 到 18446744073709551615)
- int8——有符号 8 位整型(-128 到 127)
- int16——有符号 16 位整型(-32768 到 32767)
- int32——有符号 32 位整型(-2147483648 到 2147483647)
- int64——有符号 64 位整型(-9223372036854775808 到 9223372036854775807)
浮点型:
- float32——IEEE-754 32 位浮点型
- float64——IEEE-754 64 位浮点型
- complex64——32 位实数和虚数
- complex128——64 位实数和虚数
其他数字类型
- byte——类似 uint8
- rune——类似 int32
- uint——32 或 64 位
- int——与 uint 一样大小
- uintptr——无符号整型,用于存放一个指针
Go 语言变量
变量来源于数学,是计算机语言中能储存计算结果或能表示值的抽象概念。变量可以通过变量名访问。
声明变量的一般形式是使用 var 关键字。
var indentifier type
变量声明
第一种,指定变量类型,声明后若不赋值,使用默认值。
var v_name v_type v_name = value
第二种,根据值自动判断变量类型。
var v_name = value
第三种,省略 var。这种方式只能在函数内部使用。
v_name := value
多变量声明
// 类型相同多个非全局变量 var vname1, vname2, vname3 type vname1, vname2, vname3 = v1, v2, v3 // 不需要显式声明类型 var vname1, vname2, vname3 = v1, v2, v3 // 类型不同多个全局变量 var ( vname1 v_type1 vname2 v_type2 )
值类型和引用类型
所有像 int、float、bool 和 string 这些基本类型都属于值类型。值类型的变量的值存储在栈中。可以通过 & 获取变量的地址。
复杂的数据使用的引用类型。其保存的是内存地址,亦即指针。
简短形式,使用 := 赋值操作符
:= 是使用变量的首选形式,但只能在函数体内使用。此操作符可以高效地创建新的变量,称之为初始化声明。
全局变量允许声明但不使用。局部变量声明了就必须使用。
多变量同时赋值(a, b, c, = 1, 2, 3)被称为 并行 或 同时 赋值。并行赋值也被用于当一个函数返回多个值时,比如:val, err = Func1(var1)。
交换变量可以简单地使用 a, b = b, a。
空白标识符 _ 也被用于抛弃值。比如 5 在 _, b := 5, 7 中被抛弃。
_ 实际上是一个只写变量,你不能得到它的值。这样做是因为 Go 语言中你必须使用所有被声明的变量,但有时你并不需要从一个函数得到的所有返回值。