Go——基本数据类型

基本数据类型

G0是一种强类型的静态编译语言,类型是高级语言的基础,有了类型,高级语言才能对不同类型抽象出不同的运算,编程者才能在更高的抽象层次上操纵数据,而不用关注具体存储和运算细节。

G0语言内置七类基本数据类型(20个具体子类型)。

  • 布尔类型:bool
  • 整型:byte int int8 int16 int32 int64 uint uint8 uint16 uint32 uint64 uintptr
  • 浮点型:float32 float64
  • 复数:complex64 complex128
  • 字符:rune
  • 字符串:string
  • 错误类型:error
1. 布尔类型

布尔类型关键字是bool,布尔类型只有两个值:true和fasle,true和false是Go内置的两个预声明标识符。

var ok bool
ok true

ok := false

布尔型数据和整型数据不能进行相互转换。

var a bool
a = 1  // error 1  是整型字面量

比较表达式和逻辑表达式的结果都是布尔类型数据。

var b bool =(x > y) && (x > 0)

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

if a <= b {
	print(b)
else
	print(a)
	
for ;true; {	//等价于c语言的while(1)
}

声明的布尔型变量如不指定初始化值,则默认为false。

var b bool /b is false
2. 整型

Go语言内置了12种整数类型,分别是byte、int、int8、int16、init32、int64、uint、uint8、uint16、uint32、uint64、uintptr。其中byte是uint8的别名,不同类型的整型必须进行强制类型转换。

var a int 1
var b int32 = 2
b = a //error

整型支持算术运算和位操作,算术表达式和位操作表达式的结果还是整型。

var a int = (1+2)*3
var b int = 1000>>2
3. 浮点型

浮点型用于标识包含小数点的数据,Go语言内置两种浮点数类型,分别是float32和float64.

浮点数有两个注意事项:

  1. 浮点数字面量被自动推断为float64类型
var b := 10.00
  1. 计算机河南进行浮点数的精确表示和存储,因此两个浮点数之间不应该使用==或!=进行比较操作,高精度科学计算应该使用math标准库。
4. 复数类型

Go语言内置的复数类型有两种,分别是complex64和complex1.28,复数在计算机里面使用两个浮点数表示,一个表示实部,一个表示虚部。complex64是由两个float3.2构成的,complex122是由两个f1oat64构成的。复数的字面量表示和数学表示法一样。

var value1 complex64 = 3.1 + 5i
value2 := 3.1 + 6i

//go有三个内置函数处理复数

var v = complex(2.1, 3) //构造一个复数
a := real(v)            //返回复数实部
b := imag(v)			//返回复数虚部
5. 字符串

Go语言将字符串作为一种原生的基本类型,字符串的初始化可以使用字符串字面量。例如:

var a = "hello,world"
  1. 字符串是常量,可以通过类似数组的索引访问其字节单元,但是不能修改某个字节的值。例如:
var a = "hello,world"
b := a[0]
a[1] = 'a' //error
  1. 字符串转换为切片[]byte(s)要慎用,尤其是当数据量较大时(每转换一次都需要复制内容)。例如:
aa := "hello,world"
bb := []byte(aa)
  1. 字符串末尾不包含NULL字符,这一点和C/C++不一样。
  2. 字符串类型底层实现是一个二元的数据结构,一个是指针指向字节数组的起点,另一个是长度。例如:
//runtime/string.go

209 type stringStruct struct {
210		str unsafe.Pointer 	//指向底层字节数组的指针
211	len int		//字节数组长度
212 }
  1. 基于字符串创建的切片和原字符串指向相同的底层字符数组,一样不能修改,对字符串的切片操作返回的子串仍然是string,而非slice。例如:
txt := "hello,world"
x := txt[0:4]
y := txt[1:]
z := txt[:4]
fmt.Println(x)//hell
fmt.Println(y)//ello,world
fmt.Println(z)//hell
  1. 字符串和切片的转换:字符串可以转换为字节数组,也可以转换为Unicode的字数组。例如:
a := "hello,世界!"
b := []byte(a)
c := []rune(a)
  1. 字符串的运算。例如:
t1 := "hello"
t2 := "world"

t3 := t1 + t2	//字符串的拼接
len(a)			//内置的len函数获取字符串长度

t4 := "hello,世界!"

for i := 0; i < len(t4); i++ {//遍历字节数组
	fmt.Println(t4[i])
}

for i, v := range t4 {//遍历rune数组
	fmt.Println(i, v)
}
6. rune类型

Go内置两种字符类型:一种是byte的字节类类型(byte是uint的别名),另一种是表示Unicode编码的字符rune。rune在Go内部是int32类型的别名,占用4个字节。Go语言默认的字符编码就是UTF-8类型的,如果需要特殊的编码转换,则使用Unicode/UTF-8标准包。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值