你了解Go语言嘛?(二) | 青训营笔记

92 阅读4分钟

大家好!这是我参与「第五届青训营 」笔记创作活动的第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-11
int16(-32768 到32767) -2^15 到2^15-12
int32(-2147483648 到2147483647)4
int64(-9223372036854775808 到9223372036854775807)
-2^63 到2^63-1
8
uint8(0 到255) 0 到2^8-11
uint16(0 到65535) 0 到2^16-12
uint32(0 到4294967295) 0 到2^32-14
uint64(0 到18446744073709551615) 0 到2^64-18

**关于字节: ** 字节也叫Byte,是计算机数据的基本存储单位。8bit(位)=1Byte(字节);1024Byte(字节)=1KB;1024KB=1MB 1024MB=1GB 1024GB=1TB 。

特殊整型

类型描述
uint32 位操作系统上就是uint32,64 位操作系统上就是uint64
int32 位操作系统上就是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 函数来将一个整数以不同进制形式展示。