50

Go 语言学习笔记 3:基础类型

 5 years ago
source link: http://blog.einverne.info/post/2018/10/go-lang-basic-data-types.html?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

和大多数强类型语言一样,Go 也有自己基本的类型系统。Go 语言的类型大致可以分为四大类:

  • basic types
  • aggregate types
  • reference types
  • interface types

基础类型(basic types)包括 numbers , strings , booleans 。 聚合类型(aggregate types)包括 arrays , structs 。引用类型(reference types) 包括不同组,包括 pointers , slices , maps , functions , channels ,他们都是程序变量或者状态的引用。接口类型 (interface types) 是特殊的一个类型,会在后面单独介绍。

Integers

Go 数值类型包括整型,浮点数和复数。对于整型

rune
byte
uintptr

注意 intint32 不是同一类型。

书中这边还介绍了运算符优先级和类型转换,进制转换的具体问题,详情可以参考。

Floating-Point 浮点类型

Go 提供了两种精度的浮点数 float32float64 ,常量 math.MaxFloat32 表示 float32 能表示的最大数, math.MaxFloat64 同理。

float32 类型的浮点数可以提供大约 6 个十进制数的精度,而 float64 则可以提供约 15 个十进制数的精度;通常应该优先使用 float64 类型。

Complex Numbers 复数

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

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

Booleans

布尔值只有两个值 true or false

Strings

字符串是不可变的字节序列,可以包含任何数据,通常文本会解释为 UTF8 编码 Unicode 。len 函数返回的是字节数目。

标准库中有四个包对字符串处理尤为重要:bytes、strings、strconv 和 unicode 包。strings 包提供了许多如字符串的查询、替换、比较、截断、拆分和合并等功能。

bytes 包也提供了很多类似功能的函数,但是针对和字符串有着相同结构的 []byte 类型。因为字符串是只读的,因此逐步构建字符串会导致很多分配和复制。在这种情况下,使用 bytes.Buffer 类型将会更有效,稍后我们将展示。

strconv 包提供了布尔型、整型数、浮点数和对应字符串的相互转换,还提供了双引号转义相关的转换。

unicode 包提供了 IsDigit、IsLetter、IsUpper 和 IsLower 等类似功能,它们用于给字符分类。每个函数有一个单一的 rune 类型的参数,然后返回一个布尔值。而像 ToUpper 和 ToLower 之类的转换函数将用于 rune 字符的大小写转换。所有的这些函数都是遵循 Unicode 标准定义的字母、数字等分类规范。strings 包也有类似的函数,它们是 ToUpper 和 ToLower,将原始字符串的每个字符都做相应的转换,然后返回新的字符串。

Constants

常量表达式在编译器计算,每种常量的潜在类型都是基础类型。

常量声明语句定义了常量的名字,常量值不能修改。

const pi = 3.1415

或者

const (
    e = 2.71
    pi = 3.14
)

iota 常量生成器

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

type Weekday int

const (
    Sunday Weekday = iota
    Monday
    Tuesday
    Wednesday
    Thursday
    Friday
    Saturday
)

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK