iT邦幫忙

2021 iThome 鐵人賽

DAY 1
1

最後要介紹的是在Golang中比較特別的struct/method/interface

struct

對於golang來說,他沒有class的概念,所以如果要宣告一個物件,他有屬性的話,就會使用struct來進行宣告

type person struct {
    name string
    phone string
}
john := person{
    name: "John",
    phone: "0912345678",
}
fmt.Println(john)

method

當你想為struct建立專屬於他的method,在golang可以這麼做

type person struct {
    name string
    phone string
}

func (p person) tellMeName() (error) {
    if p.name == "" {
        return errors.New("empty name")
    }
    fmt.Println("my name is", p.name)
    return nil
}

john := person{
    name: "John",
    phone: "0912345678",
}
if err := john.tellMeName(); err!=nil { // my name is john
    fmt.Println(err)
}
baby := person{
    name: "",
    phone: "",
}
if err := baby.tellMeName(); err!=nil { 
    fmt.Println(err)// empty name
}

interface

interface是個特別的type,他可以用來預先定義好你宣告完的變數他有哪些method可以使用,然後在事後再將這個變數內放入不同的struct

範例如下

type animal interface {
    run()
    sleep(time int)
}
type person struct {
    name string
}
type dog struct {
    name string
}
func (person) run() {
    fmt.Println("person can run")
}
func (p person) sleep(time int) {
    fmt.Println("person ",p.name," sleep", time, "hour")
}
func (dog) run() {
    fmt.Println("dog can run")
}
func (d dog) sleep(time int) {
    fmt.Println("dog ",d.name,"sleep", time, "hour")
}
func (dog) barking() {
    fmt.Println("barking!!")
}

func atNight(x animal) {
    x.sleep(10)
}

john := person{
    name: "John",
}
popo := dog{
    name: "Popo",
}
atNight(john)
atNight(popo)

另外,關於interface裡面,放進去的method只要都包含即可,可以比他多是可以的
所以,如果宣告一個變數他是interface{}就表示他可以放任何東西進去,這個在未來取第三方來源的資料時很常使用到,但這個我日後再進行說明


上一篇
Golang快速入門-2(Day5)
下一篇
Golang快速入門-4(Day7)
系列文
網頁新手入門,手把手用React/Golang(Echo)開發基礎網頁(以簡易智慧家庭為例)28
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言