golang最近遇到的一些坑

最近没有学到什么新知识,可是遇到很多坑,写篇博客记录一下

首先是range的坑

有一天我想跑个循环将一个结构体切片中全部元素的指针存到一个新的数组中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

post中的?会被转义成%3f

+ 空格 / ? % & = #
%2B %20 %2F %3F %25 %26 &3D %23
var post_Str = apply_name.replace(/\+/g, "%2B");//"+"转义
var post_Str= post_Str.replace(/\&/g, "%26");//"&"
var post_Str= post_Str.replace(/\#/g, "%23");//"#"

当时拼url的时候?id=xxxxxx会变成%3fxxxxxspa

就须要转义了指针

Unmarshal时必定须要传指针

Unmarshal必定要穿指针而且必定要保证结构体里的成员变量为大写开头(废话)不然这两点缺一个都会却是会致使转换失败
code

使用指针类型前必定要想到时否为空

好比userPtr是user的指针类型,你须要username的时候必定判断

username = userptr.name复制代码

这时候必定要须要思考这里的指针是否会nil不然会报panic的

最后的最后git commit以前必定要go fmt!!!!

提交以前必定要默念三遍(被组长说了好几遍了)

相关文章
相关标签/搜索