i, pInt, *pInt)
*pInt = 3
fmt.Printf("整数i=[%d],指针pInt=[%p],指针指向*pInt=[%d]n",
i, pInt, *pInt)
i = 5
fmt.Printf("整数i=[%d],指针pInt=[%p],指针指向*pInt=[%d]n",
i, pInt, *pInt)
}
func testMemAllocate() {
var pNil *[]int
fmt.Println("Wild的数组指针:", pNil)
fmt.Printf("Wild的数组指针==nil[%t]n", pNil == nil)
var p *[]int = new([]int)
fmt.Println("New分配的数组指针:", p)
fmt.Printf("New分配的数组指针[%p],长度[%d]n", p, len(*p))
fmt.Printf("New分配的数组指针==nil[%t]n", p == nil)
//Error occurred
//(*p)[3] = 23
*p = make([]int, 10)
fmt.Println("New分配的数组指针Make后:", p)
(*p)[3] = 23
fmt.Println("New分配的数组元素[3]:", (*p)[3])
var v []int = make([]int, 10)
fmt.Println("Make分配的数组引用:", v)
}
3.6 面向对象编程
Golang的结构体跟C有几点不同:
结构体可以有方法,其实也就相当于OOP中的类了。
支持带名称的初始化。
用指针访问结构中的属性也用”.”而不是”->”,指针就像Java中的引用一样。
没有public,protected,private等访问权限控制。C也没有protected,C中默认是public的,private需要加static关键字限定。Golang中方法名大写就是public的,小写就是private的。
同时,Golang支持接口和多态,而且接口有别于Java中继承和实现的方式,而是采取了类似Ruby中更为新潮的Duck Type。只要struct与interface有相同的方法,就认为struct实现了这个接口。就好比只要能像鸭子那样叫,我们就认为它是一只鸭子一样。
package main
import (
"fmt"
"math"
)
// -----------------
// Struct
// -----------------
type Person struct {
name string
age int
email string
}
func (p *Person) getName() string {
return p.name
}
// -------------------
// Interface









