指针示例
package main
import (
"fmt"
"reflect"
)
func main() {
s := []int{0, 1, 2, 3}
fmt.Println(s)
fmt.Println(&s[2])
p := &s[2] // *int, 获取底层数组元素指针。
fmt.Println(reflect.TypeOf(p)) //打印p的类型
fmt.Println(*p) //指针取值
*p += 100
fmt.Println(s)
}
输出
[0 1 2 3]
0xc0000140d0
*int
2
[0 1 102 3]
[][]T类型
解析: [][]T,是指元素类型为 []T 。
package main
import "fmt"
func main() {
data := [][]int{
[]int{1, 2, 3},
[]int{100, 200},
[]int{11, 22, 33, 44},
}
fmt.Println(data)
}
输出
[[1 2 3] [100 200] [11 22 33 44]]
channel
package main
import (
"fmt"
)
type Request struct {
data []int
ret chan int
}
func NewRequest(data ...int) *Request {
fmt.Printf("我是data: %v
", data)
return &Request{data, make(chan int, 1)}
}
func Process(req *Request) {
x := 0
fmt.Println("我就是我")
fmt.Println("不一样的烟火")
for _, i := range (*req).data {
fmt.Println(i)
x += i
}
req.ret <- x
// 原本应该是如下的格式
// x := 0
// fmt.Println("我就是我")
// fmt.Println(*req)
// fmt.Println("不一样的烟火")
// for _, i := range (*req).data { // 应该是*req 因为req是指针,而要取出指针所指向的内容应该在前加* 也即是(*req) 而这里为什么
// req.data也可以直接出来正确的结果,是因为go内部帮我们进行了转化,但是容易给初学者造成一些困惑
// fmt.Println(i)
// x += i
// }
// req.ret <- x
}
func main() {
req := NewRequest(10, 20, 30)
Process(req) // req is a ptr 这个指针指向的是一个地址&{[10 20 30] 0xc000044070}
fmt.Println("
=========
")
fmt.Println(<-req.ret)
fmt.Println(req.data)
}
输出
我是data: [10 20 30]
我就是我
不一样的烟火
10
20
30
=========
60
[10 20 30]
unsafe.Pointer
转自: https://blog.csdn.net/RA681t58CJxsgCkJ31/article/details/85241470