结构体方法

小结:

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

 

 

 

 

 

 

posted @ 2022-05-05 16:18  papering  阅读(50)  评论(0编辑  收藏  举报