一、区别于其他语言的特点:
清晰并且简洁、并行(线和 goroutines)、Channel、快速、安全、标准格式化、
类型后置(var a int)、UTF-8、开源、开心
Erlang[7] 与 Go 在部分功能上类似。Erlang 和 Go 之间主要的区别是 Erlang 是函 数式语言,而 Go 是命令式的。Erlang 运行在虚拟机上,而 Go 是编译的。Go 用 起来感觉更接近 Unix
二、Hello World
package main
imort "fmt" // 实现格式化的I/O
/*Print something*/
func main(){
fmt.Printf("Hello,word
");
}
注:packagemain必须首先出现,紧跟着是import。在Go中,package总是首先出现, 然后是 import,然后是其他所有内容。当 Go 程序在执行的时候,首先调用的函 数是 main.main(),这是从 C 中继承而来。
编译和运行代码
%go build helloworld.go
会生成一个叫helloworld 的可执行文件
%./helloword
Hello,world
三、变量 ,要先声明后赋值
var a int 声明
a =15 赋值
等同于
a :=15 直接声明并赋值
多个变量:
var (
x int
b bool
)
或者如果都是 整型,可以声明
var a,b int
平行赋值 a, b := 20, 16
注: 如果你希望将两个(或更多)语句放在一 行书写,它们必须用分号 (’;’) 分隔。一般情况下,你不需要分号
一个特殊的变量名是 _(下划线)。任何赋给它的值都被丢弃。在这个例子 中,将 35 赋值给 b,同时丢弃 34。
_, b := 34, 35
Go 的编译器对声明却未使用的变量在报错
四、变量类型
1、布尔类型 true 和 false
2、数字类型
int ,你可以使用 int32 或者 uint32。完整的整数类型列表 (符号和无符号)是 int8,int16,int32,int64 和 byte,uint8,uint16,uint32, uint64。 byte 是 uint8 的别名。浮点类型的值有 float32 和 float64
注:赋值可以用八进制、十六进制或科学计数法: 077,0xFF,1e3 或者 6.022e23 这 些都是合法的。
3、常量
const x=4
const (
a = 0 ← Is an int now b string = "0"
)
4、字符串
s := "Hello World!" 必须是双引号
或者 var s string = "hello"
注: 一旦给变量赋值,字符串就不能修改了
多行字符串:
s := "Starting part" + "Ending part"
会被转换为:
s := "Starting part";
+ "Ending part";
这是错误的语法,应当这样写:
s := "Starting part" + "Ending part"
另一种方式是使用反引号 ` 作为原始字符 串符号:
s := `Starting part Ending part`
另:
rune
Rune 是 int32 的别名。用 UTF-8 进行编码。这个类型在什么时候使用呢?例如需 要遍历字符串中的字符。可以循环每个字节(仅在使用 US ASCII 编码字符串时 与字符等价,而它们在 Go 中不存在!)。因此为了获得实际的字符,需要使用 rune 类型。
5、复数
它的变量类型是 complex128 (64 位虚数部分)。如果需要小 一些的,还有 complex64 – 32 位的虚数部分。复数写为 re + imi,re 是实数部分, im 是虚数部分,而 i 是标记 ’i’ (√−1)。使用复数的一个例子:
var c complex64 = 5+5i;fmt.Printf("Value is: %v", c) 将会打印:(5+5i)
6、错误
Go 有为了错误而 存在的内建类型,叫做 error。 var a error 定义了 a 为一个 error,a 的值是 nil。
五、运算符和内建函数
+ - * / 和% 会像你期望的那样工作,& | ^ 和&^ 分别表示位运算符按位与, 按 位或,按位异或和位清除。 && 和 || 运算符是逻辑与和逻辑 或。表格中没有列 出的是逻辑非:!。
虽然 Go 不支持运算符重载(或者方法重载),而一些内建运算符却支持重载。
Go 保留字: