Go 语言教程笔记(一)
一 Go 语言环境设置
本地环境设置
在这里我们介绍设置Go编程语言环境,需要在你的计算机上的准备以下两个软件,(A)文本编
辑器和(B)Go编译器。
文本编辑器
我的环境是ubuntu,直接用 vim
Go编译器
ubuntu下面直接安装
# apt-get install golang
例子:
# vim hello.go
1 package main
2
3 import fmt "fmt"
4
5 func main() {
6 fmt.Printf("Hello, world; or Καλημέρα κόσμε; or こんにちは 世界 ");
7 }
go语言中如果有if等后面需要跟大括号的语句,强制使用大扩号跟if写在一行。
编译运行:
# go run hello.go
Hello, world; or Καλημέρα κόσμε; or こんにちは 世界
二 Go 语言程序结构
在我们学习Go编程语言的基本构建模块,看看一个最低限度的Go程序结构,这样我们
就可以把它作为即将到来的章节的参考。
Go 程序包含以下部分:
包声明
导入包
函数
变量
语句和表达式
注释
例如:
1 package main
2
3 import fmt "fmt"
4
5 func main() {
6 fmt.Printf("Hello, world; or Καλημέρα κόσμε; or こんにちは 世界 ");
7 }
第一行定义了这个程序包的名称。这是一个必须声明为Go程序运行在什么包。main包是起始
点来运行程序。每个包都有一个与之关联的路径和名称。
下一行import "fmt" 是告诉编译器去包含文件在包fmt的预处理命令。
下一行 func main()主要功能是为程序执行的开始。
如果有注释,/*...*/会被编译器被忽略,它已被加入到程序添加注释。因此,这样的行称为程
序中的注释。注释也使用//类似于Java或C++注释。
下一行 fmt.Println(...)是提供另一种功能,使消息“Hello, World!”要显示在屏幕上。这
里fmt包已导出。
三 Go 语言的基本语法
标识符
Go语言不允许标识符中的标点字符,如@,$和%。
Go是一种区分大小写的编程语言
Manpower 和 manpower 在Go中是两个不同的标识符
标识符开始以字母A到Z或a到z或下划线_后跟零个或多个字母,下划线和数字(0〜9)
关键词
下面的列表显示了Go的保留字。这些保留的字可以不被用作常量或变量,或任何其他的标识符
名称。
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
在 Go 中空白格
仅包含空格,可能与注释行,被称为一个空行,Go编译器完全忽略它。
var age int;
必须有至少一个空白字符(通常是一个空格)int和age之间的编译器,以便能够区分它们
fruit = apples + oranges; // get the total fruit
fruit和=之间或=和apples,虽然是自由的,如果想便于阅读的目的,最好包括一些空格
四 Go 语言数据类型
在Go编程语言,数据类型指用于声明变量或不同类型的功能的广泛的系统。变量的类型决定了
有多少空间占用的存储和存储方式的位模式将被解释。
Go的数据类型可分类如下:
Boolean Types
它们是布尔类型,它由两个预定义的常量:(a) true (b) false
Numeric Types
它们是算术类型,表示整数类型或b。在整个程序浮点值
string types:
一个字符串类型代表组字符串值。它的值是一个字节序列。字符串是一次创造了稳定的类型,
这是不可能改变一个字符串的内容。预声明的字符串类型为字符串。
Derived types:
它们包括:(a)指针类型,(b)数组类型,(c)结构类型,(d)联盟类型及(e)函数类型(f)切片类(g)
函数类型(h)接口类型(i)地图类型(j)管道类型。
数组类型和结构类型被统称为聚合类型。函数的类型指定的一组具有相同的参数和结果类型所
有函数。
整数
1 uint8
8位无符号整数 (0 - 255)
2 uint16
16位无符号整数 (0 - 65535)
3 uint32
32位无符号整数 (0 - 4294967295)
4 uint64
64位无符号整数 (0 - 18446744073709551615)
5 int8
有符号8位整数 (-128 - 127)
6 int16
有符号16位整数 (-32768 - 32767)
7 int32
有符号的32位整数 (-2147483648 - 2147483647)
8 int64
有符号的64位整数 (-9223372036854775808 - 9223372036854775807)
浮点类型
1 float32
IEEE-754 32-bit 浮点数
2 float64
IEEE-754 64-bit 浮点数
3 complex64
复数与float32实部和虚部
4 complex128
复数与float64实部和虚部
其他数值类型
1 byte
相同于 uint8
2 rune
相同于 int32
3 uint
32 或 64 位
4 int
相同于 uint 的大小
5 uintptr
一个无符号整数来存储指针值的解释的比特位
五 Go 语言变量
变量是什么,只不是给定到存储区域,我们的程序可以操纵的名称。在Go中每个变量具有特定
的类型,它确定的大小和可变的存储器的布局;能确定存储器内存储的值的范围;和组操作可以施
加到变量。
一个变量名可以由字母,数字和下划线。它必须以字母或下划线。大写和小写字母是不同的,因
为Go是区分大小写的。基于该基本类型在前面的章节中说明的那样,将有以下基本变量类型:
byte 通常单个字节(一个字节),这是一个字节的类型
int 整数最自然的尺寸的机器
float32 单精度浮点值
Go编程语言也可以定义各种其他类型的变量,我们将在以后的章节列出,如:枚举,指针,数
组,结构,联合,等等。
Go中变量定义
var variable_list optional_data_type;
optional_data_type可以包括字节,整型,float32,complex64,布尔或任何用户定义的对象
等有效Go的数据类型,variable_list可以由用逗号分隔的一个或多个标识符名称。一些有效的声
明如下所示:
var i, j, k int;
var c, ch byte;
var f, salary float32;
d = 42;
var i, j, k; 既声明并定义了变量i,j和k;这指示编译器创建一个名为i,j和k的 int类型变量。变量
可以再声明时候初始化。变量的类型是由编译器自动根据传递给它的值判断。
variable_name = value;
d = 3, f = 5; // declaration of d and f. Here d and f are int
对于没有初始化定义:具有静态存储时间变量的隐含零初始化(所有字节的值为0);所有其它变量
的初始值是它们的数据类型的零值。
静态类型声明
package main
import "fmt"
func main() {
var x float64
x = 20.0
fmt.Println(x)
fmt.Printf("x is of type %T ", x)
}
编译运行结果是:
20
x is of type float64
动态类型声明/类型推断
示例
试试下面的例子,其中的变量已经声明没有任何类型的,并已确定在主函数中初始化。如果类型推断的,我们已经初始化的变量y使用:=运算符,x初始化使用=运算符。
package main
import "fmt"
func main() {
var x float64 = 20.0
y := 42
fmt.Println(x)
fmt.Println(y)
fmt.Printf("x is of type %T ", x)
fmt.Printf("y is of type %T ", y)
}
编译和运行上面的程序,这将产生以下结果:
20
42
x is of type float64
y is of type int
混合变量声明
不同类型的变量可以一步到位使用类型推断声明。
package main
import "fmt"
func main() {
var a, b, c = 3, 4, "foo"
fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
fmt.Printf("a is of type %T ", a)
fmt.Printf("b is of type %T ", b)
fmt.Printf("c is of type %T ", c)
}
编译和运行上面的程序,这将产生以下结果:
3
4
foo
a is of type int
b is of type int
c is of type string