Go语言数据类型实例讲解 - Go语言从入门到实战

Go语言数据类型实例讲解 - Go语言从入门到实战

基础数据类型

bool
string	
int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
byte
rune
float32 float64
complex64 complex128
类型 描述
bool 布尔型(bool):可以是true或false。
string 字符串类型:表示文本数据。
int 整型:根据平台不同,可以是32位或64位。
int8 8位整型:取值范围为-128到127。
int16 16位整型:取值范围为-32768到32767。
int32 32位整型:取值范围为-2147483648到2147483647。
int64 64位整型:取值范围为-9223372036854775808到9223372036854775807。
uint 无符号整型:根据平台不同,可以是32位或64位。
uint8 8位无符号整型:取值范围为0到255。
uint16 16位无符号整型:取值范围为0到65535。
uint32 32位无符号整型:取值范围为0到4294967295。
uint64 64位无符号整型:取值范围为0到18446744073709551615。
uintptr 用于保存指针的无符号整型。
byte uint8的别名。
rune int32的别名,代表一个Unicode编码点。
float32 32位浮点数类型。
float64 64位浮点数类型。
complex64 64位复数类型,由两个32位浮点数表示实部和虚部。
complex128 128位复数类型,由两个64位浮点数表示实部和虚部。

类型转换

与其他主要编程语言的差异

  1. Go语言不允许隐式类型转换
  2. 别名和原有类型也不能进行隐式类型转换
package main  
  
import "testing"  
  
func TestType(t *testing.T) {  
    var a int = 1  
    var b int64 = 2  
  
    // 这行代码会编译错误,因为无法完成从int到int64的隐式转换, 不允许将一个int类型的变量a赋值给int64类型的变量b。必须显式地将a转换为int64类型,才能赋值给b。
    // b = a  
  
    // 必须显式转换类型  
    b = int64(a)  
  
    t.Log(a, b)  
}

类型的预定义值

  1. math.MaxInt64:这是int64类型的最大值,即9223372036854775807。
  2. math.MaxFloat64:这是float64类型的最大值,即1.8e308。
  3. math.MaxUint32:这是uint32类型的最大值,即4294967295。

这些值是在math包中定义的,它们可以用于比较和限制数值的范围,以防止溢出或下溢。

指针类型

Go语言指针主要包含两个重要概念:指针和切片

  1. 指针:
    • 指针是Go语言中的一种特殊数据类型,它存储了一个变量的内存地址。通过使用指针,可以直接访问指向的内存地址上的值。
    • 传递指针可以避免数据拷贝,提高性能。当传递大型数据结构时,使用指针可以避免将数据整体复制到函数栈上,而是直接操作原始数据。
    • 可以使用指针来修改所指向的值。通过指针访问并修改内存地址上的值,会影响到原始变量的值。
    • 类型指针是指向特定类型变量的指针。类型指针不能进行算术运算或偏移操作,只能与nil进行比较。
  2. 切片:
    • 切片是对数组的一个引用,它包含了指向数组起始元素的指针、切片长度和切片容量。切片长度是切片中元素的数量,切片容量是从起始元素到底层数组的最后一个元素的数量。
    • 切片比使用原始指针更安全,因为它具有内置的长度和容量检查。当尝试访问超出切片长度的索引时,Go语言会抛出运行时错误(panic),并显示堆栈信息,有助于调试。而使用原始指针时,越界访问可能导致程序崩溃,导致不会提供详细的错误信息。
    • 切片是动态长度的,可以根据需要增长或缩小。这使得切片非常适合用于处理可变长度的数据序列。

与其他主要编程语言的差异

  1. 不支持指针运算,不能通过增加或减少指针的值来访问内存中的其他位置。
  2. string是值类型,其默认的初始化值为空字符串,而不是nil。在Go语言中,字符串是一种值类型,当创建一个字符串变量时,它会在内存中有一个具体的值。
package type_test

import "testing"

type MyInt int64

func TestPoint(t *testing.T) {
	a := 1
	aPtr := &a	//创建了一个指向a的指针aPtr
	//aPtr = aPtr + 1
	t.Log(a, aPtr)
	t.Logf("%T %T", a, aPtr)	//打印它们的类型
}

func TestString(t *testing.T) {
	var s string
	t.Log("*" + s + "*") //初始化零值是“”
	t.Log(len(s))	//s的值为默认的空字符串。打印s的长度,应为0。

}

学习Go语言主要是多练,多找些代码段写写,不懂可以私聊咨询。

欢迎关注云尔Websites CSDN博客

你可能感兴趣的:(GO语言从入门到实战,golang,开发语言,后端,GO语言从入门到实战,go语言)