这是我参与「第三届青训营 -后端场」笔记创作活动的的第2篇笔记。
曾经有一位知乎网友说过:只要这门编程语言拥有加减乘除和循环判断,那么它就是一门合格的编程语言。
不管是哪一门语言,只要是入门,就一定绕不开声明、判断和循环。这篇文章分享我在编写Golang时用到的一些入门语法。
在开始之前,需要说明一些标记:
... 表示可以出现至少一次,且需要用逗号隔开;
() 表示括号内的内容可以出现至多一次;
...() 表示括号内的内容可以出现至少零次,且需要用逗号隔开。
声明
golang的声明一共有var,const, type和简易声明四种,声明语法(除简易声明)为:
announce ...name type 或 announce ...name type
1. var
最简单的方式是只声明一个变量名称:
var a int
变量声明不仅可以用于简单变量,还可以用于其他复杂的变量,譬如:
var f func(int) bool
var conn struct {
username string
password string
}
当然,如果你想声明多个同类型变量,可以这么写:
var b, c int
甚至说如果需要其他不同类型的变量,可以这么写:
var (
e error
g *float64
)
在变量定义后,变量将会初始化为空,但如果需要设置初始值,则可以:
var foo int = 1
或者是使用右值类型推断来省略变量类型,譬如:
var bar = "Hello World"
2. const
const声明与var大同小异,但是在某些常量声明(如枚举)中,可与iota配合使用,譬如:
const (
TypicalNoob = iota // 0
TypicalHipster // 1 TypicalHipster = iota
TypicalUnixWizard // 2 TypicalUnixWizard = iota
TypicalStartupFounder // 3 TypicalStartupFounder = iota
)
请注意:Golang
iota在括号外无法实现递增。
3. type
type声明与var大同小异,但type声明适用于类型,而var声明适用于变量,譬如:
type Duration int64
const NanoSecond Duration = 1
当然也可以定义一个结构体,譬如:
type Foo struct {
foo string
}
var foo_ Foo
foo_.foo = "Hello World"
type声明也吸收了面向对象设计的长处,只需要在struct变量中添加父类型即可,譬如:
type Foo struct {
foo string
}
type Bar struct {
Foo
bar int
}
4. 简易声明
简易声明的语法为:
...name := expression
譬如:
foo := 1
或者如果右值表达式有多个变量,则可以:
file, err := os.Open("hwk1.md")
判断
Golang的判断语法有两种,分别是if else和switch case。
1. if else
if else的语法如下:
if ...expression; condition {
// TODO
} ...(else if ...expression; condition {
// TODO
}) (else {
// TODO
})
譬如:
if file, err := os.Open("hwk1.md"); err != nil {
fmt.Println(err.Error())
} else {
file.Write([]byte("Hello World"))
}
请注意:
if语句块内的变量只能用在语句块内,如果需要在语句块外使用,请在外部定义。
2. switch case
switch case的语法如下:
switch {
...case expression:
// TODO
default:
// TODO
}
// 或
switch variable {
...case constant:
// TODO
default:
// TODO
}
譬如:
func ScoreGrade(score int) {
switch {
case score >= 90:
fmt.Println("优秀")
case score >= 80:
fmt.Println("良好")
case score >= 70:
fmt.Println("中等")
case score >= 60:
fmt.Println("优秀")
default:
fmt.Println("不及格")
}
}
func Operate(a, b int, operate rune) {
switch operate {
case '+':
fmt.Println(a + b)
case '-':
fmt.Println(a - b)
case '*':
fmt.Println(a * b)
case '/':
fmt.Println(a / b)
default:
fmt.Println("错误操作")
}
}
注意:
switch在进入判断后会直接跳出判断,需要在判断结束前添加fallthrough关键字。
循环
Golang只有一种循环方式,即for循环,语法如下:
for init; condition; post {
// TODO
}
// 或
for (condition) {
// TODO
}
// 或
for key, value := range sequence {
// TODO
}
其中,init 一般为赋值表达式,给控制变量赋初值;condition 关系表达式或逻辑表达式,循环控制条件;post 一般为赋值表达式,给控制变量增量或减量;sequence 为序列变量,如数组、map。
譬如:
lst := []int{1, 2, 3}
for i := 0; i < len(lst); i++ {
// TODO
}
for key, value := range lst {
// TODO
}
结语
Golang的基础语法就到这里,希望能对大家有所帮助!