专栏首页aoho求索Go 语言入门系列:原生数据类型

Go 语言入门系列:原生数据类型

前面一篇文章介绍了 Go 基本语法,变量的声明与初始化。本文将会具体介绍 Go 原生数据类型。Go 语言中具备丰富的数据类型,基本类型有整型、浮点数、布尔型、字符串型等,除此之外,还有切片、结构体、指针、通道、map、数组等其他类型。

原生数据类型

本文中我们主要介绍 Golang 的基础类型。整型中主要有两大类,分别是:

  • 按照整型的长度划分:int8、int16、int32、int64
  • 按照有无符号划分:uint8、uint16、uint32、uint64

除此之外,Golang 中还提供了平台自匹配长度的 intuint 类型。整型类型之间可以相互转换,高长度类型向低长度类型转换会发生长度截取,仅会保留高长度类型的低位值,造成转换错误,实际使用需要注意。如下例子所示:

var e uint16 = math.MaxUint8 + 1
fmt.Printf("e valud(unit16) is %v\n", e)
var d  = uint8(e)
fmt.Printf("d valud(unit8) is %v\n", d)

输出如下所示:

e valud(unit16) is 256
d valud(unit8) is 0

因为 256 在 uint16 底层的存储方式为 00000001 00000000,转换为 uint8 之后,只截取后 8 位,导致 d 变为 00000000,即 0。

浮点型主要有两种:

  • float32,最大范围位为 3.40282346638528859811704183484516925440e+38
  • float64,最大范围为 1.797693134862315708145274237317043567981e+308

打印浮点型精度与 C 语言一致,可以配合 %f 使用,如下例子所示:

fmt.Printf("%f\n", math.E)  //按照默认宽度和精度输出
fmt.Printf("%.2f\n", math.E) //按照默认宽度和 2 位精度输出

float32 和 float64 之间也可以进行类型转换,仍然需要注意转换期间精度的损失。

Golang 的布尔型即我们常见的 truefasle。与 C 语言不同,Golang 的布尔型不可与整型进行强转,也无法参与数值运算。

在 Golang 中,字符串型以原生数据类型出现,地位等价于其他的基本类型(整型、布尔型等),它基于 UTF-8 编码实现,所以在遍历字符串型时,我们需要区分 byterune

f := "Golang 编程"
fmt.Printf("byte len of f is %v\n", len(f))
fmt.Printf("rune len of f is %v\n", utf8.RuneCountInString(f))

上述例子的输出为:

byte len of f is 12
rune len of f is 8

第一种方式,统计的是 byte 的长度,它的类型为 uint8,代表了一个 ASCII 字符。第二种方式统计的是 rune 类型,它的类型为 int32,代表了一个 UTF-8 字符,它可以类比为 Java 中的 char 类型。由于中文字符在 UTF-8 中占用了 3 个字节,所以使用 len 方法时获得的中文字符的长度为 6 个 byte,而 utf8.RuneCountInString() 方法统计的是字符串的 Unicode 字符数量。

在遍历字符串的每个字节时,我们可以采用以下手段:

f := "Golang 编程"
//按字节遍历字符串
for _, g := range []byte(f){
 fmt.Printf("%c", g)
}

输出的结果为:

Golang编ç¨

在进行字节遍历时候,因为中文字符的 Unicode 字符会被截断,导致中文字符输出乱码。为了保证每个字符正常输出,可以通过遍历 rune 的方式遍历字符串中的每个字符,如下所示:

//按字符遍历字符串
for _, h := range f{
 fmt.Printf("%c", h)
}

此时输出的结果就是我们期望的 Golang 编程 字符串。

小结

本文主要介绍了 Go 语言的几种常用的数据类型,对于学习一门语言来说,数据类型是非常基于且必须要会的内容。特别是常用的整型、浮点数、布尔型、字符串型等。下面的文章,我们将介绍指针在 go 语言中的使用。

