天天看點

Go初探 (5) – 結構體與接口

結構體

Go的結構體與C/C++類似,聲明方式如下

type 結構體名 struct {
    成員聲明...
}
           

聲明時如下

type Student struct{
    id string
    name string
}

func main(){
    //建立一個結構體
    student1 := Student{"123456", "張三"}
    
    //可以使用key-value的形式建立
    student2 := Student{id: "123456", name: "張三"}
    
    //忽略的字段為0或空
    student3 := Student{name: "張三"}
}
           

要通路結構體的資料成員,可直接通過點通路:

student1.id
           

結構體也可以作為參數傳遞

func method(student Stdent){
    //方法體
}
           

也可以用指針指向結構體

type pointer *Student
           

使用如下

pointer = &student1
pointer.id
           

接口

與Java的接口一樣,Go可以将不同類型中相同的方法提取出來,作為接口。任何其它類型實作了接口裡的方法就是實作了這個接口。

接口的定義如下

type 接口名 interface{
    方法名() [傳回類型]
    ...
}
           

接口的實作示例如下

package main

import "fmt"

type Dog interface{
    bark()
}

type BigDog struct{
    
}

type SmallDog struct{
    
}

func (bigDog BigDog) bark() {
    fmt.Println("BigDog is barking.")
}

func (smallDog SmallDog) bark() {
    fmt.Println("SmallDog is barking.")
}

func main(){
    var dog Dog
    dog = new(BigDog)
    dog.bark()
    
    dog = new(SmallDog)
    dog.bark()
}