【Go基础数据类型及运算】

Go基础数据类型及运算

数据类型分类

  • 命名类型
    • 基础数据类型(整型、浮点型等)
    • 用户自定义类型(type关键字定义的结构、接口等)
  • 未命名类型
    • 集合类型(数组、切片、映射等)
    • 函数等

可以用reflect.TypeOf函数来查看类型名称

基础数据类型

整型

有符号位:int int8 int16 int32 int64
无符号位:uint uint8 uint16 uint32 uint64 uintptr
不同的整型之间不能直接比较,不能直接运算

  • uintptr
    • 记录具体的内存地址,不是指针
    • 地址关联的对象可以被垃圾回收,值不会连带着变动
    • 可以做数值运算,用来跳跃到指定地址

浮点型

包括float32 (±3.4×1038)和float64(±1.8×10308 )

复数

布尔型

布尔值包括true、false,类型长度为1字节
布尔类型无法被其他类型赋值,也不支持类型转换
布尔类型不支持用0和1表示真假

if 和for 语句的条件部分必须是布尔类型的值或表达式

字符型

字符常量用单引号,如’中’,’1’
使用转义字符 ‘’ 转变为特殊字符常量,如’\n’
字符按整数处理,可以运算
格式化输出时,可用%c 输出对应码点值,如
//浙
fmt.Printf(“%c”, 27993)

字符集的主要属性

  • 字符
  • 码点(code point),字符在该集合的唯一数字序号
  • 位模式(bit pattern) ,码点的二进制比特串

编码:码点→位模式
解码:位模式→码点(从字符集取出对应字符)
乱码:匹配的字符集不正确,相同的位模式在不同的字符集中对应的是不同的字符,产生解码错误

Unicode字符集将世界上存在的绝大多数常用字符进行统一编号,解决了码点不统一问题
UTF-32、UTF-16 编解码简单,所有字符用4个或2个字节表示,但存在大小端的字节序、不兼容ASCII字符集、空间效率低等问题
UTF-8采用变长度(1~4)字节进行编码,码点小的字节数少,码点大的字节数多,前128个码点与ASCII重合,并且没有字节序问题,已成为Unicode 编码的事实上标准。

字符串型

字符串单行用双引号 ,多行可用反引号`,空格和缩进都会被保留
字符串是引用类型
字符串长度查询是O(1)
字符串零值可用
字符串不可修改
用strings.Builder , bytes.Buffer 来提高字符拼接效率

指针(重要)

取地址符&,间接访问符*

  • 指针指向存放数据的地址,指针可以操作两个实体
    • 指针值(数据地址)
    • 间访值(数据本身)
  • 指针必须赋值(指向了数据)后,才能进行间接访问操作
  • GO支持指针的指针
  • 指针只声明未赋值时的零值为nil
a := 5
    var b *int          //指针声明,此处 * 在类型前,为指针声明符
    fmt.Print(b == nil) //true
    b = &a              //指针赋值
    *b = 6              //指针间访,此处 * 在变量前,为间访操作符
    //b++               //报错,GO支持垃圾回收,禁止指针运算
    var c **int         //指针的指针
    c = &b
    **c = 7

运算符

++ 自增 只能 变量++ ,++变量不支持
– 自减 只能 变量-- , --变量不支持

位运算:
位运算符只对整数起作用,直接处理每一个比特位(bit),是底层运算,效率较高

  • 左移操作<<:将整数最高位挤掉(符号位不变),在右端补0,相当于乘以2的指定次方
  • 右移操作>>:在整数的高位挤一个符号位,而整数最低位被挤掉
  • 位与操作& :将两个操作数每一位做与操作
  • 位或操作 | :将两个操作数每一位做或操作
  • 异或运算 ^ :将两个操作数每一位做异或(不同返回1,相同返回0)操作

错误类型

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值