指针+[][]T 类型

指针示例

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

原文地址:https://www.cnblogs.com/zunwen/p/12670486.html