go语言 方法

go 语言中没有类,但是是有方法。

方法的定义:

  func (recevier type) methodName(参数列表)(返回值列表){ }

type School struct {
	Name string
	Addr string
}

func NewSchool(name, addr string) *School {
	return &School {
		Name:name,
		Addr:addr,
	}
}

func (s *School) GetName() string {  //定义方法  s 接收者类型    GetName方法名字
	return s.Name
}

func (s *School) GetAddr() string {
	return s.Addr
}
func testmodel(){
	school := NewSchool("北京大学","北京海淀区")
	fmt.Println(school.GetAddr()) //school.GetAddr 方法的调用
	fmt.Println(school.Getname())

}
//运行结果
北京海淀区
北京大学

  方法和函数有什么区别呢?

函数可以说谁都可以调用,而方法只有接收者类型相同的才可以调用。当然了,定义上也是不同的,方法是包含了接收者的函数。

下面演示一个例子,说明方法接收者值传递和引用传递的区别

package main

import (
	"fmt"
)

type Int int                //自定义类型Int

func (i *Int) add(a, b int) {   //接收者类型是Int类型的指针,引用类型
	*i = Int(a + b)
	return
}
func (i Int) Add(a, b int) {    //接收者类型是Int类型,值类型
	i = Int(a + b)
	return
}
func main() {
	var b Int
	var c Int
	b.add(100, 200)  //300     些时传入的接者i是&b,就是变量b的地址相当于(&b).add(100,200),add方法内部:*(&b)=Int(100+200) 就是这个i指针指向的变量b的值改变为300
	fmt.Println(b)
	c.Add(100,200)    //值传递不带回主函数
	fmt.Println(c) // 0
	
}

  

原文地址:https://www.cnblogs.com/wanghaijun999/p/8157142.html