package main
import("fmt")type Address struct{
city string}type Employee struct{
name string
age int
Address
}func(a Address)displayAddress(){
fmt.Println(a.city)}funcmain(){
emp := Employee {
name:"Sam",
age:18,
Address: Address {// 这里必须要写成Address: Address {}
city:"New York",},// 这里要加逗号}// 调用displayAddress,可以用如下两种方式调用:
emp.displayAddress()// New York
emp.Address.displayAddress()// New York}
5.方法的值接收者 VS 函数的值参数
方法的值接收者既是接收指针,也可以是值接收者
函数的值接收者只能是值接收者
type rectangle struct{
length int
width int}funcarea(r rectangle){
fmt.Printf("Area Function result: %d\n",(r.length * r.width))}func(r rectangle)area(){
fmt.Printf("Area Method result: %d\n",(r.length * r.width))}funcmain(){
r := rectangle{
length:10,
width:5,}area(r)
r.area()
p :=&r // 这是指针,方法可以接收,函数不行
p.area()//calling value receiver with a pointer}
6.方法的指针接收者 VS 函数的指针接收者
和值参数类似,指针参数的函数只能接收指针。然而 指针接收者的方法却可以同时接收指针和值接收者。
type rectangle struct{
length int
width int}funcperimeter(r *rectangle){
fmt.Println("perimeter function output:",2*(r.length+r.width))}func(r *rectangle)perimeter(){
fmt.Println("perimeter method output:",2*(r.length+r.width))}funcmain(){
r := rectangle{
length:10,
width:5,}
p :=&r //pointer to rperimeter(p)// 函数参数只能是指针
p.perimeter()// 方法接收者可以是指针
r.perimeter()// 方法接收者也可以是值}