Golang(六)[基础数据类型]

Golang-基础数据类型

  • 1.布尔类型(bool)
  • 2.整型
    • 1.int
    • 2.uint
    • 3.int8
    • 4.uint8
    • 5.int16
    • 6.uint16
    • 7.int32
    • 8.uint32
    • 9.int64
    • 10.uint64
    • 11.rune
    • 12.uintptr
  • 3.浮点型
    • 1.float32
    • 2.float64
  • 3.复数
    • 1.complex64
    • 2.complex128
  • 4.字节(byte)
  • 5.字符串(string)
  • 6.常量
      • 1.iota常量生成器
      • 2.无类型常量
  • 备注

Golang 基本数据类型参考源码:

src/builtin/builtin.go

1.布尔类型(bool)

// bool is the set of boolean values, true and false.
type bool bool

// true and false are the two untyped boolean values.
const (
	true  = 0 == 0 // Untyped bool.
	false = 0 != 0 // Untyped bool.
)
字节大小 取值范围 默认值
1个字节(1Byte) true/false false

2.整型

1.int

// int is a signed integer type that is at least 32 bits in size. It is a
// distinct type, however, and not an alias for, say, int32.
type int int
符号位 系统架构 字节大小 取值范围 默认值
32位 4个字节(4Byte) -2^(32-1) 到 2^(32-1)-1 0
64位 8个字节(8Byte) -2^(64-1) 到 2^(64-1)-1

2.uint

// uint is an unsigned integer type that is at least 32 bits in size. It is a
// distinct type, however, and not an alias for, say, uint32.
type uint uint
符号位 系统架构 字节大小 取值范围 默认值
32位 4个字节(4Byte) 0到 2^32-1 0
64位 8个字节(8Byte) 0到 2^64-1

3.int8

// int8 is the set of all signed 8-bit integers.
// Range: -128 through 127.
type int8 int8
符号位 字节大小 取值范围 默认值
1个字节(1Byte) -2^(8-1) 到 2^(8-1)-1 0

4.uint8

// byte is an alias for uint8 and is equivalent to uint8 in all ways. It is
// used, by convention, to distinguish byte values from 8-bit unsigned
// integer values.
type byte = uint8

其别名byte为一个字节类型
Golang(六)[基础数据类型]_第1张图片

符号位 字节大小 取值范围 默认值
1个字节(1Byte) 0到 2^8-1 0

5.int16

// int16 is the set of all signed 16-bit integers.
// Range: -32768 through 32767.
type int16 int16
符号位 字节大小 取值范围 默认值
2个字节(1Byte) -2^(16-1) 到 2^(16-1)-1 0

6.uint16

// uint16 is the set of all unsigned 16-bit integers.
// Range: 0 through 65535.
type uint16 uint16
符号位 字节大小 取值范围 默认值
2个字节(1Byte) 0到 2^16 -1 0

7.int32

// int32 is the set of all signed 32-bit integers.
// Range: -2147483648 through 2147483647.
type int32 int32

其别名byte为一个字节类型
Golang(六)[基础数据类型]_第2张图片

符号位 字节大小 取值范围 默认值
4个字节(1Byte) -2^(32-1) 到 2^(32-1)-1 0

8.uint32

// uint32 is the set of all unsigned 32-bit integers.
// Range: 0 through 4294967295.
type uint32 uint32
符号位 字节大小 取值范围 默认值
4个字节(1Byte) 0 到 2^32-1 0

9.int64

// int64 is the set of all signed 64-bit integers.
// Range: -9223372036854775808 through 9223372036854775807.
type int64 int64
符号位 字节大小 取值范围 默认值
8个字节(1Byte) -2^(64-1) 到 2^(64-1)-1 0

10.uint64

// uint64 is the set of all unsigned 64-bit integers.
// Range: 0 through 18446744073709551615.
type uint64 uint64
符号位 字节大小 取值范围 默认值
8个字节(1Byte) 0到 2^64-1 0

11.rune

// rune is an alias for int32 and is equivalent to int32 in all ways. It is
// used, by convention, to distinguish character values from integer values.
type rune = int32
符号位 字节大小 取值范围 默认值
4个字节(1Byte) -2^(32-1) 到 2^(32-1)-1 0

12.uintptr

// uintptr is an integer type that is large enough to hold the bit pattern of
// any pointer.
type uintptr uintptr

无符号的整数类型uintptr,没有指定具体的bit大小但是足以容纳指针。uintptr类型只有在底层编程时才需要,特别是Go语言和C语言函数库或操作系统接口相交互的地方。

3.浮点型

1.float32

// float32 is the set of all IEEE-754 32-bit floating-point numbers.
type float32 float32
符号位 字节大小 默认值
4个字节(4Byte) 0

2.float64

// float64 is the set of all IEEE-754 64-bit floating-point numbers.
type float64 float64
符号位 字节大小 默认值
8个字节(1Byte) 0

