最近没有学到什么新知识,可是遇到很多坑,写篇博客记录一下
有一天我想跑个循环将一个结构体切片中全部元素的指针存到一个新的数组中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的
提交以前必定要默念三遍(被组长说了好几遍了)