文章目录
前言
学无止境啊,太深了
GPT 给我安排的七日学习计划

起步
安装什么的就不赘述了,去官网上照着做就好了
go 语法
包
直接开刷这个网址,这里面是一步一步学习的 https://tour.go-zh.org/welcome/1

这话的意思可能是:你导入了 "math/rand"
之后,可以用 rand 来调用里面的方法吧?

下面会记录一些我觉得比较重点的问题,或者是我想记录的东西
导出

函数
这种写法很像 ts
啊

带名字的返回值

可以这样写,这样写,可读性会更好一些
不过有引出了新的问题:
:=
是啥?
go
package main
import "fmt"
func split(sum int) (int, int) {
x := sum * 4 / 9
y := sum - x
return x, y
}
func main() {
fmt.Println(split((17)))
}
变量
第一次见

赋值
可以连着赋值
短变量声明
好的,刚才的疑惑来解答了
在函数中,短赋值语句 :=
可在隐式确定类型的 var 声明中使用。
函数外的每个语句都 必须 以关键字开始(var、func 等),因此 := 结构不能在函数外使用。

基本类型
md 开始上强度了,开始看不懂了


哦哦大概能猜出来一些,%T
是这个变量的类型, %v
是这个变量的值,然后
有点数学意味的东西是位运算:
另一个是复数

再来复习一下什么是复数

零值


类型转换,类型推断
没玩出什么新花样
go
package main
import "fmt"
func main() {
// v := 42 // 修改这里看看! // v is of type int
// v := 42.1 // 修改这里看看! // v is of type float64
// v := 42.1 + 7i // 修改这里看看! // v is of type complex128
// v := false // 修改这里看看! // v is of type bool
// v := func() {} // 修改这里看看! // v is of type func()
fmt.Printf("v is of type %T\n", v)
}
常量

对fmt.print 的几个疑问

数值常量

Go 的常量在无类型状态下可以非常大,但一旦需要具体类型(比如 int),如果超出类型范围就会编译错误。

数学:左移运算符的理解

对应的右移运算符

总结

ok 基础的就这么多,第一天先这样吧 突然发现还有下一章,for 以及条件相关的,滚回来继续学了
for 循环
简单的循环跑一下 ,go
中的 for
循环没有括号
for 中的定义,以及步长都是可选的,可选之后,保存一下,分号就会变没的,之后的代码就太像 while
了
go
package main
import "fmt"
func main() {
sum := 1
for sum < 1000 {
sum += sum
}
fmt.Println(sum) //1024
}
if else

好吧 我感觉这么写没啥用的写法,了解一下再说

也就是说,他先算,算完之后再打印
switch 的用法
switch 语句是编写一连串 if - else 语句的简便方法。它运行第一个 case 值 值等于条件表达式的子句。
Go 的 switch 语句类似于 C、C++、Java、JavaScript 和 PHP 中的,不过 Go 只会运行选定的 case,而非之后所有的 case。 在效果上,Go 的做法相当于这些语言中为每个 case 后面自动添加了所需的 break 语句
在 Go 中,除非以 fallthrough 语句结束,否则分支会自动终止。 Go 的另一点重要的不同在于 switch 的 case 无需为常量,且取值不限于整数。
这里跟 js 还是有点区别的,在 go 中,就没有 break 这个东西了。
if / esle if / else 的更好的替代

defer 栈
- 后进先出
- 外层函数返回后执行
- 推迟调用的函数其参数会立即求值,但直到外层函数返回前该函数都不会被调用。
指针、结构体、切片
切片 s 的长度和容量可通过表达式 len(s) 和 cap(s) 来获取。

二维数组
go
package main
import (
"fmt"
"strings"
)
func main() {
// 创建一个井字棋(经典游戏)
board := [][]string{
[]string{"_", "_", "_"},
[]string{"_", "_", "_"},
[]string{"_", "_", "_"},
}
// 两个玩家轮流打上 X 和 O
board[0][0] = "X"
board[2][2] = "O"
board[1][2] = "X"
board[1][0] = "O"
board[0][2] = "X"
for i := 0; i < len(board); i++ {
fmt.Printf("%s\n", strings.Join(board[i], " "))
}
}
切片的追加

问题:为什么容积是 6 呢?

range 遍历
range 会解构出下标和值
当使用 for 循环遍历切片时,每次迭代都会返回两个值。 第一个值为当前元素的下标,第二个值为该下标所对应元素的一份副本。
