Golang内置函数

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

# 增加0到n个元素到slice中,返回新的slice,注意第一个参数不能是指针类型
intslice := make([]int, 0)
intslice = append(intslice, 1)
intslice = append(intslice, 2)
//intslice : [1,2]

func copy(dst, src []Type) int

# 用于将源slice的数据(第二个参数),复制到目标slice(第一个参数)。
# 返回值为拷贝了的数据个数,是len(dst)和len(src)中的最小值。
var a = []int{0, 1, 2, 3, 4, 5, 6, 7}
var s = make([]int, 6)
//源长度为8,目标为6,只会复制前6个
n1 := copy(s, a)
fmt.Println("s - ", s)
fmt.Println("n1 - ", n1)
//源长为7,目标为6,复制索引1到6
n2 := copy(s, a[1:])
fmt.Println("s - ", s)
fmt.Println("n2 - ", n2)
//源长为8-5=3,只会复制3个值,目标中的后三个值不会变
n3 := copy(s, a[5:])
fmt.Println("s - ", s)
fmt.Println("n3 - ", n3)
//将源中的索引5,6,7复制到目标中的索引3,4,5
n4 := copy(s[3:], a[5:])
fmt.Println("s - ", s)
fmt.Println("n4 - ", n4)

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

# 删除map中的一个映射, m为nil或者m[k]不存在也不会panic,而是一个空操作
m := map[int]string{
    1: "张三",
    2: "李四",
}
delete(m, 1)
fmt.Println(m) // map[2:李四]

func len(v Type) int

# 得到字符串、数组、数值指针、slice、map、chan的长度
s := "hello world,你好中国"
a := [5]int{1, 2, 3, 4, 5}
sl := a[:3]
m := map[string]int{"a": 1, "b": 2}
c := make(chan int, 3)

fmt.Println(len(s)) // 字符串:记录字节数。   24
fmt.Println(len(a)) // 数组:记录数组元素个数。 5
fmt.Println(len(sl)) // 切片:记录切片元素个数。 3
fmt.Println(len(m))  // map:记录map元素个数。2
fmt.Println(len(c))  // channel:记录channel通道中的元素个数    0

func cap(v Type) int

# 可以用来查看数组或slice的容量
slice := []int{1, 2, 3, 4, 5, 6, 7, 8, 9}
slice1 := slice[1:5]
    
fmt.Println(slice)       //[1 2 3 4 5 6 7 8 9]
fmt.Println(slice1)      // [2 3 4 5] : 包括1 但不包括5
fmt.Println(len(slice1)) // 4 切片的长度
fmt.Println(cap(slice1)) // 8 切片的容量

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

# 生成slice、map、channel对象
sl1 := make([]int, 5)     //定义长度和容量都为5的切片
sl2 := make([]int, 5, 10) //定义长度为5,容量为10的切片

map1 := make(map[string]int) //定义map
map2 := make(map[string]int, 2) //定义map 初始可以容纳2个元素的空间

c1 := make(chan int) //定义不带缓存的channel
c2 := make(chan int, 5) // 定义缓存大小为5的channel

func new(Type) *Type

# 生成类型T的零值指针,注意它返回的是指针 *T
# golang 中有两个内存分配机制 :new和make,二者有明显区别.
# new:用来初始化一个对象,并且返回该对象的首地址.其自身是一个指针.可用于初始化任何类型
# make:返回一个初始化的实例,返回的是一个实例,而不是指针,其只能用来初始化:slice,map和channel三种类型
t := new(T)

func complex(r, i FloatType) ComplexType

func real(c ComplexType) FloatType

func imag(c ComplexType) FloatType

# Go提供了两种大小的复数类型:complex64和complex128,分别由float32和float64组成。
# 内置函数complex从指定的实部和虚部构建复数,内置函数real和imag用来获取复数的实部和虚部
var x complex128 = complex(1, 2) // 1+2i  构建复数
var y complex128 = complex(3, 4) // 3+4i 构建复数
fmt.Println(x*y)                 // "(-5+10i)" 
fmt.Println(real(x*y))           // "-5"  获取实部
fmt.Println(imag(x*y))           // "10"  获取虚部

func close(c chan<- Type)

# 关闭channel
ch := make(chan bool)
close(ch)
close(ch)  // 这样会panic的,channel不能close两次
ch <- false  //已经关闭channel 不能写入数据
i, ok := <- ch  判断channel是否关闭
i := <-ch 不会panic, i读取到的值是false,如果是有缓存channel,可以继续读取channel中的剩余的数据

func panic(v interface{})

func recover() interface{}

defer func() { // 必须要先声明defer,否则不能捕获到panic异常
    fmt.Println("c")
    if err := recover(); err != nil { //调用recover函数将会捕获到当前的panic(如果有的话
        fmt.Println(err) // 这里的err其实就是panic传入的内容,55
    }
    fmt.Println("d")
}()

fmt.Println("a")
panic(55) // panic是用来表示非常严重的不可恢复的错误的,一般会导致程序挂掉(除非recover)
fmt.Println("b")
fmt.Println("f")
// 输出结果:a c 55 d

# panic 只会触发当前 Goroutine 的延迟函数调用
# recover 只有在 defer 函数中调用才会生效;
# panic 允许在 defer 中嵌套多次调用;
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 207,113评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,644评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,340评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,449评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,445评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,166评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,442评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,105评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,601评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,066评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,161评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,792评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,351评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,352评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,584评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,618评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,916评论 2 344