go语言开发基础28 - 之go语言里的方法定义与方法使用

1.Go语言中的方法(Method)是一种作用于特定类型变量的函数。这种特定类型变量叫做接收者(Receiver)。接收者的概念就类似于其他语言中的this或者 self。

2.方法名是小写时只可以在当前包里调用,如果想在其他包里调用方法需要将方法名首字母写成大写。

3.方法的定义格式如下:

func (形参 *接收的参数类型) 定义的方法名(参数列表) (返回值列表) {
        方法逻辑代码部分
}

 

说明:

  • 形参和参数类型表示这个方法是给那个变量定义的方法。
  • 定义的方法名就是这个方法的名字,通过变量.方法名调用这个方法。
  • 参数列表表示这个方法的接收参数列表。
  • 返回值列表表示这个方法的返回值列表。

  

 

说明:

3.1、方法接收的参数如果是值类型时:方法里修改的只是参数的副本,不会修改参数本身。
3.2、方法接收的参数如果是指针类型时:方法里修改操作会直接作用到参数本身。
3.3、当方法接收的参数是指针时的调用:当方法接收的参数是指针是,调用需要传地址(&参数),Go已经做了优化,直接写参数即可不用加&Go会自己识别,下面是具体例子:
 
结构类型的变量实现方法的示例:
package main

import "fmt"

// 1.自定义Student类型的结构体
type Student struct {
	Name string
	Age int
	Score int
	Sex string
}

// 2.给Student结构体定义init方法(接收一个Student指针类型参数,方法里的所有操作会作用到参数本体),同时init方法接收(name string, age int, score int)参数,init方法没有返回值
func (self *Student) init(name string, age int, score int) {    // 需要接受指针,如果不接收指针函数内部的修改只是修改的副本,修改不到本体
	self.Name = name
	self.Age = age
	self.Score = score
	fmt.Println("init:",self)
}

// 3.给Student结构体定义get方法(接收一个Student值类型参数,方法里的所有操作都是作用到参数的副本上),get方法没有接收参数,返回值为Student类型
func (self Student) get() Student {
	return self
}

func main() {
	// 1.定义Student类型的变量,变量名为stu
	var stu Student

        // stu变量执行init方法执行初始化
	stu.init("Dream", 18, 200)       	// 执行结果为:init: &{Dream 18 200 }

	stu1 := stu.get()     	// stu变量通过get方法获取自己的初始化结果
	fmt.Println("Get:",stu1)      // 打印获取的结果,执行结果为:Get: {Dream 18 200 }
}

  

说明:给Student结构体定义了init和get方法,后面所有定义的Student类型的变量都可以调用init和get方法。

 

自定义类型的变量实现方法示例

package main

import "fmt"

// 1.自定义integer类型
type integer int

// 2.给integer类型实现一个print方法(方法的参数类型是值类型,方法里的所有操作都会作用到参数的副本上),print方法没有接收参数也没有返回值。
func (self integer) print() {
	fmt.Println("this is:",self)
}

// 3.给integer类型实现一个set方法(方法的参数类型是指针类型,方法里的所有操作都会作用到参数本身),set方法需要一个(new integer)参数,没有返回值
func (self *integer) set(new integer) {
	*self = new
}

func main() {
	var a integer        // 1.定义integer类型的变量a
	a = 100           // 给变量初始化,值为100

	a.print()      // 2.a调用print方法,执行结果:this is: 100

	// set方法
	a.set(20)      // 3.a调用set方法,修改自己的值为:20
	a.print()      // 4.a调用print方法,执行结果:this is: 20
}

  

说明:给integer类型定义了print和set方法,后续所有自定义的integer类型的变量都可以使用print和set方法。

posted @ 2020-07-02 16:07  欧-阳  阅读(792)  评论(0)    收藏  举报