4

golang预定义类型

 2 years ago
source link: https://studygolang.com/articles/35292
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

golang预定义类型

13641329565 · 大约15小时之前 · 49 次点击 · 预计阅读时间 1 分钟 · 大约8小时之前 开始浏览    

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

类型名称 类型 说明 布尔 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。
}

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK