Go语言基本数据类型1

Go语言基本数据类型1

分类类型细分类型数据类型数值
基本数据类型数值型整数类型int32位系统4个字节 -231 ~ 231-1 | 64位系统8个字节 -263-1 ~ 263-1 | 整型的默认类型是int
int8-128 ~ 127
int16-215 ~ 215-1
int32 / rune-231 ~ 231-1 rune表示一个unicode码
int64-263 ~ 263-1
uint32位系统4个字节 0 ~ 232-1 | 64位系统8个字节 0 ~ 264-1
uint8 / byte0 ~ 255
uint160 ~ 215-1
uint320 ~ 231-1
uint640 ~ 263-1
byte0 ~ 255
浮点型float32-3.403E38 ~ 3.403e38 | 符号位 + 指数位 + 尾数位
float64-1.798E308 ~ 1.798E308 | 默认是float64
字符型字符型byte0 ~ 255
布尔型布尔型booltrue、false
字符串字符串string-

数据类型细分类型表示
派生/复杂数据类型指针pointer
数组-
结构体struct
管道channel
函数-
切片slice
接口interface
map-

一、整型的使用细节
  1. go中各整数类型分:有符号 和 无符号 ,int uint 的大小关系和系统有关
  2. go中的整型more声明为int型
  3. 如何在程序中查看某个变量的字节大小和数据类型
package main
import (
    "fmt"
    "unsafe"
)

func main(){
  var n1 int64 10
  fmt.Printf("n1 的类型为 %T n1占用的字节数为 %d ", n1, unsafe.Sizeof(n1) )
}
  1. go程序中整型变量在使用中时,遵守保小不保大的原则,即:在保证程序正确运行下,尽量使用占用空间小的数据类型。如
var age byte = 90
  1. bit: 计算机中的最小存储单位。byte:计算机中基本存储单元。

二、小数类型/浮点型
类型占用存储空间表数范围
单精度float324字节-3.403E38 ~ 3.403e38
双精度float648字节-1.798E308 ~ 1.798E308
  1. 类型分类

    1. 关于浮点数在机器中的存放形式的简单说明,浮点数=符号位+指数位+尾数位

      浮点数都是有符号的

    2. 尾数部分可能丢失,造成精度损失

  2. 浮点型使用细节

    1. go浮点类型有固定的范围和字段长度,不受操作系统影响
    2. go的浮点型默认声明为float64类型
    3. 浮点常亮有两种表现形式
      1. 十进制数形式:5.12 或 .512 (必须有小数点)
      2. 科学计数法形式:5.123e2 = 5.12 *10的2次方 或 5.12E-2 = 5.12 / 10的2次方

三、字符类型
  1. 基本介绍

    go中没有专门的字符类型,如果要存储单个字符(字母),一般用byte来保存

    字符串就是一串固定长度的字符链接起来的字符序列, go的字符串是由字节组成的

var n1 byte = 'a'
var n2 byte = 'b'
var n3 int = '冬'
  1. 使用细节

    1. 字符常量是用单引号括起来的单个字符
    2. \ 是转义字符
    3. go语言的字符使用utf-8编码,英文字母1个字节,汉字3个字节
    4. 在go中,字符的本质是一个整数,直接输出时,是该字符对应的UTF-8编码的码值,码值查询
    5. ASCII表中的字符,可以直接保存到byte
    6. 字符对应码值大于255时,考虑用int类型保存
    7. 字符类型是可以进行运算的,相当于一个整数,因为他都有对应的unicode码
  2. 字符类型本质探讨

    1. 字符型 存储到计算机中,需要价格字符对应的码值(整数)找出来

      存储:字符—>对应码值—>二进制—>存储

      读取:二进制—>码值—>字符—>读取

    2. 字符和码值的对应关系是通过字符编码表决定的(是规定好的)

    3. go语言的编码都同一成utf-8,非常方便,很统一,再也没有编码乱码的困扰


四、布尔类型
  1. 基本介绍
    1. bool类型数据只允许取值 true 或false
    2. bool类型占用1个字节
    3. bool类型适用于逻辑运算,一般用于程序流程控制

五、string类型
  1. 基本介绍

    字符串就是一串固定长度的字符连接起来的字符序列。go中的字符串是由单个字节连接起来的。

  2. 字符串一旦赋值了,就不能修改了。在go中字符串是不可变的。

  3. 字符串的两种表示形式

    1. 双引号,会识别转义字符
    2. 反引号,以字符串的原生形式输出,包括换行和特殊字符,可以实现防止共计、输出源代码等效果
  4. 字符串拼接

