iT邦幫忙

2017 iT 邦幫忙鐵人賽
DAY 15
1
Modern Web

30天就Go:教你打造LINE自動回話機器人系列 第 15

30天就Go(13):資料結構 - Struct

Struct是一個可以給程式設計師自定義型態的功能。


概念

其實Struct就是有點類似OOP(物件導向)的概念。比如說我今天想要建立一個型態"人",那人有姓名和身高,這時候就可以使用Struct

person {
    name
    height
}

基本操作

定義型態

將原有的型態自訂名稱

type mytype int

這樣一來宣告mytype變數時,實際上就是宣告int

自訂型別

以上面person的概念來舉例

type person struct {
    name string
    height int
}

宣告

同樣person當作範例

p := person{"Tony", 169}

{}內的順序依定義struct的順序

或是可以指定項目初始化

p := person{name: "Tony", height: 169}

指定操作

如果想要存取struct裡面的內容,只要在後面加"."就好了
比如說我想存取person的name

person.name 

多重定義

比如說我的人比較多了,想要建立群組,裡面有群組名稱及人

group {
    name
    person
}

這時候就算是struct裡面又包了struct

定義

首先是person的部分一樣

type person struct {
    name string
    height int
}

再來是group,裡面包含struct person

type group struct {
    name string
    person
}

宣告

g := group{"LINE", person{name: "Emily", height: 158}

指定操作

那我們要如何存取struct裡面的struct呢?基本上就是一直.就對了

g.person.name

如果想存取height在group裡面是沒有定義的變數,可以偷懶一點像是

g.height

效果會等同於

g.person.height

那像是group和person都有name呢?那這時候就不能用這種偷懶的寫法了

function操作

基本方法

假設要寫一個method給person用,為Greeting()

func (p person) Greeting() {
    fmt.Println("Hi~")
}

如何使用

p.Greeting()

override

那如果也想要幫group也做一個Greeting()怎麼辦呢?這時候就是override

func (p person) Greeting() {
    fmt.Println("Hi~")
}

func (g group) Greeting() {
    fmt.Println("We are a group")
}

這時候使用group的Greeting()就會不一樣了

g.Greeting()

上一篇
30天就Go(12):資料結構 - Slice
下一篇
30天就Go(15):Interface
系列文
30天就Go:教你打造LINE自動回話機器人23

尚未有邦友留言

立即登入留言