go语言学习内容:go语法基础、go标准库、go module、git、mysql、redis、gin框架、gorm、grpc、docker、mq、go原理(锁、切片、map、gmp、channel、gc),然后就可以找工作啦啦啦啦!!!
进阶内容:微服务(go micro、go zero)、并发编程深入理解、k8s等等开源项目、云原生架构、分布式系统
- Go语言中,在函数调用时,引用类型(slice、map、interface、channel)都默认使用引用传递,其它是值传递。
- 类名、方法名首字母小写表示内部类、函数,大写表示外部(包外)可使用
- 一般一个类写一个文件
- 在Go语言中,当你使用import关键字导入一个包时,并不会自动导入该包所依赖的其他包。每个包都需要显式地通过import语句进行导入。
- 例如,假设有一个包A,它依赖了另一个包B。如果只导入了包A而没有导入包B,那么你的代码将无法访问包B中定义的任何内容。你需要显式地导入包B才能使用它。
- 继承:继承一个实体类,就是把父类名写到类里面
- 多态:有一个父类接口,当一个实体类实现了接口里的所有方法,就等于继承了这个接口
- 断言成功:两种类型是相同的;子类对象也是父类类型
- 协程:goroutine,轻量级线程,把线程分为内核级线程和用户级线程,用户级线程就是协程
- 协程之间的通信使用channel,channel分为无缓冲(同步)和有缓冲(异步)
- go env | grep GOSUMDB:查看go的环境变量,在结果中输出包含GOSUMDB的行,grep是文本搜索工具,| 表示将一个命令的输出作为另一个命令的输入。
- go get下载的包的位置取决于你当前使用的依赖管理模式。在GOPATH模式下,它们被存储在GOPATH/src目录下;而在GOMODULE模式下,它们被存储在GOPATH/pkg/mod目录下,并按版本划分子目录。
- GOPATH模式下,在工作目录中($GOPATH)通常会有三个子目录:
- bin:存放编译后生成的二进制可执行文件。
- pkg:存放第三方包,存放编译后生成的.a文件。
- src:存放项目的源代码,可以是你自己写的代码,也可以是你通过go get下载的包。
- 开启gomodule模式:go env -w GO111MODULE=on
设置代理:go env -w GOPROXY=https://proxy.golang.com.cn,direct - vscode的go语言插件:在插件里直接搜索go,安装;ctrl+shift+p,搜索go install tools,选Go: Install/Update Tools,全选安装。这样就有提示了
- select语句用于从多个通信操作中选择执行。它可以同时等待多个通道操作,当其中一个操作可以进行时,就执行相应的代码块。若多个同时满足,则随机选择一个执行。
- case后面接的表达式必须最终解析为通道操作。select语句的核心是等待通道操作的发生,因此case子句中的表达式必须是通道操作的合法形式。
- go mod init github.com/tang/enc:该命令会在enc目录下创建go.mod文件,go.mod包含module的导入路径(远程仓库路径)和依赖的包及对应的版本。
- 一个go module应该就是一个git仓库,一个git仓库应该只能包含一个go module。
- go mod tidy:添加缺失的模块依赖,并移除无用的模块依赖。修改go.mod和go.sum,不会修改本地磁盘。
- 扫描所有import语句,找出所有直接依赖的模块
- 查找直接依赖模块所依赖的模块,添加到依赖列表
- 在go.mod里移除未实际依赖的模块
- 更新go.sum
- go mod tidy比go get更好,还会单独列出直接依赖的项。
- go clean -modcache:删除的是所有go.mod的本地磁盘缓存,而不仅仅是当前项目的go.mod文件的本地磁盘缓存。
- 编译和执行:
- 单个或少数源码文件:go build/run -o 程序名 main.go
- 多个文件的项目:使用go build命令来编译整个项目,它会自动处理包之间的依赖关系,并编译所有必要的文件。步骤:切换到包含main包的目录;运行go build -o 程序名。