title: golang基本知识
tags: [golang]
categories: [Golang,其他]
toc: false
date: 2021-09-07 11:16:55


golang作用域:

声明和作用域 https://golang.org/ref/spec#Declarations_and_scope

Go 在词法范围内使用blocks:
  • 预先声明的标识符的范围是 Universe 块。

  • 表示在顶层(任何函数之外)声明的常量、类型、变量或函数(但不是方法)的标识符的范围是包块。

  • 导入包的包名的范围是包含导入声明的文件的文件块。

  • 表示方法接收器、函数参数或结果变量的标识符的范围是函数体。

  • 在函数内声明的常量或变量标识符的范围从 ConstSpec 或 VarSpec(短变量声明的 ShortVarDecl)的末尾开始,并在最里面的包含块的末尾结束。

  • 在函数内声明的类型标识符的范围从 TypeSpec 中的标识符开始,并在最里面的包含块的末尾结束。

  • 在块中声明的标识符可以在内部块中重新声明。虽然内部声明的标识符在范围内,但它表示内部声明所声明的实体。

  • 所述包子句是不声明; 包名不会出现在任何范围内。其目的是识别属于同一包的文件并为导入声明指定默认包名称。

golang关键字:

bool、byte、error、true、iota甚至int都难道都不是关键字?没错!和其他语言不同,这些标识符并不是关键字,在Go中它们被称为预定义标识符

golang预定义标识符:

  • 作用域:universe
  • 预定义标识符可被override。可覆盖后借助 %T 查看新类型

golang内建函数:

  • 内建函数其实并没有自己的实现源码,编译期间内建函数被替换为若干runtime的调用。可以借助 compile 查看。go tool compile -S innerfunc.go > innerfunc.s