标签:指针 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