Hello GoLang

执行 Go 命令

  • 运行 go version 得到 go version go1.xx.x linunx/amd64

创建 Hello 项目

  • pwd 得到 /workspaces/oh-my-env
  • mkdir hello; code hello 得到新窗口,关闭旧窗口
  • go mod init github.com/frankfang/hello 用于初始化目录
    如果没有看到 go.mod,点击 Refresh Explorer
  • 创建 main.go
  • go build . && ./hello 你也可以用 go run . 代替这两句话

创建 main.go

println 函数不常用,可以用 fmt.Println, 输入 fmt.pl 即可补全

运行 go run .

编译到 Windows 命令

Go 语法

变量

:= 反而不能指定了类型, 但是用的人更多

自己测试

常量

猜猜结果

iota 总结

iota 即希腊字母 ι

  • iota 是其英文发音
  • GoLangiota 默认为 0,每行加 1
  • 使用 iota 可以减少 hard code(写死的代码)
  • 只能用在 const ()
  • 每个 const 都会重置

for 循环

for 循环特点

JS 不一样的地方

  • 不加 ( ),加了会被删
  • for0 个表达式等价于 JS 的 while(true)
  • for1 个表达式等价于 JSwhile(condition)
  • for3 个表达式等价于 JSfor(初始化, 判断, 后续)

if else

if else 特点

JS 不一样的地方

  • 推荐不加 ( )
  • if 接一个表达式等价于 JSif(condition)
  • if 接两个表达式没有等价的 JS 常见写法

switch case

switch case 判断类型
switch case 特点

JS 不一样的地方

  • 不推荐加 ( )
  • 不要加 break
  • 一个 case 可以有多个值,用逗号隔开

函数

  • 函数里面不能声明有名字的函数

自己练习

可变参数函数

匿名函数

函数特点

JS/TS 不一样的地方

  • 返回值可以提前定义名字,return 可缩写
    - numbers ...int 表示多个 int 参数组成的数组
  • 立即执行函数不需要 Hack

数据类型

简单值类型

  • 数字(14种):int32float64
  • 字符串
  • 布尔

复杂值类型

  • 结构体(struct
  • 数组(定长):[3]int

引用类型

  • 指针:*int
  • 切片:[]int
  • 哈希表:map[string]int
  • 函数
  • 通道:chan int
  • 接口:interface {}

值类型

  • 该类型的变量直接存放值

结构体

自己练习

把结构体当做参数

实在要改的话可以这样改

* 与 &

用于类型

  • var a *int 表示 aint 的地址
  • 此时称 a 为指针

用于值

  • &b 表示 b 的地址
  • *c 表示指针 c 对应的值

讲师: 我个人认为,用 var a &int 表示 a 存 int 的地址,更符合语义

把结构体当做参数2

结构体的特点

JS 的不同之处

  • 结构体是值类型,不是引用类型,不能与 JS 的对象进行类比
  • Go 只支持传值,不过可以把地址当做值 modify(&p1)
  • 结构体支持 label,用于各种功能;JS 没有 label

结构体变字符串

数组(定长)

自己练习

数组特点

不怎么用到数组, 不怎么关注就行了

JS 的不同之处

  • 数组是值类型,不是引用类型,不能与 JS 的数组进行类比
  • 数组长度是固定的
  • 可以用 len(a) 获取数组的长度,而不是 a.length