资料总结 资料总结
首页
go
java
云原生
  • mysql
  • redis
  • MongoDB
  • 设计模式详解
  • 数据结构与算法
  • 前端
  • 项目
  • 理论基础
  • 运营
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

linghui Wu

一只努力学飞的鱼
首页
go
java
云原生
  • mysql
  • redis
  • MongoDB
  • 设计模式详解
  • 数据结构与算法
  • 前端
  • 项目
  • 理论基础
  • 运营
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • go入门教程

  • go标准库

    • fmt标准库
    • os标准库
    • time标准库
    • log标准库
    • errors标准库
    • bytes标准库
    • io标准库
    • ioutil标准库
    • bufio标准库
    • builtin标准库
      • 1. 常用函数
        • 1.1 append
        • 1.2 len
        • 1.3 print、println
      • 2. 重点常用函数
        • 2.1 panic
        • 2.2 new和make
        • 2.2.1 new
        • 2.2.2 make
    • json标准库
    • sort标准库
    • math标准库
    • flag标准库
    • runtime标准库
    • context标准库
  • go常用第三方类库

  • ORM框架

  • web框架

  • 移动端

  • go
  • go标准库
wulinghui
2023-01-22
目录

builtin标准库

# builtin标准库

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

# 1. 常用函数

# 1.1 append

func append(slice []Type, elems ...Type) []Type
1
  • 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)
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14

# 1.2 len

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

package main

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))
}

1
2
3
4
5
6
7
8
9
10
11
12
13

# 1.3 print、println

打印输出到控制台

package main

import "fmt"

func main() {
	name := "zhangsan"
	age := 20
	print(name, " ", age, "\n")
	fmt.Println("---------")
	println(name, " ", age)
}
1
2
3
4
5
6
7
8
9
10
11

# 2. 重点常用函数

# 2.1 panic

抛出一个panic异常

package main

import "fmt"

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

1
2
3
4
5
6
7
8
9
10

# 2.2 new和make

new和make区别:

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

# 2.2.1 new

package main

import "fmt"

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

1
2
3
4
5
6
7
8
9
10
11
12
13

# 2.2.2 make

例如:make([]int, 10 , 100)

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

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

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)

	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)
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
编辑 (opens new window)
上次更新: 2023/01/22, 23:01:13
bufio标准库
json标准库

← bufio标准库 json标准库→

最近更新
01
架构升级踩坑之路
02-27
02
总结
02-27
03
语法学习
02-27
更多文章>
| Copyright © 2021-2025 Wu lingui |
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式