Go 语言入门

Go 环境安装

访问 Go 官网 https://golang.org,下载对应平台安装包,MacOs 下载 pkg 包一键安装,自动将 go 添加到了环境变量,直接可以使用 go 命令。

第一支 Go 程序:hello, world!

1
2
3
4
5
6
7
// helloworld.go
package main
import "fmt"

func main() {
fmt.Println("hello, world!")
}

运行:

两种方法:

  1. 该方式只会运行源代码(编译、链接、运行合并为一步),不会产生编译后的可执行文件:

    1
    go run helloworld.go
  2. 编译、运行分开执行:

    1
    2
    go build helloworld.go
    ./helloworld

Go IDE 安装配置

Go IDE 选择 JetBrains 公司的 Goland:https://www.jetbrains.com/go
Goland 是商业软件,不过可以免费激活:https://gitee.com/pengzhile/jetbrains-agent

主题配置:Material Theam UI + Material Oceanic 配色方案
Material Theam UI 插件安装:GoLand–>Preferences–>Plugins–>Install
Material Oceanic 配色方案:GoLand–>Preferences–>Editor–>Color Scheme–>选择 Material Oceanic

最终效果:

一个较完整的示例程序

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
package main

import (
"bufio"
"flag"
"fmt"
"io"
"os"
"sorter/sorter/algorithms/bubblesort"
"strconv"
"time"
)

var infile = flag.String("i", "infile", "File contains values for sorting")
var outfile = flag.String("o", "outfile", "File to receive sorted values")
var algorithm = flag.String("a", "qsort", "Sort algorithm")

func readValues(infile string) (values []int, err error) {
file, err := os.Open(infile)
if err != nil {
fmt.Println("Failed to open the input file", infile)
}
defer file.Close()
br := bufio.NewReader(file)
values = make([]int, 0)
for {
line, isPrefix, err1 := br.ReadLine()
if err1 != nil {
if err1 != io.EOF {
err = err1
}
break
}
if isPrefix {
fmt.Println("A too long line, seems unexpected.")
return
}
str := string(line)
value, err1 := strconv.Atoi(str)
if err1 != nil {
err = err1
return
}
values = append(values, value)
}
return
}

func writeValues(values []int, outfile string) error {
file, err := os.Create(outfile)
if err != nil {
fmt.Println("Failed to create the output file ", outfile)
return err
}
defer file.Close()
for _, value := range values {
str := strconv.Itoa(value)
file.WriteString(str + "\n")
}
return nil
}

func main() {
flag.Parse()
if infile != nil {
fmt.Println("infile=", *infile, "outfile=", *outfile, "algorithm=", *algorithm)
}
values, err := readValues(*infile)
if err == nil {
t1 := time.Now()
switch *algorithm {
case "bubblesort":
bubblesort.BubbleSort(values)
default:
fmt.Println("Sorting algorithm", *algorithm, "is either unknown or unsupported.")
}
t2 := time.Now()
fmt.Println("The sorting process costs", t2.Sub(t1), "to complete.")
writeValues(values, *outfile)
} else {
fmt.Println(err)
}
}