七日 Go 的自学笔记 (一)

文章目录


前言

学无止境啊,太深了


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 循环遍历切片时,每次迭代都会返回两个值。 第一个值为当前元素的下标,第二个值为该下标所对应元素的一份副本。

相关推荐
岁忧3 小时前
GoLang五种字符串拼接方式详解
开发语言·爬虫·golang
tyatyatya3 小时前
MATLAB基础数据类型教程:数值型/字符型/逻辑型/结构体/元胞数组全解析
开发语言·matlab
心无旁骛~4 小时前
python多进程和多线程问题
开发语言·python
星云数灵4 小时前
使用Anaconda管理Python环境:安装与验证Pandas、NumPy、Matplotlib
开发语言·python·数据分析·pandas·教程·环境配置·anaconda
kaikaile19954 小时前
基于遗传算法的车辆路径问题(VRP)解决方案MATLAB实现
开发语言·人工智能·matlab
遇到困难睡大觉哈哈5 小时前
Harmony os——ArkTS 语言笔记(四):类、对象、接口和抽象类
java·笔记·spring·harmonyos·鸿蒙
四问四不知5 小时前
Rust语言进阶(结构体)
开发语言·后端·rust
q***9945 小时前
index.php 和 php
开发语言·php
oioihoii5 小时前
C++网络编程:从Socket混乱到优雅Reactor的蜕变之路
开发语言·网络·c++
程序员东岸5 小时前
《数据结构——排序(中)》选择与交换的艺术:从直接选择到堆排序的性能跃迁
数据结构·笔记·算法·leetcode·排序算法