当前位置: 首页 > article >正文

【Go语言圣经】第三节:基础数据类型

三. 基础数据类型

Golang 将数据类型分为四类,分别是基础类型、复合类型、引用类型和接口类型。本章介绍基础类型,包括数字、字符串和布尔类型。复合数据类型包括数组和结构体、引用类型包括指针、切片、字典、函数和通道。

3.1 整型

Golang 同时提供了有符号和无符号类型的整数运算。有 int8、int16、int32 和 int64 四种截然不同大小的有符号整数类型,与此对应的是 uint8、uint16、uint32、uint64 四种无符号类型。

Unicode 字符 rune 类型是 int32 等价的类型。byte 是 uint8 类型的等价类型。

还有一种无符号整数类型 uintptr,它没有指定具体的 bit 大小,但是足以容纳指针。uintptr 只有在底层编程才被需要。

3.2 浮点数

Golang 提供了两种精度的浮点数,float32 和 float64。

3.3 复数

Golang 提供了两种精度的复数类型:complex64 和 complex128,分别对应 float32 和 float64 两种浮点数精度。内置的 complex 函数用于构建复数,内建的 real 和 imag 函数分别返回复数的实部和虚部:

var x complex128 = complex(1, 2)	// 1 + 2i
var y complex128 = complex(3, 4)	// 3 + 4i
fmt.Println(x * y)
fmt.Println(real(x * y))			// "-5"
fmt.Println(real(x * y))			// "10"

如果一个浮点数面值或一个十进制整数面值后跟着 i,则它将构成复数的虚部,其实部为零。同样,可以用自然的方式书写复数:

x := 1 + 2i
y := 3 + 4i

复数可以比较,当然是实部和虚部都相等的时候复数才相等。

3.4 布尔型

与常见语言的规则相同,此处不再赘述。

3.5 字符串

一个字符串是一个不可改变的字节序列。字符串可以包含任意的数据,包括 byte 值 0,但是通常是用来包含人类可读的文本。文本字符串通常被解释为采用 UTF8 编码的 Unicode 码点(rune)序列。

内置的 len 函数可以返回一个字符串中的字节数目(不如 rune 字符数目):

s := "Hello, World"
fmt.Println(len(s))	// 12

可以使用切片生成新的字符串:

fmt.Println(s[0:5])	// "hello"

可以使用+将两个字符串拼接。可以使用==<进行比较,比较规则是逐个字节完成比较。

因为字符串是不可修改的,因此尝试修改字符串内部数据的操作也是被禁止的:

s[0] = 'L'	// compile error: cannot assign to s[0]

3.5.1 字符串面值

将一系列字节包含在双引号内几位字符串面值:

"Hello, World"

3.5.2 Unicode

3.5.3 UTF-8

3.5.4 字符串和 Byte 切片

标准库中有四个包对字符串处理尤为重要:bytes、strings、strconv 和 unicode 包。

3.5.5 字符串和数字的转换

strconv 包提供了字符串和数值之间转换的功能:

将一个整数转为字符串,一种方法是用 fmt.Sprintf 返回一个格式化的字符串,另一个方法是用 strconv.Itoa

x := 123
y := fmt.Sprintf("%d", x)
fmt.Println(y, strconv.Itoa(x))	// "123 123"

3.6 常量

常量表达式的值在编译器计算,而不是运行期。每个常量的潜在类型都是基础类型:boolean、string 或 数字。

一个常量的定义方法如下:

const pi = 3.14159

和变量的声明类似,可以同时声明多个常量:

const (
	e = 1.2345
	p = 6.7891
)

const (
	a = 1
	b
	c = 2
	d
)
fmt.Printf("%d %d %d %d", a, b, c, d)	// 1, 1, 2, 2

所有常量的运算都会在编译器完成,减少了运行时的工作,也方便其他编译优化。

3.6.1 iota 常量生成器

常量声明可以使用 iota 常量生成器进行初始化,它用于生成一组以相似规则初始化的常量。在一个 const 声明语句中,在第一个声明的常量的所在行,iota 将会被置为 0,然后每一个有常量声明的行加一:

type Weekday int
const (
	Sunday Weekday = iota	// 0
    Monday					// 1
    Tuesday					// 2 ... ... ...
    Wednesday
    Thursday
    Friday
    Saturday
)

一个更复杂的例子如下:

const (
    _ = 1 << (10 * iota)
    KiB // 1024
    MiB // 1048576
    GiB // 1073741824
    TiB // 1099511627776             (exceeds 1 << 32)
    PiB // 1125899906842624
    EiB // 1152921504606846976
    ZiB // 1180591620717411303424    (exceeds 1 << 64)
    YiB // 1208925819614629174706176
)

3.6.2 无类型常量

有六种未明确类型的常量类型,分别是无类型的布尔型、无类型的整数、无类型的字符、无类型的浮点数、无类型的复数、无类型的字符串。

例如 math.Pi是无类型的浮点数常量,可以直接用于任意需要浮点数或复数的地方:

var x float32 = math.Pi
var y float64 = math.Pi
var z complex128 = math.Pi


http://www.kler.cn/a/513959.html

相关文章:

  • WPF1-从最简单的xaml开始
  • 解决后端接口返回Long类型参数导致的精度丢失问题
  • Cursor的详细使用指南
  • 【附源码】108个Python实战项目,练完能力飙升
  • R语言的图形用户界面
  • CPU狂飙900%如何分析?怎么定位?怎么溯源处理
  • No. 34 笔记 | Python知识架构与数据类型相关内容 | 实操
  • postgresql清理wal日志
  • k8s的CICD实施项目
  • 基于微信小程序的民宿预订管理系统
  • map和set的使用(一)详解
  • K8s UI工具 Kuboard 安装
  • Mysql视图(学习自用)
  • 记一次 .NET某数字化协同管理系统 内存暴涨分析
  • Day 14 卡玛笔记
  • Java设计模式 十一 外观模式 (Facade Pattern)
  • django使用踩坑经历
  • springboot基于前后端分离的摄影知识网站
  • 新书速览|算法竞赛入门笔记
  • 吴恩达深度学习——建立逻辑回归分类器识别猫
  • html简单项目案例
  • 私有IP、VLAN和VPC,分别适合哪些场景你知道吗?
  • R语言的图形用户界面
  • Android 13 灭屏音乐播放问题解决与优化建议
  • 【MySQL】超详细MySQL常用日期格式转换函数、字符串函数、聚合函数(最新版)
  • 读取配置文件方式