var str = "hello" + "world"
str += "haha!"
  1. 当一行字符串太长时,需要用到多行字符串,可以如下处理
str4 := "hello" + "world" + "..." +
"abc" + "bcd" + "cde" + 
"efg"

六、基本数据类型的互相转换
  1. go语言中,不同类型的变量之间赋值时需要显式转换不能自动转换
  2. 基本语法
    1. T(v) , 将 值v 转换为类型T
  3. 注意事项
    1. 转换类型时,需要考虑范围,转换时不报错但是数据会溢出处理
七、基本数据类型与string的转换
package main

import (
	"fmt"
	"strconv"
)

func main(){
	var v1 int = 10
	var v2 float64 = 12.3456
	var b bool = false
	var cchar byte = 'v'
	var n1 int64 = 100
	var n2 float64 = 23.456
	var name bool = true

	// 方式一:fmt转换方法
	// fmt. Sprintf(format string, a ...interface{}) string
	// 实例
	str4 := fmt.Sprintf("%d", v1)
	fmt.Printf("str4 type %T str=%q\n" ,str4, str4)

	str5 := fmt.Sprintf("%f", v2)
	fmt.Printf("str5 type %T str=%q\n" ,str5, str5)

	str6 := fmt.Sprintf("%t", b)
	fmt.Printf("str6 type %T str=%q\n" ,str6, str6)

	str7 := fmt.Sprintf("%c", cchar)
	fmt.Printf("str7 type %T str=%q\n" ,str7, str7)

	// 方式二:strconv包方法
	str := strconv.FormatInt(n1,10)
	fmt.Printf("str type %T str=%q\n",str,str)

	str2 := strconv.FormatFloat(n2, 'f', 10, 64)
	fmt.Printf("str2 type %T str=%q\n",str2,str2)

	str3 := strconv.FormatBool(name)
	fmt.Printf("str3 type %T str=%q\n",str3,str3)

	var nums int64 = 4567
	str8 := strconv.Itoa(int(nums))
	fmt.Printf("str8 typr %T str=%q\n",str8,str8)
  
}
package main

import (
	"fmt"
	"strconv"
)

// string类型转基本数据类型
func main() {
	var str string = "true"
	var b bool
	b, _ = strconv.ParseBool(str)
	fmt.Printf("b type %T b=%v\n",b,b)

	var str2 string = "123456789"
	var n1 int64
	var n2 int
	n1, _ = strconv.ParseInt(str2, 10, 64)
	n2 = int(n1)
	fmt.Printf("n1 type %T n1=%v\n",n1,n1)
	fmt.Printf("n2 type %T n2=%v\n",n2,n2)

	var str3 string = "123.456"
	var f1 float64
	f1, _ = strconv.ParseFloat(str3,64)
	fmt.Printf("n1 type %T f1=%v\n",f1,f1)

}

八、指针
  1. 基本介绍
    1. 基本数据类型,变量存的就是值,也叫值类型
    2. 获取变量地址,用&,比如:var num int ,获取num的地址:&num
    3. 指针类型,指针变量存的是一个地址,这个地址指向的空间存的才是值
    4. 获取这阵类型所指向的值 var ptr *int,使用***ptr**获取ptr所指向的值
package main

import (
	"fmt"
)

func main(){
	var num int = 9
	fmt.Printf("num address= %v\n", &num)
	// 声明指针变量
	var ptr *int
	// 对指针进行赋值
	ptr = &num
	// 通过指针修改指向的值
	*ptr = 10
	fmt.Printf("num = %v\n", num)
}
  1. 指针的使用细节
    1. 值类型,都有对应的指针类型,形式为 *数据类型 如 int 指针类型为 *int
    2. 值类型包括:基本数据类型 int系列float系列boolstring数组结构体 struct

九、值类型和指针类型
  1. 说明
    1. 值类型:基本数据类型 int系列float系列boolstring数组结构体 struct
    2. 引用类型:指针slice切片map管道channelinterface都是引用类型
  2. 值类型和指针类型的特点
    1. 值类型:变量直接存储值,内存通常在中分配
    2. 引用类型:变量存储的是一个地址,这个地址对应的空间才真正存储数据(值),内存通常在上分配,当没有任何变量引用这个地址时,改地址对应的数据空间就变成为一个垃圾,由GC回收
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值