由于期末考试没时间学算法学了一波go放松一下
这可能是我学语言最认真的一次了(
跟的是尚硅谷学完的 二倍速+快进 折腾了一周左右
网络编程部分没看 因为不懂计网 不想学(
- 虽然已经很老的课了 但是顺平老师雀氏讲的太细了
- 也是听完了
- 自己也没时间写笔记 还有更重要的事情要做,就只是浅浅记录了一下
- 写得也很乱 自己复习用
go≈c+py 保留了指针 如果有c/c++的基础学起来应该也会很快
go语言的hello world
package main
import (
"fmt"
)
func main(){
fmt.Println("hello world!")
}
数据类型
- 字符串的字节使用 UTF-8 编码标识 Unicode 文本
- go里面没有char
变量
如果没有声明变量类型 var 可以自动推导变量类型
和c++区别的是 如果没有声明成全局变量 也会赋“0”值
package main
import (
"fmt"
)
func main(){
var a= 10
//a:=10
//var a int a=10
fmt.Printf("%T",a)
}
也可以这样声明(导包也可以直接一个括号
var (
a int
b bool
)
- 匿名变量_ 不占用内存空间,不会分配内存
- 变量作用域首字母大写 别的包就也能访问的到
指针
和c差不多 。 空指针是nil c++里的null
匿名函数
package main
import (
"fmt"
_"time"
_"runtime"
)
func main(){
ans:=func (a int ,b int) int{
return a+b
}(1,2)
fmt.Println(ans)
}
闭包
![请添加图片描述](https://img-blog.csdnimg.cn/5d459b251f5f400ca38051ff900666d4.png
数组 切片 map 结构体
- 这些东西都很简单 和c++差不多
- 首字母大写== public 其他包也可以访问到
- 数组是值类型!
- 数组必须有长度 [2]int [3]int 不一样 相当于两种数据类型
- 切片是引用类型
- 相当于结构体 存放了首地址 容量 和长度
append底层
- 字符串底层是结构体 ,也可以切片处理
- string不能直接修改 修改成byte或者rune
- map声明不占内存
- 记的 slice和map 使用时需要make就行
接口
- 接口必须把所有的方法全部实现
- 接口是go多态的体现,继承的补充
一个简单的接口实现
package main
import (
"fmt"
)
type i1 struct {
a int
}
type node interface {
solve1()
solve2()
}
func (i i1) solve1() {
fmt.Println(i.a)
}
func (i i1) solve2() {
fmt.Println(i.a)
}
func main() {
var p i1 = i1{10}
var a node = p
a.solve1()
}
工厂模式
go语言里面没有构造函数 所以使用工厂模式解决这个问题
json
多线程
- List item
可读可写:
- 并行并发的程序涉及很多逻辑问题 写的时候要特别注意 也是go的最大特点
- 如果只是向管道写入数据,而没有读取,就会出现阻塞
- 写和读不同步也可以 底层已经做了优化
- select可以解决取数据的问题 switch“有序” 它“无序”
- 协程发现了panic 必须捕获 负责会 造成程序崩溃
- 开启写的协程,执行完成记得关闭,否则读取管道一直等待导致死锁
- 关于主线程提前结束可以开一个守护线程
- 更好的解决主线程提前结束的方法link
反射
- 主要是用来写框架 真没学太明白(
- 可以说平常写的代码都是正射 他是反射来获取东西
序列化和反序列化
网络编程
等学了计网再学
数据结构
acmer 数组模拟一些ds还是很容易的