大家好!这是我参与「第五届青训营 」笔记创作活动的第2天。
我是一名在校大二的学生,很荣幸的参加本次青训营,所以我想把我在这次青训营的学习经历通过这次活动记录下来,和本次参加项目的小伙伴一起学习探讨,今天讲解的是go语言基础的第二节,加油!学习永无止境!💪💪💪
GO语言
3、常量
相对于变量,常量是恒定不变的值,多用于定义程序运行期间不会改变的那些值。常量的声明和变量声明非常类似,只是把var 换成了const,常量在定义的时候必须赋值。
3.1、使用const 定义常量
// 1、常量定义
const pi = 3.1415926
const name = "wang"
// 2、批量多个常量
const (
user = "wang"
sex = "man"
)
// 3、const同时声明多个常量时,如果省略了值则表示和上面一行的值相同
const (
n1 = 100
n2
n3
)
3.2、iota
iota 是golang 语言的常量计数器,只能在常量的表达式中使用;
iota 在const 关键字出现时将被重置为0(const 内部的第一行之前);
const 中每新增一行常量声明将使iota 计数一次(iota 可理解为const 语句块中的行索引)。
3.2.1、iota 只能在常量的表达式中使用。
fmt.Println(iota)
编译错误: undefined: iota
3.2.2、每次const 出现时,都会让iota 初始化为0。【自增长】
const a = iota // a=0
const (
b = iota //b=0
c //c=1
)
3.2.3、const iota 使用_跳过某些值
const (
n1 = iota //0
n2 //1
_
n4 //3
)
3.2.4、iota 声明中间插队
const (
n1 = iota //0
n2 = 100 //100
n3 = iota //2
n4 //3
)
const n5 = iota //0
3.2.4、多个iota 定义在一行
const (
a, b = iota + 1, iota + 2 //1,2
c, d //2,3
e, f //3,4
)
4、数据类型介绍
Go 语言中数据类型分为:基本数据类型和复合数据类型
基本数据类型有:整型、浮点型、布尔型、字符串
复合数据类型有:数组、切片、结构体、函数、map、通道(channel)、接口等。
4.1、整数
整型分为以下两个大类: 有符号整形按长度分为:int8、int16、int32、int64 对应的无符号整型:uint8、uint16、uint32、uint64
%b 二进制
%c 对应的 Unicode 码位所代表的字符
%d 十进制
%o 八进制
%O 八进制,带 0o 前缀
%q 使用 Go 语法安全转义的单引号字符文字。
%x 十六进制,af用小写字母
%X 十六进制,AF为大写字母
%U Unicode 格式:U+1234;与 "U+%04X" 相同
| 类型 | 范围 | 占用空间(字节) | 有无符号 |
|---|---|---|---|
| int8 | (-128到127) -2^7 到2^7-1 | 1 | 有 |
| int16 | (-32768 到32767) -2^15 到2^15-1 | 2 | 有 |
| int32 | (-2147483648 到2147483647) | 4 | 有 |
| int64 | (-9223372036854775808 到9223372036854775807) -2^63 到2^63-1 | 8 | 有 |
| uint8 | (0 到255) 0 到2^8-1 | 1 | 无 |
| uint16 | (0 到65535) 0 到2^16-1 | 2 | 无 |
| uint32 | (0 到4294967295) 0 到2^32-1 | 4 | 无 |
| uint64 | (0 到18446744073709551615) 0 到2^64-1 | 8 | 无 |
**关于字节: ** 字节也叫Byte,是计算机数据的基本存储单位。8bit(位)=1Byte(字节);1024Byte(字节)=1KB;1024KB=1MB 1024MB=1GB 1024GB=1TB 。
特殊整型
| 类型 | 描述 |
|---|---|
| uint | 32 位操作系统上就是uint32,64 位操作系统上就是uint64 |
| int | 32 位操作系统上就是int32,64 位操作系统上就是int64 |
| uintptr | 无符号整型,用于存放一个指针 |
注意:
在使用int 和uint 类型时,不能假定它是32 位或64 位的整型,而是考虑int 和uint可能在不同平台上的差异。
注意事项:
实际项目中整数类型、切片、map 的元素数量等都可以用int 来表示。在涉及到二进制传输、为了保持文件的结构不会受到不同编译目标平台字节长度的影响,不要使用int 和uint。
int不同长度直接的转换:
package main
import (
"fmt"
)
func main() {
var num1 int8
num1 = 127
num2 := int32(num1)
fmt.Printf("值:%v 类型%T", num2, num2) //值:127 类型int32
}
注意事项:
Go1.13 版本之后引入了数字字面量语法,这样便于开发者以二进制、八进制或十六进制浮点数的格式定义数字,例如:v := 0b00101101, 代表二进制的101101,相当于十进制的45。v := 0o377,代表八进制的377,相当于十进制的255。v := 0x1p-2,代表十六进制的1 除以2²,也就是0.25。而且还允许我们用_ 来分隔数字,比如说:v := 123_456 等于123456。我们可以借助fmt 函数来将一个整数以不同进制形式展示。