1 append 列表
append() 切片需要增加 ...
var a []inta = append(a, 1) // 追加1个元素
a = append(a, 1, 2, 3) // 追加多个元素
a = append(a, []int{1,2,3}...) // 追加切片,
2 如何打印指针结构体的值
为结构体实现 String() 方法
type DataAndDetail struct {
Data *entity.Data
DataDetail *entity.DataDetail
}
func (t *DataAndDetail) String() string {
return fmt.Sprintf("{Data:%v,DataDetail:%v}", t.Data, t.DataDetail)
}
# test:
DataAggregate := &aggre.DataAndDetail{
Data: data,
DataDetail: detail,
}
fmt.Printf("aggre:%v", DataAggregate)
结果类似:
3 * 和 & 的用法
*
是取出地址中的值,*string 则代表指针类型的 , & 表示变量对应的地址
&entity.State
,表示创建一个结构体,并把地址取出,相当于结构体指针- 参数类型是 * 的指针类型,那么在传递值的时候就需要传递 &
// 定义参数指针类型
func AddState(c *gin.Context, options *entity.AddStateOptions) {}
// 使用的时候就需要传递 &这种类型
state.AddState(c, &req.AddStateOptions)
new
创建和 &State
结构体创建的区别,最好不用new,直接用指针方法
a:=new(user) // 创建的是对象指针
b:=&user{} // 创建的是指针类型
c:=user{} // 创建的是对象本身