golang 的数据类型

在本节之后,我们将正式学习 golang 语言基础。本节,我们将介绍 “golang 数据类型”,如果你还没阅读过之前的文章内容,可以打开以下链接进行阅读

  1. 怎样搭建golang开发环境 - 简书 (jianshu.com)
  2. golang开发中包的使用 - 简书 (jianshu.com)

一、数据类型的分类

数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要用大数据的时候才需要申请大内存,就可以充分利用内存。


1. 数据类别

golang 数据类型 按数据类别有以下几种数据类型:

  • 布尔型: 布尔型的值只可以是常量 true 或者 false。一个简单的例子:var b bool = true。
  • 数字类型: 整型 int 和浮点型 float32、float64,Go 语言支持整型和浮点型数字,并且支持复数,其中位的运算采用补码。
  • 字符串类型: 字符串就是一串固定长度的字符连接起来的字符序列。Go 的字符串是由单个字节连接起来的。Go 语言的字符串的字节使用 UTF-8 编码标识 Unicode 文本。
  • 派生类型: 包括:(a) 指针类型(Pointer)(b) 数组类型(c) 结构化类型(struct)(d) Channel 类型(e) 函数类型(f) 切片类型(g) 接口类型(interface)(h) Map 类型。

2.存储方式

golang 数据类型按存储方式 有两大类数据类型:

  1. 值类型,也叫基本数据类型:数值类型、bool、string、数组、struct 结构体
  2. 引用数据类型:指针、slice 切片、管道 chan、map、以及 interface

值类型:变量直接存储值。值类型的数据存储在栈内存空间中,栈在函数调用完内存会被释放。
引用类型:变量存储的是一个地址,这个地址存储最终的值。引用数据类型的数据存储在堆内存空间中,通过 GC 回收。

二、常用数据类型

1. bool 类型

golang 中以bool关键字声明布尔类型数据,布尔型的值只可以是true 或者 false。代表条件成立(真)或条件不成立(假),以下一个简单的例子:

var b bool = true
  • 布尔类型变量的默认值为 false

  • golang 中不允许将整型强制转换为布尔型

  • 布尔型无法参与数值运算,也无法与其他类型进行转换

2. 数字类型

(1)整型

整型主要有 int 、int16、int32、int64、uint、uint8、uint16、uint32、uint64。如下表格

  • uint8: 无符号 8 位整型 (0 到 255)
  • uint16: 无符号 16 位整型 (0 到 65535)
  • uint32: 无符号 32 位整型 (0 到 4294967295)
  • uint64: 无符号 64 位整型 (0 到 18446744073709551615)
  • int8: 有符号 8 位整型 (-128 到 127)
  • int16: 有符号 16 位整型 (-32768 到 32767)
  • int32: 有符号 32 位整型 (-2147483648 到 2147483647)
  • int64: 有符号 64 位整型 (-9223372036854775808 到 9223372036854775807)

Go 语言的 int/uint 类型,是不可移植的类型,其长度根据宿主机的机器字长决定。int, uintuintptr 在 32 位系统上通常为 32 位宽,在 64 位系统上则为 64 位宽。

(2)浮点型

浮点数类型主要有 float32、float64、complex64、complex128

  • float32: IEEE-754 32 位浮点型数
  • float64: IEEE-754 64 位浮点型数
  • complex64: 32 位实数和虚数
  • complex128: 64 位实数和虚数

(3)其他数字类型

以下列出了其他更多的数字类型:

  • byte :类似 uint8,代表了 ASCII 码的一个字符,也可以说是 ASCII 字符类型
  • rune : 类似 int32,表示一个 Unicode 码点
  • uintptr: 无符号整型,用于存放一个指针

UTF-8 是 Unicode 的实现方式之一。UTF-8 最大的一个特点,就是它是一种变长的编码方式。它可以使用 1~4 个字节表示一个符号,根据不同的符号而变化字节长度。

(4)类型强转

golang 中只有强制类型转换,没有隐式类型转换。该语法只能在两个类型之间支持相互转换的时候使用。

强制类型转换的基本语法为:type(variable),可转换的数据包括变量、表达式、函数返回值等。如下代码

var a int = 8
// 将int类型改为int32类型
var b int32 = int32(a)

3. 字符串类型

字符串定义:var str string
字符串有两种表示方式:双引号("");反引号,也叫原意符号(``),如下代码

package main

import "fmt"

func main() {
    var str1 = "hello world"
    var str2 = `
    窗前明月光
    疑是地上霜
    举头望明月
    低头思故乡
    `

    fmt.Println("str1 = ", str1)
    fmt.Println("str2 = ", str2)
}

运行结果如下

pan@pandeMBP src % go run learn/test4
str1 =  hello world
str2 =
        窗前明月光
        疑是地上霜
        举头望明月
        低头思故乡

pan@pandeMBP src %

三、总结

本节,我们介绍了 golang 数据类型的分类,以及介绍了常用的几种数据类型。在后面的章节中,我们将更深入地学习和使用各种数据类型。

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

推荐阅读更多精彩内容

  • 总目录:https://www.jianshu.com/p/e406a9bc93a9 Golang - 子目录:h...
    寒暄_HX阅读 271评论 0 0
  • 分类 Go语言中的数据类型分为:基本数据类型和复合数据类型 基本数据类型 整型、浮点型、布尔型、字符串 复合数据类...
    learninginto阅读 309评论 0 5
  • Go 语言数据类型包含基础类型和复合类型两大类。基础数据类型包括:布尔型、整型、浮点型、复数型、字符型、字符串型、...
    野尘lxw阅读 10,049评论 2 5
  • 基本数据类型 整型: 1.按长度:int8(-128-127)、int16、int32、int64 2.无符号整型...
    lghCode阅读 297评论 0 0
  • A 基本数据类型 1 布尔类型 bool 1)Go 对于值之间的比较有非常严格的限制,只有两个类型相同的值才可以进...
    风再起时ME阅读 559评论 0 1