情况1
package main
func main() {
dogChan := make(chan int)
dogChan <- 1
}
Run Code Online (Sandbox Code Playgroud)
fatal error: all goroutines are asleep - deadlock!
goroutine 1 [chan send]:
main.main()
/Users/xuzhongwei/Source/awesomeProject/main.go:5 +0x50
Run Code Online (Sandbox Code Playgroud)
案例2
fatal error: all goroutines are asleep - deadlock!
goroutine 1 [chan send]:
main.main()
/Users/xuzhongwei/Source/awesomeProject/main.go:5 +0x50
Run Code Online (Sandbox Code Playgroud)
fatal error: all goroutines are asleep - deadlock!
goroutine 1 [chan send]:
main.main()
/Users/xuzhongwei/Source/awesomeProject/main.go:9 +0x72
Run Code Online (Sandbox Code Playgroud)
案例3
package main
func main() {
dogChan := make(chan int)
go func(ch chan int) {
}(dogChan)
dogChan <- 1
} …
Run Code Online (Sandbox Code Playgroud) package main
import "fmt"
func main() {
arr := make([]int,3,4)
fmt.Println(fmt.Sprintf("before len:%d,cap:%d, address:%p",len(arr), cap(arr), &arr))
arr = arr[1:2]
fmt.Println(fmt.Sprintf("after len:%d,cap:%d, address:%p",len(arr), cap(arr), &arr))
}
Run Code Online (Sandbox Code Playgroud)
before len:3,cap:4, address:0xc0000a6020
after len:1,cap:3, address:0xc0000a6020
Run Code Online (Sandbox Code Playgroud)
切片前后的地址是一样的。
我的问题是,当它的 len 从 3 更改为 1 时,切片是否会分配新的内存。
因为 slice 有三个元素, Data uintptr, Len int, Cap int 如果其中一个发生变化,我的猜测是内存上会生成一个新的 slice,是真的吗?