这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天
Go 语言的基础组成有以下几个部分:
- 包声明
- 引入包
- 函数
- 变量
- 语句 & 表达式
- 注释
一、hello world
学习一门语言时,大家最熟悉的当然是输出hello world了,学习go语言时,也不例外。下面给出一段go语言的hello world代码。
package main
import (
"fmt"
)
func main() {
fmt.Println("Hello world!")
}
这段代码的核心就是调用fmt里的Println函数输出hello world!,类比Java的Println我们可以猜出该函数的效果:打印并换行,把 ln 去掉就是不换行.
具体解析:
- 第一行代码
package main定义了包名。你必须在源文件中非注释的第一行指明这个文件属于哪个包,如:package main。package main表示一个可独立执行的程序,每个 Go 应用程序都包含一个名为 main 的包。 - 下一行
import "fmt"告诉 Go 编译器这个程序需要使用fmt包(的函数,或其他元素),fmt包实现了格式化 IO(输入/输出)的函数。 - 下一行
func main()是程序开始执行的函数。main函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数(如果有init()函数则会先执行该函数)。 - 下一行
fmt.Println(...)可以将字符串输出到控制台,并在最后自动增加换行字符\n。
如果你已经配置了go的环境变量,可以使用go run命令。
执行以上代码输出:
注意
需要注意的是 { 不能单独放在一行,所以以下代码在运行时会产生错误:
package main
import "fmt"
func main()
{
fmt.Println("Hello, World!")
}
二、变量和常量
package main
import (
"fmt"
"math"
)
func main() {
var a = "initial"
var b, c int = 1, 2
var d = true
var e float64
f := float32(e)
g := a + "foo"
fmt.Println(a, b, c, d, e, f)
fmt.Println(g)
const s string = "constant"
const h = 500000000
const i = 3e20 / h
fmt.Println(s, h, i, math.Sin(h), math.Sin(i))
}
第一种声明变量的方式:使用 var关键字:
var identifier type
可以一次声明多个变量:
var identifier1, identifier2 type
如果变量没有初始化,则默认为零值,类比C语言的全局变量
- 数字类型为
0 - 布尔类型为
false - 字符串为
""(空字符串)
第二种声明变量的方式:根据值自行判定变量类型,类似于C++的auto
var v_name = value
第三种声明变量的方式:直接使用下面的形式,这种方式最常用。(这种方式只能在函数体中出现,不适用于全局变量)
intVal := 1
intVal := 1 等同于
var intVal int
intVal = 1
常量的定义格式:
const identifier [type] = value
其中说明符[type]可以省略
const a string = "abc“const a = "abc"
注意
常量是一个简单值的标识符,在程序运行时,不会被修改的量。
常量中的数据类型只可以是布尔型、数字型(整数型、浮点型和复数)和字符串型。
上面代码运行结果:
initial 1 2 true 0 0
initialfoo
constant 500000000 6e+11 -0.28470407323754404 0.7591753930288755
三、if else
package main
import "fmt"
func main() {
if 7 % 2 == 0 {
fmt.Println("7 is even")
} else {
fmt.Println("7 is odd")
}
if 8 % 4 == 0 {
fmt.Println("8 is divisible by 4")
}
if num := 9; num < 0 {
fmt.Println(num, "is negative")
} else if num < 10 {
fmt.Println(num, "has 1 digit")
} else {
fmt.Println(num, "has multiple digits")
}
}
跟其他编程语言是一样的,不做详细分析。
注意
- 条件判断语句不需要加
(),并且当只有一行内容时,也不能省略{},这是和大多数编程语言不同的一个地方。
四、switch语句
package main
import (
"fmt"
"time"
)
func main() {
a := 2;
switch a {
case 1:
fmt.Println("one")
case 2:
fmt.Println("two")
case 3:
fmt.Println("three")
case 4, 5:
fmt.Println("four or five")
default:
fmt.Println("other")
}
t := time.Now()
switch {
case t.Hour() < 12:
fmt.Println("It's before noon")
default:
fmt.Println("It's after noon")
}
}
注意
go语言的switch后面跟的变量也是不加括号的,而且也可以省略,并且可以是任意类型。并且每个case后面都自带break,无需自己输入break,每个case后面的变量类型也可以是任意类型,只要case与case之间的类型相同即可。 这点和Java和C语言是不一样的。如果我们需要执行后面的case,可以使用fallthrough。
五、循环语句
go语言只有一种循环,即 for 循环。
go语言的for循环有三种形式:
- 和
C语言的for一样,不同在于括号省略。
for init; condition; post { }
- 和
C的while一样
for condition { }
- 和
C的for(;;)一样:
for { }
package main
import "fmt"
func main() {
i := 1
for {
fmt.Println("loop")
break
}
for j := 7; j < 9; j++ {
fmt.Println(j)
}
for n := 0; n < 5; n++ {
if n % 2 == 0 {
continue
}
fmt.Println(n)
}
for i <= 3 {
fmt.Println(i)
i = i + 1
}
}