Go语言中,有一些内置的类型和函数,不需要导入任何东西就可以使用,包括一些内置函数,初学Go,这些函数花几分钟记一记。
官方参考资料:Package builtin

1. 内置类型

  • Constants
  • Variables
  • type ComplexType
  • type FloatType
  • type IntegerType
  • type Type
  • type Type1
  • type bool
  • type byte
  • type complex128
  • type complex64
  • type error
  • type float32
  • type float64
  • type int
  • type int16
  • type int32
  • type int64
  • type int8
  • type rune
  • type string
  • type uint
  • type uint16
  • type uint32
  • type uint64
  • type uint8
  • type uintptr

byte 类型等价于 uint8 类型。

rune 类型等价于 int32 类型。

其中error类型是一个接口:

type error interface {
    Error() string
}

2. 内置函数

func append

往slice切片中追加元素,返回更新后的slice。

func append(slice []Type, elems ...Type) []Type

示例:

slice = append(slice, elem1, elem2) // 追加slice
slice = append(slice, anotherSlice...) // 合并slice

特殊例子:

// 往byte类型的slice中添加string类型
slice = append([]byte("hello "), "world"...)

func cap

根据类型返回容量

func cap(v Type) int

v的类型为以类型下时:

  • 数组:返回 v 元素的数量(相当于len(v))
  • 数组指针:返回 *v 元素的数量(相当于len(v))
  • 切片:可以达到的最大长度;如果 v 是 nil,cap(v) 返回 0
  • Channel通道:channel 的 buffer 容量;如果 v 是 nil,cap(v) 返回 0

func close

关闭channel通道。应该在发送端关闭,而不是在接收端,防止阻塞。

func close(c chan<- Type)

以下操作对于关闭的channel会将ok设为false:

x, ok := <-c

func complex

通过两个浮点数创建一个复数。

func complex(r, i FloatType) ComplexType

实部和虚部要大小相同, 比如 float32 或者 float64。返回相对的合成类型;比如对于float32返回complex64, 对于float64返回complex128。

func copy

复制一个切片。返回复制的元素数量。

func copy(dst, src []Type) int

func delete

删除map中指定key的元素。

func delete(m map[Type]Type1, key Type)

如果m是空的或者不存在key对于的元素,delete为空操作。

func real

返回复数的实数部分。

func real(c ComplexType) FloatType

返回值的类型根据原始 c 的数据类型来返回。

func imag

返回复数的虚数部分。

func imag(c ComplexType) FloatType

返回值的类型根据原始 c 的数据类型来返回。

func len

根据类型返回 v 的长度。

func len(v Type) int

v为以下类型时:

  • 数组:v 中元素的数量
  • 数组指针:*v 中元素的数量(即使 v 是 nil)
  • 切片slice 或者 字典map:v 中元素的数量;如果 v 是 nil, len(v) 返回0.
  • 字符串:v 中 bytes 的数目
  • 通道Channel:channel buffer 队列中的元素数量;如果 v 是 nil, len(v) 返回0.

func make

分配和申明 slice,map,或者 channel 对象。

func make(t Type, size ...IntegerType) Type

类似于 new ,第一个参数是一个类型,而不是一个值。
与 new 不同的是 make 返回的类型与参数相同,而不是一个指针。

具体的取决于要make的对象有所不同:

  • Slice:size 参数为 slice 的容量;可以再传一个整形参数定义容量;例如 make([]int, 0, 10) 分配了一个长度为0, 容量为10的切片。
    capacity 10
  • Map: 可以省略size参数,因为会自动分配小的一个初始化大小。
  • Channel: channel 中定义的容量既是定义 channel 的 buffer 缓冲容量。如果设置为 0 或者省略,则通道不缓冲数据。

func new

分配内存。

func new(Type) *Type

第一个参数是一个类型,而不是一个值。返回一个指针。

func panic

在当前的goroutine中停止正常的执行。

func panic(v interface{})

例如当一个函数 F 调用 panic,正常的程序执行会立即终止,除了 defer 的内容会正常执行,然后返回给调用者。如果是 G 调用了 F,G 的正常执行也会被终止然后执行 defer 程序。以此类推,直到当前执行的 gorouting 停止。这时,程序终止并报告错误情况,包括恐慌的参数值。

这个终止序列叫恐慌,可以通过内置函数 recover 来控制恐慌。

func recover

在程序中用来控制恐慌的goroutine。

func recover() interface{}

在 defer 函数中调用recover可以停止恐慌序列从而重启正常的程序执行,并检索调用panic的错误值。

如果在 deferr 函数外调用 recover,不会停止恐慌序列。在这种情况下,要么当goroutine没有恐慌时,要么如果提供给恐慌的参数为零,recover返回nil。 因此,recover的返回值提示该goroutine是否恐慌。

func print

格式化特定的实现方式并将结果写入标准错误。

func print(args ...Type)

对于引导和调试有用,不应该保留在程序中。

func println

类似于 print,但是 println 会在参数中加空格和添加换行符。

func println(args ...Type)

关于print,println 和 fmt.Println的关系参考:
what’s the difference between fmt.Println() and println() in go