曹耘豪的博客

Go的基础语法

  1. “Hello World!”
  2. 变量声明
    1. 使用var
    2. 声明并赋值
    3. 同时赋值多个
  3. if
  4. 循环(for)
    1. fori循环
    2. 仿while循环
    3. for each循环
  5. 类型转换
    1. string转int
  6. 方法func
    1. 普通方法
    2. 递归写法
    3. 方法内的方法
  7. switch
  8. label和goto

“Hello World!”

1
fmt.Println("Hello World!")

变量声明

使用var

1
var a int

声明并赋值

1
a := 0

同时赋值多个

类似python

1
a, b := 1, 2

if

1
2
3
4
5
6
7
if a > 0 {
// do something
} else if a > 5 {
// do something
} else {
// do something
}

循环(for)

fori循环

1
2
3
for i := 0; i < 100; i++ {
// do something
}

仿while循环

1
2
3
for a < b {
// do something
}

for each循环

使用range内置方法,使用:=

1
2
3
for i, item := range arr {
// do something
}

类型转换

string转int

1
a := strconv.Atoi(str)

方法func

普通方法

1
2
3
4
5
6
7
8
func Foo(a int, b int) int {
return a + b
}

// 相同的类型可以简写
func Foo(a, b int) int {
return a + b
}

递归写法

1
2
3
4
5
6
func Fib(n int) int {
if m == 1 || m == 2 {
return 1
}
return Fib(m - 2) + Fib(m - 1)
}

方法内的方法

1
2
3
4
5
6
func Foo(a int, b int) int {
bar := func(m, n int) int {
return m + n
}
return bar(a, b)
}

如果内部函数要递归,则要先定义,比如下面的内部的斐波那契数列

1
2
3
4
5
6
7
8
9
10
func Fib(n int) int {
var inner func(m int) int // 先定义
inner = func(m int) int {
if m == 1 || m == 2 {
return 1
}
return inner(m - 2) + inner(m - 1)
}
return inner(n)
}

switch

1
2
3
4
5
6
7
8
9
a, c, t := 0, 0, 1
switch t {
case a:
c -= 1
default:
c += 1
}

fmt.Println(c) // -1

label和goto

label可以定义一个点,可以使用continuegoto进行跳转

使用continue+label来直接继续外层循环

1
2
3
4
5
6
7
8
9
a:
for i := 0; i < 5; i++ {
for j := 0; j < 5; j++ {
if i == 3 && i == j {
continue a
}
fmt.Println(i, j)
}
}

使用goto来跳转到某个代码段执行,如果是for,则重新开始循环

比如把上面的代码的continue换成goto则会无限循环

1
2
3
4
5
6
7
8
9
a:
for i := 0; i < 5; i++ {
for j := 0; j < 5; j++ {
if i == 3 && i == j {
goto a
}
fmt.Println(i, j)
}
}
   /