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) }