go 数据类型和类型转换

numeric types

数字类型包括整型和浮点型,内置的和系统无关的数字类型包括

  • uint8:8位无符号整型(0 to 255)
  • uint16:16位无符号整型(0 to 65535)
  • uint32:32位无符号整型(0 to 4294967295)
  • uint64:64位无符号整型(0 to 18446744073709551615)
  • int8:8位有符号整型(-128 to 127)
  • int16:16位有符号整型(-32768 to 32767)
  • int32:32位有符号整型(-2147483648 to 2147483647)
  • int64:64位有符号整型(-9223372036854775808 to 9223372036854775807)
  • float32:32位浮点类型
  • float64:64位浮点类型
  • complex32:由float32实部+虚部
  • complex64:由float64实部+虚部
  • byte:uint8的别名
  • rune:nt32的别名

和系统有关的类型有:

  • uint:32位操作系统上就是uint32,64位操作系统上就是uint64
  • int:32位操作系统上就是int32,64位操作系统上就是int64

byte和rune类型

组成每个字符串的元素叫做“字符”,可以通过遍历或者单个获取字符串元素获得字符:

var a := '中'
var b := 'x'

Go 语言的字符有以下两种:

  1. uint8类型,或者叫 byte 型,代表了ASCII码的一个字符。
  2. rune类型,代表一个 UTF-8字符。

当需要处理中文、日文或者其他复合字符时,则需要用到rune类型。rune类型实际是一个int32。

字符串底层是一个byte数组,所以可以和[]byte类型相互转换。字符串是不能修改的 字符串是由byte字节组成,所以字符串的长度是byte字节的长度。 rune类型用来表示utf8字符,一个rune字符由一个或多个byte组成。

修改字符串:
要修改字符串,需要先将其转换成[]rune或[]byte,完成后再转换为string。无论哪种转换,都会重新分配内存,并复制字节数组。

func changeString() {
	s1 := "big"
	// 强制类型转换
	byteS1 := []byte(s1)
	byteS1[0] = 'p'
	fmt.Println(string(byteS1))

	s2 := "白萝卜"
	runeS2 := []rune(s2)
	runeS2[0] = '红'
	fmt.Println(string(runeS2))
}

 

类型转换

一、显式类型转换

这种类型转换主要在切换同一基础类型不同精度范围时使用,比如我们要将 int 型转为 int64 类型时。

func sqrtDemo() {
	var a, b = 3, 4
	var c int
	// math.Sqrt()接收的参数是float64类型,需要强制转换
	c = int(math.Sqrt(float64(a*a + b*b)))
	fmt.Println(c)
}

该类型转换要注意的是:类型被转换后会损失精度

二、断言(assert)

断言,顾名思义就是果断的去猜测一个未知的事物。在 go 语言中,interface{} 就是这个神秘的未知类型,其断言操作就是用来判断 interface{} 的类型

var foo interface{} = 22
f, ok := foo.(int)
if !ok {
	fmt.Println("Guess wrong ...")
}
fmt.Printf("The type is : %T", f)   

三、取指针和解指针

通过符号 & 、* 可以实现指针与其所对应值的切换

func Test(t *testing.T) {
	p := Person{
		Name: "bar",
		Age:  7,
	}

	per := &p

	t.Logf("The type of per is : %T \n", per)
	t.Logf("After operation , type is : %T", *per)
}

 & 可以轻松的将某类型 T 转化为 T 的指针类型(*T),* 可轻松实现解指针,将某一类型的指针转化为该指针指向的值的类型

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值