go语言学习-类型

kuoshuang · · 3123 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

Go语言内置以下这些基础类型:

 布尔类型:bool。

 整型:int8、byte、int16、int、uint、uintptr等。

 浮点类型:float32、float64。

 复数类型:complex64、complex128。

 字符串:string。

 字符类型:rune。

 错误类型:error。

此外,Go语言也支持以下这些复合类型:

 指针(pointer)

 数组(array)

 切片(slice)

 字典(map)

 通道(chan)

 结构体(struct)

 接口(interface)

 

1、type关键字

       go语言支持type关键字,可以定义一种类型,这个关键字大体上和C语言的typedef相似,但是有个关键点不同:不是同一个类型

格式如下:

type Int int

上面这个语句,定义一个新的类型Int,这个类型和int具有同样的功能,但是确不是同一个类型,不能直接赋值,如下面代码编译出错:

var tmpInt Int

tmpInt = 3

上面”Int = 3”这个语句会编译出错,因为3默认是int,和Int不是同一类型,可以通过强制转换来实现上面的赋值:

tmpInt = Int(3)

 

2、布尔类型

       可赋值为预定义的true和false。如:

var b1 bool

b1 = true

b2 := (1 == 2)  //b2被推导为bool类型

       注:布尔类型不可以被赋值为其它类型,也不接受自动或者强制类型转换。

 

3、整型

       预定义的类型,各自间是不一样的,比如在32位机器上,int和int32也是不同的数据类型,不能自动进行类型转换,如果需要,可以用强制类型转换解决赋值或逻辑比较等问题。如:

var i1 int32

i2 := 5

i1 = i2 //编译错误,i1和i2分别为int32和int类型,不能自动转换

i1 = int32(i2)  //正确的赋值语句,将i2强制转换成int32生成临时的int32的值,再传给i1(i2的类型仍然是int,不会改变)。

 

逻辑比较也是这个情况,下面的代码编译失败,因为不能比较2个不同的类型的值:

if i1 == i2 {

fmt.Println(“i1== i2”)

}

上面的这个情况也可以通过强制类型转换解决。

       注:各种int类型的变量,都可以和字面常量(literal)比较。

       注:整型数据的运算,包括+-*/%以及移位等运算,与C完全一样。唯一不同的是,C语言中的取反运算~i,但是go语言中是^i

 

4、接口(interface):

       go语言中的接口非常特殊,几乎颠覆了以往面向对象编程语言的思想,专门分析。

 

5、其它几种类型:

       其它几种类型和Python中的比较像,平时用的不多,就不详细分析了。

 

 


有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:kuoshuang

查看原文:go语言学习-类型

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3123 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传