本文分享自微信公众号 - aoho求索(aohoBlog),作者:cangwu

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-06-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Go 语言数据类型

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

    超蛋lhy
  • Go 语言数据类型

    在 Go 编程语言中,数据类型用于声明函数和变量。 数据类型的出现是为了把数据分成所需内存大小不同的数据,编程的时候需要用大数据的时候才需要申请大内存,就可以充...

    李海彬
  • Go 语言入门系列:Go 语言:环境安装

    「最近将会更新 Go 语言入门的系列文章,非常基础。适合小白入门或者零基础的同学,已有相关 Go 基础的同学可以略过。」

    aoho求索
  • R语言入门之数据类型

    (1)矩阵本质上是一个二维数据结构,要求矩阵的每一列长度相同,同时元素类型要求一致,比如都是数值型元素。

    生信与临床
  • Go 语言入门系列:数组的使用

    前面的文章主要介绍了 Go 基于语法中的分支和循环控制结构。其中涉及到的 If 、Switch 和 for 等关键字,是我们日常编码所常用的。当我们在程序中操作...

    aoho求索
  • 【Go】Go语言基本数据类型

    Regan Yue
  • Go 语言基础入门教程 —— 数据类型篇:浮点型与复数类型

    浮点型也叫浮点数,用于表示包含小数点的数据,比如 3.14、1.00 都是浮点型数据。

    学院君
  • Go语言入门系列(六)之再探函数

    在Go语言入门系列(二)之基础语法总结这篇文章中已经介绍过了Go语言的函数的基本使用,包括声明、参数、返回值。本文再详细介绍一下函数的其他使用。

    二十二画程序员
  • go语言学习-数据类型

    go语言有13种整形,其中有2种只是名字不同,实质是一样的,所以,实质上go语言有11种整形。如下:

    solate
  • Go 语言入门系列:列表与字典

    前面的文章主要介绍了 Go 容器的数组和切片的基本概念以及使用。切片是 Go 中提供了一种灵活,功能强悍的内置类型("动态数组")。与数组相比切片的长度是不固定...

    aoho求索
  • Go 语言基础入门教程 —— 数据类型篇:概述和布尔类型

    相较于 PHP,多出了字符类型(单个字符)、错误类型和复数类型,PHP 通过系统级配置函数 error_reporting 定义应用的错误报告级别,不区分单独的...

    学院君
  • Go 语言入门系列:第一个 Go 程序

    上一篇文章,我们介绍了 Go 语言的一些特性以及环境的安装。具体可以参见:https://juejin.cn/user/3491704659786455

    aoho求索
  • 【Go语言入门系列】(八)Go语言是不是面向对象语言?

    在【Go语言入门系列】(七)如何使用Go的方法?这一文中已经介绍了方法的概念,但这个方法实际上并不是面向对象中的方法。方法实际上是用户给其定义的类型的增加的新行...

    二十二画程序员
  • Go 语言基础入门教程 —— 数据类型篇:基本数据类型之间的转化

    通过前面几篇教程,我们已经陆续介绍完了 Go 语言中的基本数据类型,分别是布尔类型、整型、浮点型、复数类型、字符串和字符类型,和 PHP 一样,Go 语言也支持...

    学院君
  • Go 语言基础入门教程 —— 数据类型篇:字符串和字符类型

    在 Go 语言中,字符串是一种基本类型,默认是通过 UTF-8 编码的字符序列,当字符为 ASCII 码时则占用 1 个字节,其它字符根据需要占用 2-4 个字...

    学院君
  • Go 语言基础入门教程 —— 数据类型篇:整型和运算符

    在 PHP 中,默认只有 int 这一种带符号的整数类型,其长度与平台相关,在 32 位平台下其最大值为 20 亿左右(等同于 Go 语言中的 int32),6...

    学院君
  • C语言入门系列之2.数据类型、运算符和表达式

    对于基本数据类型量,按其取值是否可改变又分为常量和变量两种。 在程序执行过程中,其值不发生改变的量称为常量,其值可变的量称为变量。 它们可与数据类型结合起来...

    cutercorley
  • 第四节 Go语言数据类型

    干货来了!!!为了让更多的小伙伴喜欢Golang、加入Golang之中来,Golang语言社区发起人彬哥联合业界大牛共同推出了Go语言基础、进阶、提高课程,目前...

    李海彬
  • Go语言的复合数据类型

    Go语言的复合数据类型是基础数据类型的组合,主要包括四个数组,切片(slice),map和结构体。 数组和结构体的大小是固定大小的,数组的元素类型是固定的,结...

    李海彬

扫码关注云+社区

领取腾讯云代金券