go 学习 --- 方法

2021/12/28 23:09:03

本文主要是介绍go 学习 --- 方法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一、方法

Golang中的方法是作用在指定的数据类型上的(即:和指定的数据类型绑定),因此自定义类型,都可以有方法,而不仅仅是struct。

二、方法的使用

package main

import "fmt"

//定义一个结构体
type Person struct {
	Name string
} 
//给结构体绑定方法
func (person Person) test() {
	person.Name = "小马"
	fmt.Println(person)
}

func main() {
	person := Person{}
	//调用方法
	person.test()
}

 三、入门练习

1、给Person结构体添加speak方法,输出xxx是-一个好人

2、给Person结构体添加jisuan方法,可以计算从1..+1000的结果

3、给Person结构体jisuan2方法,该方法可以接收一个数n,计算从1+..+n的结果

4、给Person结构体添加getSum方法,可以计算两个数的和,并返回结果。

package main

import "fmt"

//定义一个结构体
type Person struct {
	Name string
}
//绑定方法
func (person Person) speak(){
	fmt.Println(person.Name,"是一个好人")
}
func (person Person) jisuan() {
   var sum int = 0
	for i := 1;i <= 1000 ; i++ {
      sum += i
	}
	fmt.Println(sum)
}
func (person Person) jisuan2(n int) {
	var sum int = 0
	for i := 1;i <= n ; i++ {
		sum += i
	}
	fmt.Println(sum)
}
func (person Person) jisuan3(n1,n2 int) int {
	 return n1 + n2
}
func main() {
	person := Person{}
	person.Name = "老王"
	person.speak()
	person.jisuan()
	person.jisuan2(100)
	jisuan3 := person.jisuan3(10, 20)
	fmt.Println(jisuan3)
}

 四、方法内存图

1、在通过一-个变量去调用方法时,其调用机制和函数一样

2、不一样的地方时,变量调用方法时,该变量本身也会作为一个参数传递到方法(如果变量是值类型,则进行值拷贝,如果变量是引用类型,则进行地质拷则)

 五、注意事项

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

2、在方法中,修改结构体变量的值,可以通过结构体指针的方式来处理

3、 Golang中 的方法作用在指定的数据类型上的(即:和指定的数据类型绑定),因此自定义类型,都可以有方法,而不仅仅是struct,比如int , float32等都可以有方法

4、方法的访问范围控制的规则,和函数-样。方法名首字母小写,只能在本包访问,方法首字母大写,可以在本包和其它包访问。

5、如果一个变量实现了String()这个方法,那么fmt.PrintIn默认会调用这个变量的String()进行输出

六、练习

1、编写结构体(MethodUtils),编程一个方法, 方法不需要参数,在方法中打印一10*8的矩形,在main方法中调用该方法。

package main

import "fmt"

//定义一个MethodUtils结构体
type  MethodUtils struct {

}
//定义一个方法
func( utils MethodUtils) MethodUtil()  {
	for i := 0;i < 10; i++ {
		for j := 0;j < 7 ;j++  {
			fmt.Print("*"," ")
		}
		fmt.Println("*")
	}
}

func main() {
	utils := MethodUtils{}
	utils.MethodUtil()
}

2、编写一个方法,提供m和n两个参数,方法中打印一个m*n的矩形

package main

import "fmt"

//定义一个MethodUtils结构体
type  MethodUtil struct {

}
//定义一个方法
func( utils MethodUtil) MethodUtils(n, m int)  {
	for i := 0;i < n; i++ {
		for j := 0;j < m ;j++  {
			fmt.Print("*"," ")
		}
		fmt.Println("*")
	}
}

func main() {
	utils := MethodUtil{}
	utils.MethodUtils(10,8)
}

 3、编写一个方法算该矩形的面积(可以接收长len,和宽width),将其作为方法返回值。 在main方法中调用该方法,接收返回的面积值并打印。

package main

import "fmt"

//定义一个MethodUtils结构体
type  MethodUtils struct {

}

func (methodUtils MethodUtils) area(len float32, width float32) float32 {
   return len*width
}

func main() {
	utils := MethodUtils{}
	fmt.Println(utils.area(10,12.5))
}

 4、编写方法:判断一个数是奇数还是偶数

package main

import "fmt"

type  Num struct {

}

func (num Num) Sum(number int) {
    if number % 2 == 0 {
    	fmt.Println(number,"是偶数")
	}else {
		fmt.Println(number,"是奇数")
	}
}
func main() {
	num := Num{}
	num.Sum(5)
}

 5、定义小小计算器结构体(Calcuator),实现加减乘除四个功能 实现形式1:分四个方法完成:实现形式2:用一个方法搞定

package main

import "fmt"

type Calcuator struct {
	Num1 float32
	Num2 float32
}

func (calcuator *Calcuator) Plus() float32 {
	 return calcuator.Num1 + calcuator.Num2

}

func (calcuator *Calcuator) Subtract() float32 {
	return calcuator.Num1 - calcuator.Num2

}

func (calcuator *Calcuator) Ride() float32 {
	return calcuator.Num1 * calcuator.Num2

}
func (calcuator *Calcuator) calcuators(num byte) float32 {
   var res float32
	switch num {
	case '+':
		res = calcuator.Num1 + calcuator.Num2
	case '-':
		res = calcuator.Num1 - calcuator.Num2
	case '*':
		res = calcuator.Num1 * calcuator.Num2
	case '/':
		res = calcuator.Num1 / calcuator.Num2
	default:
		fmt.Println("输入的值或者符号不对")
	}
   return res
}
func (calcuator *Calcuator) Except() float32 {
	return calcuator.Num1 / calcuator.Num2

}


func main() {
	calcuator := Calcuator{
		14,
		52.2,
	}
	fmt.Println(calcuator.Plus())
	fmt.Println(calcuator.calcuators('-'))
}

 6、在MethodUti ls结构体编个方法,从键盘接收整数(1-9),打印对应乘法表:

package main

import "fmt"

type MethodUtils struct {
}

func (methodUtils *MethodUtils) Test(num int)  {
	for i := 1; i<=num; i++ {
		for j := 1; j <= i; j++ {
			fmt.Print(" ")
			fmt.Print(i,"x",j,"=",i*j)
		}
		fmt.Println()
	}
}

func main() {
	utils := MethodUtils{}
	utils.Test(9)
}

 



这篇关于go 学习 --- 方法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程