Unit1-入门

1、安装

  • go安装包官网:https://go.dev/dl/

  • 安装完之后,cmd输入go version会输出 go version go1.22.1 windows/amd64 则表示安装成功

  • 配置环境变量:

    image-20240323161604439

    • D:\go文件夹下分别创建三个文件夹bin, src, pkg;然后将 D:\go\bin路径添加到环境PATH中
  • bin: 自动生成,当运行上面的 go get 命令时,自动生成了个bin目录,放置可运行的二进制文件。

  • pkg: 自动生成,产生的第三方包会自动放置在该目录下。

  • src: 手动新建的目录。

2、输出

  • fmt.Print 和 fmt.Println分别是在一行输出和换行输出

  • Print和Printf需要再文本最后加\n 来进行换行

  • 格式化输出:fmt.Printf,如果指定多个格式化变量,则fmt.Printf函数将按顺序把他们替换成相应的值

    1
    2
    3
    4
    5
    6
    7
    package main
    import "fmt"

    func main() {
    // 输出 My weight is 78 Kg
    fmt.Printf("My %v is %v Kg\n", "weight", 78)
    }
  • Printf可以调整文本对齐位置

    • 可以通过指定带有宽度的格式化变量 %4v,将文本的宽度填充至4个字符;
    • 宽度为正数时,空格江北填充至文本左边;为负数时,空格将被填充至文本右边
    1
    2
    3
    4
    5
    6
    fmt.Printf("%-15v $%4v\n", "sapce", 94)
    fmt.Printf("%-15v $%4v\n", "virgin galactic", 100)
    /*
    sapce $ 94
    virgin galactic $ 100
    */
  • //是注释,/* */是文本注释

  • Printf里使用%T可以打印数据的类型。

  • Printf里使用%x%X在打印十六进制数字时,可以格式化变量。

  • Printf里使用%b在打印二进制数字时,可以格式化变量。

  • 如果想打印字符而不是数值,则使用%c来格式化,打印ASCII字符

3、常量和变量

  • 引入两个关键字: constvar;分别用于声明常量和变量

  • 变量必须先声明后使用

  • 可以一次声明多个变量:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // 第一种,单独声明变量
    var a = 10
    var b = 12
    // 第二种
    var(
    a = 10
    b = 12
    )
    // 第三种
    var a,b = 10,12
  • 变量声明的另一种方式 a := 1 等价于 var a = 1

  • 赋值操作符:允许 *= += a++等操作,但是不支持++a这种前置增量的操作

  • 常量的一个语法iota详细介绍可以参考一下链接:https://blog.csdn.net/Dong_chongwu/article/details/128876672

4、随机数

输出0~9之间的随机数,使用rand包中的Intn函数来完成

1
2
3
4
5
6
7
8
9
10
package main
import (
"fmt"
"math/rand"
)

func main() {
var a = rand.Intn(10) // 输出0 ~ 9
fmt.Println(a)
}

5、for循环

go语言中没有while关键字,只用for语句

Go语言中 for 语句有三种:

  • 第一种和其他语言的for 语句用法一样

    1
    2
    3
    for init; condition; post{
    ...
    }
    • init一般为赋值表达式,用于循环控制变量及其他变量初始化。

    • condition 关系表达式和逻辑表达式,用于指示循环控制条件。

    • post 一般为赋值表达式,用于增减循环控制变量

  • 第二种等价于其他语言的while语句

    1
    2
    3
    for condition{
    ...
    }
  • 第三种等价于while True

    1
    2
    3
    for {
    ...
    }

Go语言中for循环的range格式可以迭代slice、map、数组、字符串等类型,格式如下:

1
2
3
for k,v := range oldMap{
newMap[k] = v
}

示例:

1
2
3
4
5
6
7
8
9
package main
import "fmt"

func main() {
nums := [5]int{1, 2, 3, 4, 5}
for i, e := range nums {
fmt.Println("索引为", i, "数值为", e)
}
}

单元练习,详见《go语言趣学指南》第5章单元实验

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package main

import (
"fmt"
"math/rand"
)

const secondDay = 24 * 60 * 60

func main() {
var dis = 62100000
company := ""
trip := ""
fmt.Println("太空航空公司 飞行天数 飞行路程 价格(百万美元)")
fmt.Println("====================================================")
for count := 10; count > 0; count-- {
switch rand.Intn(3) {
case 0:
company = "spaceX"
case 1:
company = "Virgin Galactic"
case 2:
company = "Space Adventures"
}
runSpeed := rand.Intn(16) + 15

runDays := dis / runSpeed / secondDay
price := 20 + runSpeed
if rand.Intn(2) == 1 {
trip = "round-trip"
price *= 2
} else {
trip = "one-trip"
}
fmt.Printf("%-16v %4v %-10v $%4v\n", company, runDays, trip, price)
}
}