本教材由知了传课辛苦制作而成,仅供学习使用,请勿用于商业用途!如进行转载请务必注明出处!谢谢!

内置函数

一、两个特殊的函数

1.init

init函数用于包(package)的初始化

1 init函数是用于程序执行前做包的初始化的函数,比如初始化包里的变量等 2 每个包可以拥有多个init函数 3 包的每个源文件也可以拥有多个init函数 4 同一个包中多个init函数的执行顺序go语言没有明确的定义(说明) 5 不同包的init函数按照包导入的依赖关系决定该初始化函数的执行顺序 6 init函数不能被其他函数调用,而是在main函数执行之前,自动被调用

2.main

程序的默认入口函数

3.init和main的对比

相同点:

  • 两个函数在定义时不能有任何的参数和返回值,且Go程序自动调用。

不同点:

  • init可以应用于任意包中,且可以重复定义多个。
  • main函数只能用于main包中,且只能定义一个。

init在main之前执行

二、内置函数

1.print、println:底层打印函数,在部署环境中建议使用 fmt 包

2.append:追加元素到切片中,返回修改后的切片,数组不能追加

当有预留的未使用的空间时,直接对未使用的空间进行切片追加,当预留的空间全部使用完毕的时候,
扩容的空间将会是当前的slice长度的一倍,
例如当前slice的长度为4,进行一次append操作之后,cap(a)返回的长度将会是8

3.len:求长度,比如string、array、slice、map、channel ,返回长度

4.copy:拷贝slice,返回拷贝的数目

dst:目标 src:源 从源拷贝到目标,返回的是拷贝的数量 dst := []int{1, 2, 3} src := []int{4, 5} ret := copy(dst,src) 1.不同类型的切片无法复制 2.如果dst的长度大于src的长度,将dst中对应位置上的值替换src中对应位置的值 3.如果dst的长度小于src的长度,多余的将不做替换

5.delete:从map中删除key对应的value

例: map_data := map[string]interface{}{"name":"hallen","age":18} delete(map_data,"name") 没有清空整个map的函数,建议重新定义个新的map, 不用担心垃圾回收的效率,Go语言中的并行垃圾回收效率比写一个清空函数要高效的多。

6.close:主要用来关闭channel

ch := make(chan int, 5) close(ch) // 关闭ch

7.panic:手动触发错误

panic(err)

8.recover:恢复错误,结合defer使用

defer func() { if err := recover(); err != nil { logs.Error(" 错误 %s\r\n", err) l.TplName = "success.html" } }()

9.real:返回complex的实部

var a complex64 a = 1.2 + 1.3i b := 1.4 + 1.5i // 取出实部和虚部的值 real_value := real(b) imag_value := imag(b)

10.imag:返回complex的虚部

11.make:用来分配内存,只能应用于slice, map, chan,返回Type

make主要有一下三种用法: 1.make(map[string]string)、make(chan int) 只指定类型,适用于mapchan,slice不行(容器大小默认为0) 2.make([]int, 2) 指定了容器大小,返回的是一个容器大小为2的slice 3.make([]int, 2, 4) 第二参数是切片的长度,,第三个参数是预留的容器大小,包括前面的2个长度 a := make([]int, 4, 2),就会报语法错误。

12.new:用来分配内存,参数是一个类型,返回*Type

比如int、struct。返回指向Type的指针

它返回的永远是类型的指针,指向分配类型的内存地址,并且内存置为零值。

var a *int a = new(int) *a = 99 fmt.Println(*a) fmt.Println(a)

注:make和new的区别:

  • make 被用来分配引用类型的内存,返回的还是这三个引用类型本身,make常用。
  • new 被用来分配除了引用类型的所有其他类型的内存,返回的是指向类型的指针。new不常用。

13.cap:capacity是容量的意思,用于返回某个类型的最大容量,只能用于切片和 chan

slice := make([]int,4,5) // 如果不指定容器大小,默认切片容器大小就是切片的长度 ma_cap := make(chan int,5) fmt.Println(cap(slice)) fmt.Println(cap(ma_cap)) // 5,5

注:cap和len的区别:

  • len求长度,
  • cap求容器大小,容器大小如果不指定,则容器大小和长度保持一致

1401人已阅读,今天你学习了吗?

添加新回复