Go语言基础语法的简单介绍 | 青训营

131 阅读3分钟

最近看了一个介绍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语句

因为和其他语言比较相似,这里只介绍差别:

  1. Go语言if后面的条件表达式省略了括号。即使写代码时加上了,代码编辑器大概率也会帮你去掉它;
  2. if后面必须跟大括号,不能像C++那样省略大括号;
  3. 如果有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语句功能更加强大,更方便好用了。 和其他语言中的区别是:

  1. switch后面的变量名不需要加括号;
  2. case和default后面不需要加break;
  3. 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语句,然后开始下一次循环。