對於初學者的我來說,面對又是數組又是結構體還有指針,一下子就蒙了,在網上查找資料也沒有相應的介紹,經過我的測試終於明白了其中的貓膩:
結構體數組指針 *[]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)
}