[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工作池設計