1 标识符命名特点和规范
1.命名规范:(1) 由字母a-z,0-9和 _ 组成
(2) 数字不能开头
(3)严格区分大小写
(4)不能包含空格
(5)下划线"_"为空标识符,它对应的值会被忽略,可在for-range中使用
(6)不能使用系统保留关键字作标识符,如break,if
2.包名和目录名应尽量保持一致
3.变量名、函数名、常量名尽量使用驼峰法
如:stuName
4.若变量名、函数名、常量名首字母大写,则可以被其他的包访问,首字母大写为公有,小写为私有。
2 变量
1.反引号会对字符串进行原生形式输出,包括换行等转义字符
例: str := abc\n
2.数据类型转换:T(V)
T:要转成的类型,V:被转变量名
3.指针有类型限制,需要匹配值类型
4.值类型和引用类型:值类型-数组、结构体
引用类型-指针、切片、map、管道channel、接口interface
值类型:变量直接存储值,内存在栈中分配
引用类型:变量存储地址,地址对应的空间存储值,内存在栈中分配。没有变量引用该地址,改地址对 应数据空间被回收。
5.自定义类型
type myInt int
3 输入
scanln :获取一行的输入
scanf:获取格式化输入 scanf无法分多行输入,它会把回车符当做输入字符处理。
4 函数
1.defer:延迟执行,后定先执行
2.函数可作为变量,也可作为参数
3.闭包=函数+外层变量的引用
4.内置函数:close-关闭channel
len-求长度
new-给值类型分配内存,返回指针
make-给引用类型分配内存
append-追加元素到切片
panic和recover:错误处理
遇到panic程序会异常退出
5.函数会先在内层寻找局部变量,找不到时会到外层寻找全局变量
5 go module模式
新建一个项目,需要在项目路径下通过 go mod init 项目名对项目进行初始化。
项目需要第三方包时,可用require 域名/xx/xx引入第三方库
项目中执行go get可以下载依赖包
go mod tidy:清楚无用依赖
6 Map
基本语法: var xx = make (map[keytype]valuetype,可用空间)
判断某个键是否存在: v,ok := Map名[键名]
若键名存在则ok为true,若不存在则为false
map是无序的,与添加顺序无关,可通过对键名排序来事先顺序输出
map删除键值对:
delete(map,key)
常用包内函数
unsafe.Sizeof():输出变量所占字节数
math.sqrt(x) :返回x的平方根,x为float64
rand.Intn(n): 返回取值在0~n的伪随机数,不包括n