golang知识点

make用于内建类型(map、slice 和channel)的内存分配。new用于各种类型的内存分配。
内建函数new本质上说跟其它语言中的同名函数功能一样:new(T)分配了零值填充的T类型的内存空间,并且返回其地址,即一个*T类型的值。用Go的术语说,它返回了一个指针,指向新分配的类型T的零值。有一点非常重要:new返回指针。
匿名变量不占用为命名空间不会分配内存所以匿名变量之间 不存在重复声明

  1. 注意事项
  2. 函数外的每个语句都必须以关键字开始
  3. := 不能用在函数外
  4. _多用于占位 表示忽略值
    Iiota 是go语言的常熟计数器 只能在常量的表达式中使用

iota在const关键字中出现是被重置为0 const每新增一行常量声明

uint8默认为0

浮点型
分为两种浮点型 float32 float64
布尔值
go语言中以bool类型实现声明bool类型 布尔型数据只有true 和false
1. 布尔 类型默认为 false
2. go语言中不允许将整形强制转换为布尔形
3. 布尔型无法参与数值运算 也无法与其他的类型进行转换

Byte和rune类型
组成每个字符串的元素叫“字符” 可以通过遍历和每个后期字符串的元素我=获得字符

golang输出字符的类型
printf("%c",a);输出单个字符。
printf("%d",a);输出十进制整数。
printf("%f",a);输出十进制浮点数.
printf("%o",a);输出八进制数。
printf("%s",a);输出字符串。
printf("%u",a);输出无符号十进制数。
printf("%x",a);输出十六进制数。

位运算符

//进制的运算
fmt.Println(1<<2)//001 向左移动两位变成100 为4
fmt.Println(4>>2)//100 向右边移动两位为001 变成1

切片的性质
切片是一个拥有相同类型元素的可长度的序列 它是基于 数组类做的一层封装 支持自动扩容

切片是一个类型 它的内部 结构包含 地址 长度和容量 切片一般用于快速的操作一段数据

切片不能直接做比较
不能使用== 来判断两个切片是否含有全部相等的元素 切片唯一合法的比较操作是和nil
比较 一个nil值的切片并没有底层数组 一个nil值的切片的长度和容量都是0 但是 我们不能说一个
长度和容量都是0的切片一定是nil
判断切片的是否为空使用len() 是否等于0

go切片的拷贝和赋值

append()方法为切片添加 元素
go语言的内置函数append () 可以为切片动态添加元素
每个切片会指向一个底层数组 这个数组能容纳一定数量的元素
当底层数组不能容纳新增的元素 切片就会自动俺找个一定的策略进行扩容
此时切片指向的底层数组就会跟换 扩容往往发生在append 函数的时候

切片要初始化之后才能使用

go语言中的map类型 map
map是一种无序的基于key-value 的数据结构 go语言中的map是引用类型 必须初始化才能使用
Map 类型的变量默认初始值为nil 需要使用make() 函数来分配内存

Map 需要初始化才能使用
函数
Go 语言中定义函数使用fun 关键字

go语言中支持函数 匿名函数和闭包 并且函数在go语言中属于 一等动漫
函数定义

Defer 语句
Defer 语句defer 语句 会将后面跟随的语句进行延迟处理 在defer归属的函数 即将返回时 将延迟处理的语句安defer 定义的逆序进行执行 先被defer 的语句最后被执行 最后被defer的语句 最先执行
变量的作用域
全局变量
匿名函数
匿名函数 是没有函数名的函数 匿名函数
多用于实现回调函数和闭包

内置函数介绍

Go语言指针
go语言中的函数参数是值拷贝 当我们想要修改这个变量的时候
我们可以创建一个执行该变量地址的 指针变量
传递数据使用指针而无需拷贝数据 类型指针不能进便宜和运算
go语言中的指针非常简单 只需要记住两个符号 &(取地址) * (根据地址 取值)
go结构体
go结构体的基础数据类型 属于一些事务的基本 属性
go自定义数据类型 可以 封装多个 基本数据类型这种 数据类型交基本结构体
struct
结构体实例化
结构体实例化 才会真正的分配内存 就是必须实例化之后才能使用结构体的字段 结构体本身也是一种类型 我们可以向内置类型一样用 var生命结构体字段

什么时候需要指针类型
需要修改指针接受者值
接受者拷贝的代价比较高
保证一致性 如果有某个方法 使用了接收者 那么其他的指针也需要使用指针接受者

反射
Reflect 包
在go 的反射机制中 任何接口都是由一个具体类型和具体类型的值 两部分组成的
在共语言中的相关功能有内置的reflect 包提供的 任意接口在反射中都可以理解为由
reflectt.type 和reflect 。value 两部分组成的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值