[TOC]
## 二、数组和切片
### (1) 切片的初始化与追加
> 1.2 写出程序运行的结果
```go
package main
import (
"fmt"
)
func main(){
s := make([]int, 10)
s = append(s, 1, 2, 3)
fmt.Println(s)
}
```
**考点**
切片追加, make初始化均为0
**结果**
```bash
[0 0 0 0 0 0 0 0 0 0 1 2 3]
```
### (2) slice拼接问题
> 下面是否可以编译通过?
> test6.go
```go
package main
import "fmt"
func main() {
s1 := []int{1, 2, 3}
s2 := []int{4, 5}
s1 = append(s1, s2)
fmt.Println(s1)
}
```
**结果**
编译失败
两个slice在append的时候,记住需要进行将第二个slice进行`...`打散再拼接。
```go
s1 = append(s1, s2...)
```
### (3) slice中new的使用
> 下面代码是否可以编译通过?
>test9.go
```go
package main
import "fmt"
func main() {
list := new([]int)
list = append(list, 1)
fmt.Println(list)
}
```
**结果**:
编译失败,`./test9.go:9:15: first argument to append must be slice; have *[]int`
**分析**:
>切片指针的解引用。
> 可以使用list:=make([]int,0) list类型为切片
> 或使用*list = append(\*list, 1) list类型为指针
**new和make的区别:**
二者都是内存的分配(堆上),但是make只用于slice、map以及channel的初始化(非零值);而new用于类型的内存分配,并且内存置为零。所以在我们编写程序的时候,就可以根据自己的需要很好的选择了。
make返回的还是这三个引用类型本身;而new返回的是指向类型的指针。
- 封面
- 第一篇:Golang修养必经之路
- 1、最常用的调试 golang 的 bug 以及性能问题的实践方法?
- 2、Golang的协程调度器原理及GMP设计思想?
- 3、Golang中逃逸现象, 变量“何时栈?何时堆?”
- 4、Golang中make与new有何区别?
- 5、Golang三色标记+混合写屏障GC模式全分析
- 6、面向对象的编程思维理解interface
- 7、Golang中的Defer必掌握的7知识点
- 8、精通Golang项目依赖Go modules
- 9、一站式精通Golang内存管理
- 第二篇:Golang面试之路
- 1、数据定义
- 2、数组和切片
- 3、Map
- 4、interface
- 5、channel
- 6、WaitGroup
- 第三篇、Golang编程设计与通用之路
- 1、流?I/O操作?阻塞?epoll?
- 2、分布式从ACID、CAP、BASE的理论推进
- 3、对于操作系统而言进程、线程以及Goroutine协程的区别
- 4、Go是否可以无限go? 如何限定数量?
- 5、单点Server的N种并发模型汇总
- 6、TCP中TIME_WAIT状态意义详解
- 7、动态保活Worker工作池设计