【Go数据类型】

任何一门语言都有对应的基础类型,这些基础类型和现实中的事物一一对应。Go语言也不例外,Go语言数据类型包含基础类型复合类型两大类。

基础数据类型包括:布尔型、整型、浮点型、复数型、字节型(byte)、字符串型、Unicode(rune类型,代表一个utf-8字符)。

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

  1. uint8 类型,或者叫byte型,代表了一个ASCII的字符

  2. rune 类型,代表一个UTF-8字符。当需要处理中文、日文或者其他复合字符时,需要用到rune类型。rune类型实际是一个int32。

  3. Go使用了特殊的rune类型来处理Unicode,让基于Unicode的文本处理更为方便,也可以使用byte型进行默认字符串处理,性能和扩展性都有照顾。

复合数据类型包括:指针、数组、切片、字典、通道、结构体、接口。

整型

在Go语言中,整型分为:

  • 有符号整型:如int、int8、int16、int32和int64

  • 无符号整型:uint、uint8、uint16、uint32和uint64

它们的差别在于,有符号整型表示的是数值可以为负数、零和正数,而无符号整型只能是零和正数。在整型中,如果能确定int的bit就选择比较明确的int类型,因为这样会让程序具备很好地移植性

在Go语言中,还有一种字节类型byte,它等价于uint8类型,可以理解为uint8类型的别名,用于定义一个字节,所以字节byte类型属于整型

浮点数

浮点数就是代表现实中的小数。Go语言提供了两种精度的浮点数,分别是float32 和float64。项目中最常用的是float64,因为它的精度高,浮点计算的结果相比float32误差更小。

【布尔型】

一个布尔型的值只有两种:true和false,它们代表的现实中的“是”或“否”。它们的值经常被用于一些判断中。Go语言中的布尔型使用关键字bool定义。

【字符串】

Go语言中的字符串可以表示任意数据,Go语言中,字符串通过类型string声明。可以通过操作符 + 把字符串拼接起来。也可以通过+=运算符操作

【零值】

零值其实就是一个变量的默认值,在Go语言中,如果我们声明了一个变量,但是没有对其初始化,那么Go语言会自动初始化其值为对应类型的零值。比如数字类的零值是0布尔型的零值是false字符串的零值是""空字符串

变量声明

变量代表可变的数据类型,即在程序执行过程中可能会被一次甚至多次修改。

在Go语言中,通过var关键字声明语句来定义一个变量,定义的时候需要制定这个变量的类型,然后在为它取个名字,并且设置好变量的初始值。var声明一个变量的格式如下:

 var 变量名  类型 = 表达式

Go语言中定义的变量必须使用,否则无法编译通过,这也是Go语言比较好的特性, 防止定义了变量不使用,导致浪费内存的情况。

Go语言具有类型推到功能,所以可以不用刻意的指定变量的类型,而是让Go语言自己推导,比如变量i的声明如下:

 var i = 10
image.gif

此时变量i的类型默认是int类型。也可以一次声明多个变量,把要声明的变量放到一个括号中即可,如下所示:

 var(
     j int = 1 
     k int = 2
 )
 
 // 因为类型推导,上面的多变量声明可以简写为如下方式
 var (
     j = 1
     k = 2
 )
image.gif

不止int类型,后面介绍的float64、bool、string 等基础类型都可以被自动推导,即可以省略定义类型。

变量简短声明

使用var关键字声明变量,代码很繁琐,借助类型推导,Go语言提供了变量的简短声明** :=**, 结构如下:

 变量名 := 表达式
 i := 10
 bf := false
 s1 := "hello"
image.gif

实际项目实战中,如果能为声明的变量初始化,那就选择简短声明方式,这种方式是使用最多的。

指针

在Go语言中,指针对应的是变量在内存中的存储位置,也就是说指针的值就是变量的内存地址。通过&可以获取一个变量的地址,也就是指针。想要获得指针指向的变量的值,通过***** 表达式即可。

 p1 := &i
 fmt.Println(*p1)
image.gif

赋值

最简单的赋值语句就是=

常量

一门编程语言,有变量就有常量,Go语言也不例外。在程序中,常量的值是指在编译期就确定好的,一旦确定好之后就不能再修改,这样就可以防止在运行期被恶意篡改。

常量的定义

常量的定义和变量类似,通过关键字const,因为Go语言可以类型推导,所以在常量声明是可以忽略类型。在Go语言中,只允许布尔型、字符串、数字类型这些基础类型作为常量

iota

iota是一个常量生成器,它可以用来初始化相似规则的常量,避免重复的初始化。iota的初始值是0,它的能力是在每一个有常量声明的行后面+1。

 const (
     one = iota + 1
     two 
     three 
     four
 )
image.gif

字符串和类型转换

字符串是Go语言中常用的类型。

Go语言是强类型的语言,也就是说不同类型的变量是无法相互使用和计算的,也是为了保证Go程序的健壮性,所以不同类型的变量在进行赋值或计算前,需要先进行类型转换。

 i2s := strconv.Itoa(i)   // alphabet  字母
 s2i, err := strconv.Atoi(i)
 fmt.Println(i2s, s2i, err)
image.gif

通过strconv包Itoa函数可以把一个int类型转换为string,Atoi函数可以把string转换为int。同理,对于浮点数、布尔型,Go语言提供了strconv.ParseFloat、strconv.ParseBool、strconv.FormatFloat和strconv.FormatBool进行转换。

对于数字类型之间,可以通过强制转换的方式。采用强制转换的方式转换数字类型,可能会丢失一些精度,比如浮点数转整型时,小数点部分会全部丢弃。

把变量转换为对应的类型后,就可以对相同类型的变量进行各种表达式运算和赋值了。

Strings 包

讲到基础类型,尤其是字符串,不得不提Go SDK为我们提供的一个标准包Strings。它是用于处理字符串的工具包,里面有很多常用的函数,帮助我们对字符串进行操作。比如查找字符串、去除字符串的空格、拆分字符串、判断字符串是否有某个前缀或者后缀等。掌握好它,有利于我们高效编程。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,313评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,369评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,916评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,333评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,425评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,481评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,491评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,268评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,719评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,004评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,179评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,832评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,510评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,153评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,402评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,045评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,071评论 2 352

推荐阅读更多精彩内容

  • 3. Go 数据类型及数据结构 前面的几节中有意无意地创建了很多变量,在变量声明过程中,除非声明过程就初始化,否则...
    PRE_ZHY阅读 656评论 0 2
  • 在 Go 编程语言中,数据类型用于声明函数和变量。数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候...
    木蝴蝶苏木阅读 218评论 0 1
  • 每一门语言都有自己的数据结构,Go 语言也不例外,总共有四大类,基础类型、聚合类型、引用类型和接口类型。本文简单介...
    rayjun阅读 804评论 0 2
  • 1 数据类型 1.1 按类别 布尔型:只可以是常量 true 或者 false。 数字类型:整型和浮点型。 位的运...
    泥人冷风阅读 211评论 0 1
  • 1 .go有两种数据类型,一种是语言内置的数据类型,一种是通过语言提供的自定义数据类型方法自己定义的自定义数据类型...
    skoll阅读 237评论 0 1