最近沒有學到什麼新知識,可是遇到很多坑,寫篇博客記錄一下
有一天我想跑個循環將一個結構體切片中全部元素的指針存到一個新的數組中git
package main
import "fmt"
type Student struct {
name string
age int
}
func main() {
var studentsptr []*Student
var students []Student
student1 := Student{
name: "zhangsan",
age: 10,
}
student2 := Student{
name: "lisi",
age: 11,
}
student3 := Student{
name: "wangwu",
age: 12,
}
students = append(students,student1,student2,student3)
for _,student := range students {
studentsptr=append(studentsptr, &student)
}
fmt.Println(studentsptr)
}複製代碼
按照我預想的的是這樣將students
裏面全部的student
的地址存進studentptr
數組
結果輸出是bash
[0xc00009a000 0xc00009a000 0xc00009a000]複製代碼
說明這裏的range前的student只建立了一次,循環只是將它重修賦值而已app
爲了達到目的咱們只能構建一個臨時的中間量post
package main
import "fmt"
type Student struct {
name string
age int
}
func main() {
var studentsptr []*Student
var students []Student
student1 := Student{
name: "zhangsan",
age: 10,
}
student2 := Student{
name: "lisi",
age: 11,
}
student3 := Student{
name: "wangwu",
age: 12,
}
students = append(students,student1,student2,student3)
for _,student := range students {
var studentTemp Student
studentTemp=student
studentsptr=append(studentsptr, &studentTemp)
}
fmt.Println(studentsptr)
}複製代碼
結果爲ui
[0xc00000c080 0xc00000c0a0 0xc00000c0c0]複製代碼
這樣就能將地址保存下來,而且能對其進行操做url
+ | 空格 | / | ? | % | & | = | # |
%2B | %20 | %2F | %3F | %25 | %26 | &3D | %23 |
當時拼url的時候?id=xxxxxx會變成%3fxxxxxspa
就須要轉義了指針
Unmarshal必定要穿指針而且必定要保證結構體裏的成員變量爲大寫開頭(廢話)不然這兩點缺一個都會卻是會致使轉換失敗
code
好比userPtr是user的指針類型,你須要username的時候必定判斷
username = userptr.name複製代碼
這時候必定要須要思考這裏的指針是否會nil不然會報panic的
提交以前必定要默唸三遍(被組長說了好幾遍了)