首先需要宣告,在golang裡面是不存在繼承這麼一說的,不像在php和java當中那樣有父類子類,子類繼承父類,extends,implements等等統統是不存在滴!
今天就模擬實現子類繼承父類的案例
看程式碼吧:
//NewsModel.go 理解為父類 結構體: package models import "github.com/pquerna/ffjson/ffjson" type NewsModel struct { NewsId int NewsTitle string } func (news NewsModel) ToJson() string { result,err := ffjson.Marshal(news) if err!= nil { return err.Error() } else { return string(result) } }
//SportsNews.go 理解為子類 子結構體:
package submodels
import (
"com.huxiaobai/models"
"github.com/pquerna/ffjson/ffjson")
type SportsNews struct {
Tags []string //array 字串陣列
// 我們在這裡定義的只是一個匿名屬性 型別為NewsModel 這樣我們就可以在別的地方呼叫NewsMoel結構體裡面的屬性就跟呼叫SportNews結構體裡面的屬性一樣來呼叫
// 比如
// var sn submodels.SportsNews
// sn.NewsId = 123 // 這裡的sn.NewId就可以直接呼叫到NewsModel結構體裡面的屬性來進行操作
// 如果 News Models.NewsModel 這麼來定義 那麼就得需要 sn.News.NewsId = 123 顯然這樣就有點不像php或者java裡面從子類當中可以直接讀取父類裡面屬性的特點了
models.NewsModel
}
//這裡可以理解為覆蓋了母類當中的ToJson()方法
//當再呼叫fmt.Println(sn.ToJson())的時候那麼Tags以及母類當中的NewsId NewsTitle就會都被列印出來了
//如果不寫這個方法 呼叫的是母類裡面的ToJson() 列印的只是NewsId NewsTitle屬性的值
func (sn SportsNews) ToJson() string {
result,err := ffjson.Marshal(sn)
if err!= nil {
return err.Error()
} else {
return string(result)
}
}
//main.go 理解為入口檔案:
package main
import (
"com.huxiaobai/submodels"
"fmt"
"github.com/pquerna/ffjson/ffjson")
func main(){
//通過struct結構體 模擬 php或者java當中的繼承 (重點去看SportsNews結構體當中屬性的定義:models.NewsModel) 案例一
var sn submodels.SportsNews
//可以就跟php當中子類調取父類當中元素的形式直接讀取NewsModel結構體裡面的屬性或者設定屬性值
sn.NewsId = 123123
sn.NewsTitle = "標題"
sn.Tags = []string{"足球","羽毛球","排球"}
fmt.Println(sn.ToJson())
}
重點看裡面的註釋,尤其是SportsNews.go檔案裡面的註釋資訊
下面我們來看一下陣列的基本使用:
//陣列的學習 案例一
//var arr []string = []string{"a","b","c"}
//fmt.Println(arr,len(arr))
//陣列的學習 案例二
//var arr [3]string
//arr[0] = "a"
//arr[2] = "c"
//fmt.Println(arr)
//陣列的學習 案例三
//var arr [3]string = [3]string{0:"a",1:"b"}
//fmt.Println(arr)
本作品採用《CC 協議》,轉載必須註明作者和本文連結