表格内类型都是“预定义类型”也叫“简单类型”。
| 类型名称 | 类型 |说明|
| -------- | -------- |-------- |
| 布尔 | bool | |
| 字符串 | string | |
| 整型 | int,int8,int16,int32,int64<br>uint,uint8,uint16,uint32,uint64<br>uintptr| |
| 浮点 | float32<br>float64 | |
| 复数 | complex64 <br> complex128 | |
| 字符 | byte (int别名) <br> rune (int32别名) | |
| 接口 | error | 你没看错<br>golang中error类型是预定义类型 |
```go
// /usr/local/go/src/builtin/builtin.go
// 源码中error是用type定义的,为什么是预定义类型,而不是自定义类型?见下方解释。
type error interface {
Error() string
}
```
```go
package main
import (
"errors"
"fmt"
)
// 一个自定义类型
type xiaoyiError error
func main() {
var xyErr xiaoyiError
err := errors.New("xy err")
xyErr = err
fmt.Println(xyErr)
// 先了解多个赋值规则中的一个:
// 如果两个变量具有相同的底层类型,且二者至少有一个是未命名类型,即可赋值。
// 解:
// 可知:xyErr的类型是xiaoyiError,并且xiaoyiError是自定义类型。
// 可知:errors.New("xy err") 返回的是error类型。
// error 与 xiaoyiError 是不同的类型。
// 如果想将error赋值给xiaoyiError,需保证至少有一个是未命名类型,且底层类型相同。
// 如果error类型算作自定义类型,就不可能赋值成功。因为二者都是自定义类型,不符合至少有一个未命名类型的规则。
// 而上段代码可以赋值成功。
// 所以error是预声明类型,且xiaoyiError的底层类型与error底层类型都是error。
}
```
有疑问加站长微信联系(非本文作者))