Go语言编程入门超级指南

2020-01-28 12:01:04王冬梅

                    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