(1)结构体类型是值类型,在方法调用中,遵守值类型的传递机制,是值拷贝传递方式

(2)如程序员希望在方法中,改变结构体变量的值,可以通过结构体指针的方式来处理


我们写程序的时候,可以直接简化:

底层编译器做了优化,底层会自动帮我们加上 & *
(3)Golang中的方法作用在指定的数据类型上的,和指定的数据类型绑定,因此自定义类型,都可以有方法,而不仅仅是struct,比如int , float32等都可以有方法
go
package main
import "fmt"
type integer int
func (i integer) print(){
i = 30
fmt.Println("i = ",i)
}
func (i *integer) change(){
*i = 30
fmt.Println("i = ",*i)
}
func main(){
var i integer = 20
i.print()
i.change()
fmt.Println(i)
}(4)方法的访问范围控制的规则,和函数一样。方法名首字母小写,只能在本包访问,方法首字母大写,可以在本包和其它包访问。 (5)如果一个类型实现了String()这个方法,那么fmt.Println默认会调用这个变量的String()进行输出
以后定义结构体的话,常定义String()作为输出结构体信息的方法,在fmt.Println会自动调用
go
package main
import "fmt"
type Student struct{
Name string
Age int
}
func (s *Student) String() string{
str := fmt.Sprintf("Name = %v , Age = %v",s.Name,s.Age)
return str
}
func main(){
stu := Student{
Name : "丽丽",
Age : 20,
}
//传入地址,如果绑定了String方法就会自动调用
fmt.Println(&stu)
}