对于初学者的我来说,面对又是数组又是结构体还有指针,一下子就蒙了,在网上查找资料也没有相应的介绍,经过我的测试终于明白了其中的猫腻:
结构体数组指针 *[]struct:结构体数组指针的指针是数组的指针,即表示数组的地址,数组里面存放的是结构体类型
结构体指针数组 []*struct:即指针表示结构体的地址,数组里面存放的是结构体的指针
有什么解释不对的地方请指正
代码测试:
package mainimport (
"fmt"
)
type XCDataStu struct {
Id int `json:"id" xorm:"id"`
Name string `json:"name" xorm:"name"`
}
//结构体数组指针
func testArray(xcdata *[]XCDataStu) {
fmt.Println(*xcdata)
}
//结构体指针数组,在切片中传的是结构体的指针
func testStruct(xcdata []*XCDataStu) {
fmt.Printf("结构体指针数组:%v\n", xcdata)
//fmt.Printf("结构体指针数组:%v\n", &xcdata)
for index, data := range xcdata {
fmt.Printf("index:%v,data:%v\n", index, *data)
}
}
func main() {
xcData := []XCDataStu{
XCDataStu{Id: 758, Name: "David758"},
XCDataStu{Id: 759, Name: "David759"}, //结构体数组的定义和初始化,逗号别少了
}
fmt.Println(xcData)
fmt.Printf("===================\n")
var xcdata *[]XCDataStu //指针指向
xcdata = &xcData
fmt.Println(*xcdata)
fmt.Printf("==========结构体数组指针=========\n")
testArray(&xcData) //指针作为参数
fmt.Printf("==========结构体指针数组=========\n")
data := []*XCDataStu{
&XCDataStu{Id: 758, Name: "David758"},
&XCDataStu{Id: 759, Name: "David759"},
}
testStruct(data)
}