结构体方法
小结:
1、
t1 := T{}
var t5 T
t5 = T{}
t2 := new(T)
var t3 *T = new(T)
var t4 *T
t4 = new(T)
t6 := &T0{}
var t7 *T0
t7 = &T0{}
t1 t5 :
结构体类型变量
给 t 分配内存,并零值化内存,但是这个时候 t 是类型 T
t2 t3 t4 t6 t7 :
结构体类型变量的指针
变量 t 是一个指向 T的指针,此时结构体字段的值是它们所属类型的零值
type mySlice []int
func (i mySlice) f() {
i = append(i, 123)
}
func (i *mySlice) fp() {
*i = append(*i, 456)
}
s := mySlice([]int{1})
s.f() // []int{1}
sp := mySlice([]int{1})
sp.fp() // []int{1,456}
实践:
type myInt int
func (i myInt) add1() {
i++
}
func (i *myInt) add2() {
*i++
}
a := myInt(1)
a.add1()
b := myInt(1)
b.add2()
b.add2() // (&b).add2()
《Go并发编程实践》 p27
值方法 add1 如果值不是指针类型的,则不能改变原值
指针方法 add2 改变原值
结构体方法 func (cs COSStorageClient) func (cs *COSStorageClient)
type T0 struct { i int s string } type T1 struct { i int s string } func (t *T0) Say() { fmt.Println(t.i, t.s) } func (t T1) Say() { fmt.Println(t.i, t.s) }
type T0 struct { i int s string } type T1 struct { i int s string } t1 := T0{} t2 := new(T0) var t3 *T0 = new(T0) var t4 *T0 t4 = new(T0) var t5 T0 t5 = T0{} t6 := &T0{} var t7 *T0 t7 = &T0{}
the-way-to-go_ZH_CN/10.1.md at master · unknwon/the-way-to-go_ZH_CN · GitHub https://github.com/unknwon/the-way-to-go_ZH_CN/blob/master/eBook/10.1.md