Go语言基础(1)程序基本结构 | 青训营笔记

77 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天

HelloWorld-程序基本结构

在所有语言的程序中,我们通常都会使用经典的 Hello World 来窥见这个语言的一角,在Go语言的学习中也不例外。

package main
​
import (
    "fmt"
)
​
func main() {
    fmt.Println("hello world")
}

上面这个短小的程序包含了一些基本的组成元素:

  • package:这个程序所在的位置
  • 导入 import:导入 fmt 包使用其中的函数
  • 函数 function:函数的定义、函数的使用

一个 go 文件基本都会包含这几个部分,下面会有详细解释这个程序的章节。

变量 和 常量

变量:用于存储值便于对其的一个内存区域。对于Go语言来说,它的类型是强类型的,也就是说,一个变量只能有一个类型

var a string = "string example" // 1
var b, c = 1, "123"             // 2
d, e := true, "456"             // 3
  1. 使用 var 关键字来对一个变量进行赋值操作,这里对 a 变量赋值的是一个字符串,那么 a 变量就是一个字符串类型的变量

  2. var 关键字可以对多个变量进行赋值,同样地可以根据值的类型推断变量类型。这里和类 C 的语言不同,类C语言声明多个变量,必须是同一个类型的变量

    int a = 1, b = 2;
    int a = 1, b = 1.0; // 这样的声明方式就是错误的
    
  3. 如果觉得 var 关键字比较麻烦,也同样可以使用

常量:和变量不同的是,常量是一个不可以变化的值。常量是存储在静态区,不允许修改,也不允许取值。

Note: 常量在Golang中没有确定的类型,会在上下文中自动确定类型。

const a string = "123"
const b = 10000
const c = 2E6

流程控制

if 条件控制

Golang中条件控制只需要 if 关键字即可,这里需要注意的是:

  • if 关键字后面的条件判断不需要小括号
  • if 语句中可以声明局部变量,在局部使用
if num := 9; num < 0 {
    fmt.Println("number ", num, " is negtive")
} else if num % 2 == 0 {
    fmt.Println("number ", num, " is even")
} else {
    fmt.Println("number ", num, " is odd")
}

switch 分支控制

switch 语句对于 if 条件判断来说是一个极大的补充。Golang中, switch 语句和其他语言也有所不同:

  • switch 语句中的变量支持各种条件
  • switch 语句不需要 break 也可以在执行完分支以后跳出
  • 可以不写任何变量,仅仅做多重条件的判断
// switch 语句的经典用法
switch a {
    case 1:
    fmt.Println("number is 1")
    case 2:
    fmt.Println("number is 2")
    case 3, 4:
    fmt.Println("number is 3 or 4")
    default:
    fmt.Println("number isn't 1, 2, 3 or 4")
}
// 对条件分支语句的一个优化版本
num := 9
switch {
    case num < 0:
    fmt.Println("number ", num, " is negtive")
    case num % 2 == 0:
    fmt.Println("number ", num, " is even")
    case num % 2 == 1:
    fmt.Println("number ", num, " is odd")
    default:
    fmt.Println("error")
}

for 循环控制

在 Go 语言中,循环语句只有一个关键字 for 来提供,它可以支持:经典的 while 循环,经典for 循环,还支持简单的死循环。

// 简单循环
for {
    fmt.Println("loop")
    break
}
// 经典 for 循环类型
for i := 0; i < 100; i++ {
    fmt.Println("numner i is ", i)
}
// 经典 while 循环类型
i := 1
for i < 10 {
    fmt.Println("numner i is ", i)
    i = i + 1
}

breakcontinue

对于循环语句来说,恰当时间的停止和跳过,也是重要的控制内容,类C语言通常使用三个关键字来完成这样特殊的控制需求:breakcontinuegoto。Go 语言则使用了 breakcontinue

i := 1
for i < 10 {
    if i == 5 {
        continue
    } else if i == 9 {
        break
    }
    fmt.Println("numner i is ", i)
    i = i + 1
}