Go语言基础之结构体、接口

package main

import (
    "fmt"
)

# 定义Human类型的接口必须实现xx和toS..的方法, 否则编译失败, 这有点像抽象类的意思, 写python多了对这点不太注意。。
type Human interface {
    xx() string
    toStudyKnowledge() string
}  

# 定义一个结构体 Student , 结构体的属性如下(如何设置默认值? 看样子没有直接的去定义一个默认值的方法, 
后期只能通过函数或者第三方包去实现这个功能吧!) 这个就和Python的类相似了, 
type Student struct {
    id int
    name string
    age int
    sex bool
}

# Python是面向对象的, 对象下面就会有各种各样的方法, GO是面向接口的, 定义了结构体以后,
 对于接口必须实现的函数就必须针对每个不同的结构体去实现接口已经声明了的方法, 这就相当于类方法。
func (ab *Student) xx() string {
    return fmt.Sprintf("我的学号:%v, 名字是%v, 年龄%v, 性别%v", ab.id,ab.name,ab.age,ab.sex)
}

func(ab *Student) toStudyKnowledge() string {
    fmt.Println(fmt.Sprintf("我是李大大, 我的学号是%v, 我呀要去上数学课了", ab.id))
    return ""
}

func main() {
    var s Human	# 声明s是一个接口变量
    // 当定义接收者为指针时,相当于是传引用调用,所以必须用指针作为接收者。
    // 如果接收者不是指针的话,则即可以利用传值也可以利用传引用, 上面定义的接受者是指针
    s = &Student{id: 1, name: "lucky", age: 15, sex: false}	# 对接口变量进行赋值(必须实现了接口里面的方法的结构体才行), 初始化结构体,  这里接口变量必须接收指针
    fmt.Println(s.xx())
    s.toStudyKnowledge()
}

你可能感兴趣的:(Go语言基础之结构体、接口)