最近看了一个介绍Go语言基础语法的视频,记录一下。笔记里面的内容写的比较简单,适合有其他语言基础之后的快速入门。 Go语言有“简洁清晰”的设计理念,体现在代码上就是Go语言在符号上的省略。例如:Go语言中省去了很多括号(如if、for、switch等位置)每一行代码的结尾都省略了分号。
变量
Go语言是一种强类型语言,每一个变量都有自己的变量类型。常见的变量类型有整型、浮点型、复数类型、布尔型、字符串、数组、切片、map等。
声明变量的几种方式:
1、使用var关键字。
可以使用var关键字声明一个或者多个变量。如果在声明变量的时候不指定初始值,那么变量会被初始化为零值。与其他语言不同的是,Go语言声明变量时变量的类型放在后面。下面是示例代码:
var x int = 10 //声明变量x,类型为int,值为10
var y, z int //声明变量y, z,类型为int,没有指定初始值
除此以外,如果在声明变量时就指定了初始值,就可以在声明变量的时候省略变量的类型,编译器将根据初始值推断出变量类型:
var x = 10 //x的类型会被推断为int
var y, z = 20, "abc" //y的类型会被推断为int,z的类型会被推断为string
2、短变量声明:
使用var关键字的方式可以在很多地方声明变量。但是如果是在函数内部,最常用的方法其实是短变量声明。因为懒得写var关键字。
短变量声明时使用的符号是:=
x := 10
y, z := 20, "abc"
这里同样不需要写变量的类型,编译器会自己推断应该使用何种类型。
3、常量的声明:
使用const关键字(这回写在前面了)。声明时需要指定初始值。
const PI = 3.14
if else语句
因为和其他语言比较相似,这里只介绍差别:
- Go语言if后面的条件表达式省略了括号。即使写代码时加上了,代码编辑器大概率也会帮你去掉它;
- if后面必须跟大括号,不能像C++那样省略大括号;
- 如果有else if或者else语句,需要和上一个if语句的右大括号“}”写在同一行。
示例:
if x == y {
fmt.Println("x == y")
} else if x < y{ //这里不能写到下一行
fmt.Println("x < y")
} else {
fmt.Println("x > y")
}
循环
Go语言中循环只有一种:for循环。它和if语句一样省略了括号。
1、基本的for循环
和其他语言十分相似,不再过多介绍。
for i := 0; i < 10; i++ {
fmt.Println(i)
}
2、只有条件的for循环
这种循环和其他语言中的while循环非常相似。
i := 0
for i < 10 {
fmt.Println(i)
i++
}
3、死循环
省略for后面的条件,除非有break,否则将一直循环下去。
for {
fmt.Println("This is an infinite loop")
}
switch语句
Go语言中的switch语句功能更加强大,更方便好用了。 和其他语言中的区别是:
- switch后面的变量名不需要加括号;
- case和default后面不需要加break;
- switch中可以使用任意的变量类型,如字符串、结构体等。
1、指定变量的switch
这种用法和其他语言中switch的用法相似。如果希望在执行完上一个case后仍然执行下一个case,可以使用fallthrough关键字
animal := "Dog"
switch animal {
case "Cat":
fmt.Println("It's a cat!")
fallthrough
case "Dog":
fmt.Println("It's a dog!") //将继续执行下一个case,无论条件如何
fallthrough
case "Fish":
fmt.Println("A fish") //没有fallthrough,不再向下执行
default:
fmt.Println("I don't know")
}
这个程序会将animal的值与case的值依次比较。一直到第二个case,发现匹配,然后执行第二个case中的语句。
由于在这个case语句的结尾使用了fallthrough关键字,所以无论下一个case是否满足条件,其中的语句都会被执行。
而在case "Fish"中,因为末尾没有fallthrough关键字,所以后面的default不会被执行。 程序的输出为:
It's a dog!
A fish
2、不指定变量的switch:
在Go语言中,可以不在switch后面指定一个表达式或者变量,这样switch语句中会检查每一个case语句中的条件,类似于if语句。
num := 10
switch {
case num > 10:
fmt.Println("num is greater than 10")
case num < 10:
fmt.Println("num is less than 10")
default:
fmt.Println("num is exactly 10")
}
这种switch语句的作用和if-else语句很相似。语句在执行时的顺序和if-else语句也很像,都是从上往下依次判断条件是否符合。
在for循环中跳出switch语句:
这种情况下,需要配合“标签”使用break语句。 标签在 Go 中是一个可选的标识符,可以使用标签来标记循环体的开始,然后使用 break 语句和标签的组合来跳出循环。以下是一个例子:
Loop: // 这是一个标签,标记下面的for循环
for i := 0; i < 10; i++ {
switch {
case i > 5:
fmt.Println("Breaking the loop")
break Loop // 这里的break语句会跳出标记为Loop的循环
default:
fmt.Println(i)
}
}
fmt.Println("Finished")
代码开头的Loop标记了下面的for循环。代码的执行过程是:循环在执行到第六次的时候符合case的条件,然后输出"Breaking the loop",到下一行的break中结束循环。 如果希望在switch语句中结束for循环,就可以通过在break的后面加上这个标签的方式来结束(代码第六行)。单独写break并不会结束这个循环,只会跳出这个switch语句,然后开始下一次循环。