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!!!!

提交以前必定要默唸三遍(被組長說了好幾遍了)

相關文章
相關標籤/搜索