Go语言自学系列 | golang标准库builtin

视频来源:B站《golang入门到项目实战 [2021最新Go语言教程,没有废话,纯干货!持续更新中...]》

一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持!

附上汇总贴:Go语言自学系列 | 汇总_COCOgsta的博客-CSDN博客_go语言自学


这个包提供了一些类型声明、变量和常量声明,还有一些便利函数,这个包不需要导入,这些变量和函数就可以直接使用。

常用函数

append

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

slice = append(slice, elem1, elem2)  //直接在slice后面添加单个元素,添加元素类型可以和slice相同,也可以不同
slice = append(slice, anotherSlice)  //直接将另外一个slice添加到slice后面,但其本质还是讲anotherSlice中的元素一个一个添加到slice中,和第一种方式类似

实例

package main

import (
    "fmt"
)

func main() {
    s1 := []int{1, 2, 3}
    i := append(s1, 4)
    fmt.Printf("i: %v\n", i)

    s2 := []int{7, 8, 9}
    i2 := append(s1, s2...)
    fmt.Printf("i2: %v\n", i2)
}

运行结果

[Running] go run "/Users/guoliang/SynologyDrive/软件开发/go/golang入门到项目实战/goproject/360duote.com/pro01/test.go"
i: [1 2 3 4]
i2: [1 2 3 7 8 9]

len

返回,数组、切片、字符串、通道的长度

实例

import (
    "fmt"
)

func main() {
    s1 := "hello world"
    i := len(s1)
    fmt.Printf("i: %v\n", i)

    s2 := []int{1, 2, 3}
    fmt.Printf("len(s2): %v\n", len(s2))
}

运行结果

[Running] go run "/Users/guoliang/SynologyDrive/软件开发/go/golang入门到项目实战/goproject/360duote.com/pro01/test.go"
i: 11
len(s2): 3

print、println

打印输出到控制台。

实例

package main

import (
    "fmt"
)

func main() {
    name := "tom"
    age := 20
    print(name, " ", age, "\n")
    fmt.Println("---------")
    println(name, " ", age)
}

运行结果

[Running] go run "/Users/guoliang/SynologyDrive/软件开发/go/golang入门到项目实战/goproject/360duote.com/pro01/tempCodeRunnerFile.go"
tom 20
tom   20
---------

panic

抛出一个panic异常

实例

package main

import (
    "fmt"
)

func main() {
    defer fmt.Println("panic 异常后执行...")
    panic("panic 错误...")
    fmt.Println("end...")
}

运行结果

[Running] go run "/Users/guoliang/SynologyDrive/软件开发/go/golang入门到项目实战/goproject/360duote.com/pro01/test.go"
panic 异常后执行...
panic: panic 错误...

goroutine 1 [running]:
main.main()
    /Users/guoliang/SynologyDrive/软件开发/go/golang入门到项目实战/goproject/360duote.com/pro01/test.go:9 +0x73
exit status 2

new和make

new和make区别:

  1. make只能用来分配及初始化类型为slice,map,chan的数据;new可以分配任意类型的数据
  2. new分配返回的是指针,即类型*T;make返回引用,即T;
  3. new分配的空间被清零,make分配后,会进行初始化。

实例

package main

import (
    "fmt"
)

func testNew() {
    b := new(bool)
    fmt.Println(*b)
    i := new(int)
    fmt.Println(*i)
    s := new(string)
    fmt.Println(*s)
}

func main() {
    testNew()
}

运行结果

[Running] go run "/Users/guoliang/SynologyDrive/软件开发/go/golang入门到项目实战/goproject/360duote.com/pro01/test.go"
false
0

make

内建函数make(T, args)与new(T)的用途不一样。它只用来创建slice、map和channel,并且返回一个初始化的(而不是置零),类型为T的值(而不是*T)。之所以有所不同,是因为这三个类型的背后引用了使用前必须初始化的数据结构。例如,slice是一个三元描述符,包含一个指向数据(在数组中)的指针,长度,以及容量,在这些项被初始化之前,slice都是nil的。对于slice,map和channel,make初始化这些内部数据结构,并准备好可用的值。

make([]int, 10 , 100)

分配一个有100个int的数组,然后创建一个长度为10,容量为100的slice结构,该slice引用包含前10个元素的数组。对应的,new([]int)返回一个指向新分配的,被置零的slice结构体的指针,即指向值为nil的slice的指针。

package main

import "fmt"

func main() {
    var p *[]int = new([]int)     // allocates slice structure; *p == ni; rarely useful
    var v []int = make([]int, 10) // the slice v now refers to a new array of 100 ints

    fmt.Printf("p: %v\n", p)
    fmt.Printf("v: %v\n", v)

    // Unnecessarily complex: 这种做法实在是很蛋疼

    var p1 *[]int = new([]int)
    *p1 = make([]int, 5, 10)

    // Idiomatic: 习惯的做法
    v1 := make([]int, 10)

    fmt.Printf("p1: %v\n", p1)
    fmt.Printf("v1: %v\n", v1)
}

运行结果

[Running] go run "/Users/guoliang/SynologyDrive/软件开发/go/golang入门到项目实战/goproject/360duote.com/pro01/test.go"
p: &[]
v: [0 0 0 0 0 0 0 0 0 0]
p1: &[0 0 0 0 0]
v1: [0 0 0 0 0 0 0 0 0 0]
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值