导图社区 【社区作品】GO基本语法
go 语言基本语法,附有代码示例。总结了基础语法、类型、内置类型、泛型等。干货满满,有需要的朋友赶紧收藏吧!
描述了关于GO语言初学时使用的语法,附有代码。可以作为GO语言的对照学习入门。后期如有补充,将会做新的导图发布在作品页。
本书为计算机从业者介绍了计算机的组成、CPU、二进制的运算、内存、操作系统、程序运行、汇编、硬件控制、机器学习等内容,让读者深入了解程序是怎样从源文件经历各个过程在你的计算机中运行起来的,是计算机爱好者和从业人员必读的科普书籍。
社区模板帮助中心,点此进入>>
互联网9大思维
组织架构-单商户商城webAPP 思维导图。
域控上线
python思维导图
css
CSS
计算机操作系统思维导图
计算机组成原理
IMX6UL(A7)
考试学情分析系统
GO基本语法
基础语法
main函数
package 声明
可以和名字目录不同
test文件的声明可以加上_test后缀
同目录下.go文件声明必须一致,test文件的声明也必须一致
访问性
大写就是包外可以访问
小写只能包内访问
基本类型
int家族(可以表达正负数)
int
int用几个字节取决于CPU
int8
1字节
int16
2字节
int32
4字节
int64
8字节
unit 家族(无符号整形)(只能表达正数)
uint
uint用几个字节取决于CPU
uint8
uint16
uint32
uint64
float家族
float32
4zijie
float64
string
拼接用 +
用strings包的辅助用法
Println()内的双引号“”内部的双引号“”需要做转义,否则会造成输出错误,转义时可以将要输出的内容写好后再复制到双引号内,让编译器自动转义
Println()也可以用反引号` `,反引号内部可以换行
字符串拼接时不能接数字,需要把数字先转成字符串再拼接,用strconv.Itoa(123),将123转成字符串
使用函数len()得到的是字符串的字节长度,不是字符个数。使用utf8.RuneCountInString()可以得到字符个数
byte类型
就是字节,本质上就是uint8,也用它来表示ASCII码,对应操作在bytes包里面
[ ]byte切片可以跟string 互相转化
var a [ ]byte = 'a'用单引号赋值时只能用单个字符,此时输出的是a的ASCII码值97
var a [ ]byte = "hello"用双引号赋值时可以给字符串
bool类型
且And:(a && b)
或Or: ( a || b)
取反:(!a)
数学运算
math包有更多辅助用法
按住command点击包函数,就可以跳进包里面看相关解释
运算的双方必须是同一个类型,int和int64也不能一起运算,需在运算之前转成同类型。
整型与整型运算结果也是整型,若想得到精确数值,需转成浮点型再计算
变量
var a int = 123
a := 123
声明且赋值
GO的类型推断
只能用于局部变量
常量
const a int = 123
可以不带类型GO自己可以推断
无法修改
iota用法
控制常量初始化
可是使用iota的数学运算,包括位移运算
函数
定义
关键字func
函数名
首字母是否大写决定了包外是否可以被访问
参数列表
参数带不带名字都可以
同类型的紧挨在一起的参数可以一起声明类型
返回值
允许多个返回值
返回值可以有名字,名字作用域是整个函数
递归
一个函数内部调用它自己
递归嵌套太深有可能会出现栈溢出现象
通过增加大小或者修改代码来解决
函数式入门
函数作为变量
函数本身可以赋值给某个变量,这个变量可以直接发起调用
局部函数
在函数a内可以再声明一个函数b,这个函数b的作用域仅在函数a内
函数作为返回值
注意:不是函数的返回值,而是函数本身作为返回值,本身也是闭包的应用
匿名函数
闭包
面试重点
上下文+函数
上下文:在函数之外定义的
一个对象被闭包引用的时候,是不会被垃圾回收的,闭包使用不当会造成内存泄漏问题
函数作为类型
myFunc4实际上是一个变量,类型是func,被Func3赋值。注意Func3后面没有()
不定参数
最后一个参数
等价于使用切片
defer
先进后出
确定值的原则
作为参数传递:定义的时候确定
作为闭包引入:使用的时候确定
修改返回值
只能修改带名字的返回值
实现原理
在函数返回的前一刻执行,称为:延迟调用
带有接收器的函数也称为方法
控制结构
if
if else
可以在if else块里面定义一个新的局部变量
if else if
for
for range循环
用于遍历数组,切片,map
for i 循环
for condition循环
switch语句
可以有default 分支
不需要break
编译能通过说明可以switch
内置类型
数组
语法 [cap]type
初始化要指定长度
无法改变长度
可以直接初始化
arr[i] 访问元素
切片
语法 [ ]type
初始化
直接初始化
make 初始化
注意预估容量
len 获取长度
cap 获取容量
子切片
arr[start:end]
arr[start:]
arr[:end]
是否包含数据
子切片和切片内存共享问题
以扩容为判断标准
未扩容情况下,还是共用一个数组
扩容后,不再是之前的数组
map
预估容量
读取
val,ok = m[key]
val 值
ok,key 是否存在
val = m[key]
存在则是输出值
不存在则是输出对应类型的零值
for key,val
遍历的结果都不一样,k,v是一一对应,但顺序不是一定的
delete 删除
comparable 概念
泛型
func A[T any]()
函数泛型
type A[T any] struct{}
结构体泛型
type A [T any] interface{}
泛型接口
类型约束
类型
接口 type X interface{}
定义接口
接口是一种行为的抽象
结构体 type X struct{}
Struct{}
&Struct{}
new(Struct)
字段赋值
按照顺序赋值
按照名字赋值
自引用
只能用指针
衍生类型 type A B
A是一个全新的指针
类型别名 type A = B
指针
&取地址
* 解引用
方法接收器
结构体接收器
指针接收器
遇事不决用指针
鸭子类型
组合
组合没有多态
结构体引用结构体就是组合
切片可以扩容
命名规则
首字母大小写控制了访问性
驼峰命名法
支持类型推断
推荐使用