golang预定义类型

表格内类型都是“预定义类型”也叫“简单类型”。

类型名称 类型 说明
布尔 bool
字符串 string
整型 int,int8,int16,int32,int64
uint,uint8,uint16,uint32,uint64
uintptr
浮点 float32
float64
复数 complex64
complex128
字符 byte (int别名)
rune (int32别名)
接口 error 你没看错
golang中error类型是预定义类型
// /usr/local/go/src/builtin/builtin.go

// 源码中error是用type定义的,为什么是预定义类型,而不是自定义类型?见下方解释。
type error interface {
    Error() string
}
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。
}

你可能感兴趣的:(golang预定义类型)