【go学习笔记一】简介
go语言简介
静态强类型、编译型语言。
动态类型语言:赋值发生在程序运行阶段,不要求显式声明。如:a=3。编译阶段更高效,但是运行时的类型检查会影响到性能,出错机会较大。
静态类型语言:信息在编译阶段就需要,变量类型需要显式声明。如:float x = 0.3。在编译阶段做更多处理,但是在运行时效率更好,出错率低。
强类型:一旦给变量赋值类型,就不能和其它类型混用:
如:错的
a = 3 a = 3+'string'
弱类型:可以和其它类型混合计算:
var item = 5; item = item + "string"; # 可以结合:5string
语法与C相近,但是:内存安全,GC,并发计算。
语言特点
- 背靠大厂,google,可靠
- 天生支持并发
- 简单,易上手
- 内置runtime,支持垃圾回收
- 可以直接编译成机器码,不依赖其它库
- 丰富的标准库
- 可以跨平台编译,如windows平台开发,部署到Linux。
应用领域
- 服务器编程
- 开发云平台
- 区块链
- 分布式系统
- 网络编程
哪些公司在用go语言
Google、腾讯、京东、小米等等,部分项目都用到了go。字节大量使用go。
golang开发环境搭建
windows
安装
先查看是否有老版本:
发现有老版本,就先卸载:
卸载完成之后:
安装新版本:
建议不要默认路径,而是新建一个文件夹如:D:\go1.18
安装过程一路next。
安装完成之后:
cmd查看版本:
如果有问题,就需要配置一下环境变量。
配置go环境
$env:GO111MODULE="on" #111之后使用模块化的管理,不在依赖go path
cmd运行会报错,可以用powshell:
设置代理:使用go mod管理库,可能有科学上网的问题,需要设置下代理。
$env:GOPROXY="https://goproxy.cn"
路径:
set GOROOT=D:\go1.18 #go 的安装路径
set GOPATH=C:\Users\PC\go
# go项目的安装路径,之前需要通过go path才能创建项目,现在高版本有了模块化管理了,一般不用
安装配置git
安装具体步骤不说了。
Linux平台
类似,安装到再说。
开发工具
goland,vscode
vscode
安装扩展。
测试:
之前的时候go插件安装会有github的问题,现在没有了。
每次go run比较麻烦,安装扩展:code runner
可以点击直接运行。
vscode快速生成代码片段
pkgm
main包+main主函数
ff
打印
for
for 循环
forr
for range
fmain
s.print!
代码:
func main() {
s := "kangkang"
fmt.Printf("s: %v\n", s)
}
go常用命令
go build
生成可执行文件。
go run
运行
go clean
清除编译过程中产生的一些文件。
go env
显示环境变量的配置
go get
安装包
例如mysql
go get之前需要初始化:
PS C:\Users\PC\Desktop\go_pro> go mod init go_pro
go: creating new go.mod: module go_pro
go: to add module requirements and sums:
go mod tidy
然后go get:
PS C:\Users\PC\Desktop\go_pro> go get github.com/go-sql-driver/mysql
go: downloading github.com/go-sql-driver/mysql v1.6.0
go: added github.com/go-sql-driver/mysql v1.6.0
go.mod文件会出现mysql的依赖:
module go_pro
go 1.18
require github.com/go-sql-driver/mysql v1.6.0 // indirect
go install
编译并安装
如何编写go代码
代码组织
go应用使用包和模块来组织代码。
包对应到文件系统就是文件夹,模块就是go源文件,一个包中会有多个模块,或者多个子包。
go项目管理工具
早期(1.11)之前使用gopath管理项目,不方便。之后使用gomod来管理项目。
步骤
- 创建项目(新建文件夹)
- vscode打开这个文件夹,go mod init 【项目名】初始化
- 创建包
- 创建模块
- 相互调用
golang标识符、关键字、命名规则
稍作了解,不用背,后面会使用到。
标识符
变量、常量、方法、结构体、数组等等的名字
组成
- 数字、字母、下划线
- 只能字母或者下划线开头
- 标识符区分大小写
如正确的命名:
package main
func main() {
var name string
var age int
var _sys int
}
关键字
预定义标识符
常量:
true, false, iota, nil
类型:
int, int8, int16, int32, int64, uint,
uint8, uint16, uint32, uint64, uintptr,
float32, float64, complex128, complex64,
bool, byte, rune, string, error
函数:
make, len, cap, new, append, copy, close,
delete, complex, real, imag, panic, recover
命名规范
区分大小写
语法层面限定:任何对外暴露的名字必须以大写字母开头,不对外暴露的以小写字母开头。
typora更改字体颜色:Ctrl+Alt+【颜色】
autohotkey工具
地址:hotkey
包名:和目录保持一致,要有意义,和标准库不冲突,包名小写。
文件命名:小写,下划线分隔单词
结构体:驼峰命名法
接口命名:er作为后缀,如:Reader,Writer。
变量:一般驼峰
常量:全部大写字母,下划线分词