Go 学习笔记(一)(教程、环境安装、结构、基础语法、数据类型、变量)

地址: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 个关键字或保留字:

breakdefaultfuncinterfaceselect
casedefergomapstruct
chanelsegotopackageswitch
constfallthroughifrangetype
continueforimportreturnvar

此外,还有 36 个预定义标识符:

appendboolbytecapclosecomplex
complex64complex128copytruefalsefloat32
float64imaginitint8init16nit32
int64uintuint8unit16uint32uint64
uintptriotalenmakenewnil
panicprintprintlnrealrecoverstring

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 语言中你必须使用所有被声明的变量,但有时你并不需要从一个函数得到的所有返回值。