标签:指针 height 字段 原来 get 运算 c 结构体 main 指定
![]()






package main
import (
"fmt"
)
type Person struct {
Name string
}
//1. 给Person结构体添加speak 方法,输出 xxx是一个好人
func (p Person) speak() {
fmt.Println(p.Name, "是一个goodman~")
}
//2. 给Person结构体添加jisuan 方法,可以计算从 1+..+1000的结果,
//说明方法体内可以函数一样,进行各种运算
func (p Person) jisuan() {
res := 0
for i := 1; i <= 1000; i++ {
res += i
}
fmt.Println(p.Name, "计算的结果是=", res)
}
//3. 给Person结构体jisuan2 方法,该方法可以接收一个参数n,计算从 1+..+n 的结果
func (p Person) jisuan2(n int) {
res := 0
for i := 1; i <= n; i++ {
res += i
}
fmt.Println(p.Name, "计算的结果是=", res)
}
//4. 给Person结构体添加getSum方法,可以计算两个数的和,并返回结果
func (p Person) getSum(n1 int, n2 int) int {
return n1 + n2
}
//给Person类型绑定一方法
func (person Person) test() {
person.Name = "jack"
fmt.Println("test() name=", person.Name) // 输出jack
}
func main() {
//调用方法
var p Person
p.speak()
p.jisuan()
p.jisuan2(20)
n1 := 10
n2 := 20
res := p.getSum(n1, n2)
fmt.Println("res=", res)
}




package main
import (
"fmt"
)
type Circle struct {
radius float64
}
//为了提高效率,通常我们方法和结构体的指针类型绑定
func (c *Circle) area2() float64 {
//因为 c是指针,因此我们标准的访问其字段的方式是 (*c).radius
//return 3.14 * (*c).radius * (*c).radius
// (*c).radius 等价 c.radius
fmt.Printf("c 是 *Circle 指向的地址=%p", c)
c.radius = 10
return 3.14 * c.radius * c.radius
}
func main() {
//创建一个Circle 变量
var c2 Circle
fmt.Printf("main c 结构体变量地址 =%p\n", &c2)
c2.radius = 7.0
//res2 := (&c).area2()
//编译器底层做了优化 (&c).area2() 等价 c.area()
//因为编译器会自动的给加上 &c
res2 := c.area2()
fmt.Println("面积=", res2)
fmt.Println("c.radius = ", c.radius) //10
}
package main
import (
"fmt"
)
/*
Golang中的方法作用在指定的数据类型上的(即:和指定的数据类型绑定),因此自定义类型,
都可以有方法,而不仅仅是struct, 比如int , float32等都可以有方法
*/
type integer int //integer是int的别名
func (i integer) print() {
fmt.Println("i=", i) //10
}
//编写一个方法,可以改变i的值
func (i *integer) change() { //i是指针变量,是地址拷贝(引用),修改了i会改变原来的值
*i = *i + 1
}
//=========================================
type Student struct {
Name string
Age int
}
//给*Student实现方法String()
func (stu *Student) String() string {
str := fmt.Sprintf("Name=[%v] Age=[%v]", stu.Name, stu.Age)
return str
}
func main() {
var i integer = 10
i.print()
i.change()
fmt.Println("i=", i) //10, 是地址拷贝,被修改了
//定义一个Student变量
stu := Student{
Name : "tom",
Age : 20,
}
//如果你实现了 *Student 类型的 String方法,就会自动调用
fmt.Println(&stu) //Name=[tom] Age=[20]
}
标签:指针 height 字段 原来 get 运算 c 结构体 main 指定
原文地址:https://www.cnblogs.com/yzg-14/p/12231817.html