3.复数

1.complex64

// complex64 is the set of all complex numbers with float32 real and
// imaginary parts.
type complex64 complex64
默认值
(0+0i)

2.complex128

// complex128 is the set of all complex numbers with float64 real and
// imaginary parts.
type complex128 complex128
默认值
(0+0i)

4.字节(byte)

// byte is an alias for uint8 and is equivalent to uint8 in all ways. It is
// used, by convention, to distinguish byte values from 8-bit unsigned
// integer values.
type byte = uint8
符号位 字节大小 取值范围 默认值
1个字节(1Byte) 0 到 2^8-1 0

5.字符串(string)

// string is the set of all strings of 8-bit bytes, conventionally but not
// necessarily representing UTF-8-encoded text. A string may be empty, but
// not nil. Values of string type are immutable.
type string string
默认值 注意
空字符串 字符串类型的值是不可变的

6.常量

1.在程序执行过程中,其值不可改变的量
2.常量表达式的值在编译期计算,而不是在运行期。所有常量的运算都可以在编译期完成,可以减少运行时的工作,方便其他编译优化,因为常量的值是在编译期就确定的,因此常量可以是构成类型的一部分【譬如数组的长度】
3.每种常量的潜在类型都是基础类型:布尔、字符串或数字。
4.一个常量的声明语句定义了常量的名字,和变量的声明语法类似,常量的值不可修改,这样可以防止在运行期被意外或恶意的修改。
5.当操作数是常量时,一些运行时的错误也可以在编译时被发现,例如整数除零、字符串索引越界、任何导致无效浮点数的操作等。
6.常量间的所有算术运算、逻辑运算和比较运算的结果也是常量,对常量的类型转换操作或以下函数调用都是返回常量结果:len、cap、real、imag、complex和unsafe.Sizeof.
7.一个常量的声明也可以包含一个类型和一个值,但是如果没有显式指明类型,那么将从右边的表达式推断类型。

定义格式

1.const 常量名称 数据类型 =2.const 常量名称 =3.字面常量:“字符串”、'a'33.14

查看常量的类型

fmt.Printf("%T",常量名)

常量的定义关键字为const

1.iota常量生成器

常量声明可以使用iota常量生成器初始化,它用于生成一组以相似规则初始化的常量,但是不用每行都写一遍初始化表达式。在一个const声明语句中,在第一个声明的常量所在的行,iota将会被置为0,然后在每一个有常量声明的行加一。
iota常量生成器通常也被称为iota枚举

const (
	a = iota
	b
	c
	d
)
func main() {
	println(a)// 0
	println(b)// 1
	println(c)// 2
	println(d)// 3
}

当iota被打断后,后续的值即为打断后的值,除非再次赋值

const (
	a = iota
	b = 5
	c
	d
)
func main() {
	println(a)// 0
	println(b)// 5
	println(c)// 5
	println(d)// 5
}

被打断后的iota,再次赋值时会按照继续原有的顺序继续赋值,被打断的值将在赋值时被丢弃

const (
	a = iota
	b = 5
	c = iota
	d
)
func main() {
	println(a)// 0
	println(b)// 5  被打断的1被5覆盖
	println(c)// 2
	println(d)// 3
}

2.无类型常量

Go语言的常量有个不同寻常之处。虽然一个常量可以有任意一个确定的基础类型,例如int或float64,或者是类似time.Duration这样命名的基础类型,但是许多常量并没有一个明确的基础类型。
编译器为这些没有明确基础类型的数字常量提供比基础类型更高精度的算术运算;可以认为至少有256bit的运算精度。这里有六种未明确类型的常量类型,分别是无类型的布尔型、无类型的整数、无类型的字符、无类型的浮点数、无类型的复数、无类型的字符串。
通过延迟明确常量的具体类型,无类型的常量不仅可以提供更高的运算精度,而且可以直接用于更多的表达式而不需要显式的类型转换。

只有常量可以是无类型的。

注意:
无类型整数常量转换为int,它的内存大小是不确定的,但是无类型浮点数和复数常量则转换为内存大小明确的float64和complex128。
如果不知道浮点数类型的内存大小是很难写出正确的数值算法的,因此Go语言不存在整型类似的不确定内存大小的浮点数和复数类型。

备注

查看字节大小:

// Sizeof takes an expression x of any type and returns the size in bytes
// of a hypothetical variable v as if v was declared via var v = x.
// The size does not include any memory possibly referenced by x.
// For instance, if x is a slice, Sizeof returns the size of the slice
// descriptor, not the size of the memory referenced by the slice.
// The return value of Sizeof is a Go constant.
func Sizeof(x ArbitraryType) uintptr

Golang(六)[基础数据类型]_第3张图片

var i  int
fmt.Println(unsafe.Sizeof(i))

上一篇:Golang(二)[IDE配置]
下一篇:Golang(四)[复合数据类型]

你可能感兴趣的:(Golang)