Golang快速入门-3(Day6)

最後要介绍的是在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)

最短路径问题 (8)

10.10 Thorup’s 无向非负整数权重 SSSP 演算法 今天来介绍 Thorup 在 19...

[NestJS 带你飞!] DAY27 - Swagger (下)

API 操作设计 上一篇我们让 API 的参数能够顺利显示在 Swagger UI 中,在设计完参数...

Day17 - 【概念篇】OAuth flows: Client Credentials

本系列文之後也会置於个人网站 +---------+ +---------------+ | | ...

[前端暴龙机,Vue2.x 进化 Vue3 ] Day14.监听器

虽然之前提过的 计算属性 computed,就有监听的功能了,不过有时候我们仍需要一个属於自己定义的...

DAY 26 『 AVPlayerViewController - 播放影片 』

今天要分享的是,如何用 AVPlayerViewController 显示影片 成品: {%yout...