Go基础篇:类型系统

前言✨

前段时间忙着春招面试,现在也算告一段落,找到一家比较心仪的公司实习,开始慢慢回归状态,这后面几章我会学习go1.19版本的语言特性或者机制:类型系统、接口、断言以及反射的内容,也算是补上之前没有深入底层的内容。
个人博客:https://linzyblog.netlify.app/

一、什么是类型?

类型的概念在不同的编程语言之间是不同的,可以用许多不同的方式来表达,但都有一些相同点。

  1. 类型是用来定义变量、常量、函数参数、函数返回值等值的属性;
  2. 在定义的变量上可以执行一组操作,例如:int 类型可以执行 + 和 - 等运算,而对于 string 类型,可以执行连接、空检查等操作;

在Go语言中,类型是用来描述变量、常量、函数参数、函数返回值等值的属性。它定义了变量或表达式可以存储的数据类型,以及可以对其执行的操作。

Go语言中的类型可以分为基本数据类型和引用类型两种。基本数据类型包括整型、浮点型、布尔型、字符串型等,而引用类型包括数组、切片、结构体、接口、channel等。

类型 说明 例子
布尔型 表示真或假的值 true, false
整型 表示整数的值,有不同的位数和符号 int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64
浮点型 表示小数的值,有不同的精度 float32, float64
复数型 表示复数的值,由两个浮点数表示实部和虚部 complex64, complex128
字符串型 表示文本的值,使用UTF-8编码 string
数组型 表示固定长度的元素序列,元素类型相同 [3]int, [5]string
切片型 表示可变长度的元素序列,元素类型相同 []int, []string
映射型 表示键值对的集合,键类型和值类型可以不同 map[string]int, map[int]bool
结构体型 表示一组有名字的字段,字段类型可以不同 struct {name string; age int}
接口型 表示一组方法的集合,用于实现多态和抽象 interface {Read() error; Write() error}
函数型 表示一段可执行的代码,可以有参数和返回值 func(int) int, func(string) (string, error)
通道型 表示用于在不同协程之间传递数据的管道,数据类型相同 chan int, chan string

这些都是 Go 语言的内置类型,给内置类型和接口定义方法是错误的,哪怕用类型别名也一样。

二、类型特性

1、静态类型检查

Go语言是一种静态类型的编程语言,这意味着每个变量都有一个明确的类型,不能随意改变。
类型具有静态类型检查的特性,这意味着在编译时就能够检查出类型错误,避免了在运行时出现类型不匹配的错误。这种特性可以提高程序的可靠性和稳定性,减少调试和修复错误的时间和成本。

例如,如果一个函数需要接收一个整型参数,但是在调用该函数时传入了一个字符串类型的参数。

func IntToString(n int) {
   
	fmt.Println("IntToString")
}

func main() {
   
	var n string
	IntToString(n)
}

我们编译一下:

➜ interfaceTest (main)go build ./main.go
# command-line-arguments
./main.go:13:14: cannot use n (variable of type string) as type int in argument to IntToString

编译器就会在编译时发现这个错误,并提示开发者进行修改。这样就可以避免在运行时出现类型不匹配的错误,提高了程序的可靠性。

2、类型推断

类型推断可以根据变量的值自动推断出其类型,简化了代码的书写。这种特性可以让开发者在不显式指定变量类型的情况下,编写更加简洁、易读的代码。

例如,可以使用以下代码声明一个整型变量:

var x int = 10 // 显式地声明x为int类型,并赋值为10
y := 20 // 语法糖,隐式地声明y为int类型,并赋值为20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lin钟一

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值