go物件導向思想:封裝、繼承、多肽

Latent發表於2020-12-30

go 如何實現的封裝、繼承、和多肽

  • 封裝:go通過結首字母大小寫的方式,實現類方法和屬性的公有化和私有化
  • 繼承:使用內嵌的方式,對結構體 struct 進行組合
  • 多肽:使用 interface 實現

封裝: go中是通過結構體的方法去模擬類

package objects

//通過結構體的方式去模擬類

type User struct {
    Name string
    age int8   //根據首字母方式表現私有 公有
    Record string
}

//根據方法的首字母的大小寫去判斷是否外部訪問
func (user *User) package objects

//通過結構體的方式去模擬類

type UserInterface interface {
    GetUserInfo() *UserInfo
}

type User struct {
    Id int8
    Name string
    age int8   //根據首字母方式表現私有 公有

}
//根據方法的首字母的大小寫去判斷是否外部訪問
func (user *User) GetUser() string {

    return user.Name + "pl";
}

type UserInfo struct {
    U User //繼承這個Uset結構體
    Record string //經歷
    stature float32 //身高
    Sex int8 //性別
    Introduction string //簡介
    Avatar string //頭像
}

func (userinfo *UserInfo) GetUserInfo() *UserInfo  {
    user := new(UserInfo)
    user.Avatar ="xxx"
    return user
}
() string {
    return user.Name + "pl";
}

繼承 我們編寫一個使用者資訊的類。UserInfo 通過 U 繼承了User結構體 通過巢狀實現了類的繼承

type UserInfo struct {
    U User //繼承這個Uset結構體
    Record string //經歷
    stature float32 //身高
    Sex int8 //性別
    Introduction string //簡介
    Avatar string //頭像
}

func (userinfo *UserInfo) GetUserInfo() *UserInfo  {
    user := new(UserInfo)
    user.Avatar ="xxx"
    return user
}

多肽實現 完整程式碼

package objects

//通過結構體的方式去模擬類

type UserInterface interface {
    GetUserInfo() *UserInfo
}

type User struct {
    Id int8
    Name string
    age int8   //根據首字母方式表現私有 公有

}
//根據方法的首字母的大小寫去判斷是否外部訪問
func (user *User) package objects

//通過結構體的方式去模擬類

type UserInterface interface {
    GetUserInfo() *UserInfo
}

type User struct {
    Id int8
    Name string
    age int8   //根據首字母方式表現私有 公有

}
//根據方法的首字母的大小寫去判斷是否外部訪問
func (user *User) GetUser() string {

    return user.Name + "pl";
}

type UserInfo struct {
    U User //繼承這個Uset結構體
    Record string //經歷
    stature float32 //身高
    Sex int8 //性別
    Introduction string //簡介
    Avatar string //頭像
}

func (userinfo *UserInfo) GetUserInfo() *UserInfo  {
    user := new(UserInfo)
    user.Avatar ="xxx"
    return user
}

type UserInfo struct {
    U User //繼承這個Uset結構體
    Record string //經歷
    stature float32 //身高
    Sex int8 //性別
    Introduction string //簡介
    Avatar string //頭像
}

func (userinfo *UserInfo) GetUserInfo() *UserInfo  {
    user := new(UserInfo)
    user.Avatar ="xxx"
    return user
}

如上程式碼所示:UserInfo 結構體繼承了UserInterface介面 並實現了GetUserInfo()的方法

在這裡插入圖片描述

我們來實現列印一下這個方法GetUserInfo 編寫main.go入口檔案

package main

import (
    "fmt"
    //類似於php的名稱空間 引入這個包
    "object/objects"
)

func main(){
    //例項化這個結構體
    user :=new(objects.UserInfo)
    //引用這個結構體對應的方法 並列印它
    fmt.Println(user.GetUserInfo())
}

執行go run main.go

在這裡插入圖片描述
如圖執行成功(注意程式碼1片段和程式碼2片段是在object目錄下的同一個檔案)

本作品採用《CC 協議》,轉載必須註明作者和本文連結
不成大牛,不改個簽

相關文章