简介

Go语言本身只有很少的特性,也不太可能添加太多的特性:
拥有自动垃圾回收、一个包系统、函数作为一等公民、词法作用域、系统调用接口、只读的UTF8字符串等。

go没有隐式的数值转换,没有构造函数和析构函数,没有运算符重载,没有默认参数,也没有继承,没有泛型,没有异常,没有宏,没有函数修饰,更没有线程局部存储。

安装

https://golang.google.cn/doc/install?download=go1.16.5.linux-amd64.tar.gz#install

根据提示下载,然后使用tar命令解压到/usr/local

1
sudo tar -C /usr/local -xzf 下载的安装包的名字

傻逼go安装包,2021年了,安装没提示(只是单纯的解压),而且还要自己配PATH环境变量,我笑了。配了path环境还要注意要登出登入linux才能起作用。

hello world

1
2
3
4
5
6
7
8
9
package main

import (
    "fmt"
)

func main(){
    fmt.Println("suprise! motherfucker")
}

go中一个package由一个或多个.go文件组成,每个go文件开头申明本文件属于哪个package

main包比较特殊。它定义了一个独立可执行的程序,而不是一个库。在main里的main函数也很特殊,它是整个程序执行时的入口

Go语言不需要在语句或者声明的末尾添加分号,除非一行上有多条语句。实际上,编译器会主动把特定符号后的换行符转换为分号,因此换行符添加的位置会影响Go代码的正确解析(译注:比如行末是标识符、整数、浮点数、虚数、字符或字符串文字、关键字break、continue、fallthrough或return中的一个、运算符和分隔符++、–、)、]或}中的一个)。

举个例子,函数的左括号{必须和func函数声明在同一行上,且位于末尾,不能独占一行,而在表达式x + y中,可在+后换行,不能在+前换行(译注:以+结尾的话不会被插入分号分隔符,但是以x结尾的话则会被分号分隔符,从而导致编译错误)。

gofmt工具把代码格式化为标准格式

goimports,可以根据代码需要,自动地添加或删除import声明

go env

查看当前go的各种配置信息,如GOPATH

命令行参数

(ps:脑子进了一吨水才会这么组织章节) os.Args是一个字符串数组,os.Args[0],是命令本身的名字,和其他编程语言一致

循环

第一种写法:

1
2
3
for i:=1; i<10; i++ {

}

注意,不能用++i?

第二中写法:

1
2
3
4
for i, el := range list {
    fmt.Println(i, el)
}

设list是一个列表,采用以上方式,可以获得索引i,下标i的元素。

变量声明的几种方式

1
2
3
4
s := ""        // 只能用在函数内部,不能用为包变量
var s string   // 依赖与string内部的初始值
var s = ""
var s string = ""

实践中一般使用前两种形式中的某个

join

strings.Join()用法和python的join类似。