因為go中沒有class,只有結構體和方法,所以不存在class的繼承與多型,但是我們可以通過inte***ce來實現類似class的繼承
1.1專案位置關係圖
1.2各個檔案中的**
queue.go
package queuerel.goimport (
"fmt"
"strconv")//
這裡有兩個方法體
type
queue int
type
human
struct
//新增佇列
func (q
*queue) push(a
int) queue
//消耗佇列
func (q
*queue) pop() int
//介紹
func (h
human) sayhi()
//唱歌
func (h
human) sing(lyrics
string)
//注意
:輸出的型別是
string,
那麼phone
就得轉化為
string
func (h
human) see(name
string) string
package queuemain.goimport (
"strconv"
"fmt"
)type
dier
struct
func (d
dier) see(name
string) string
func (d
dier) sayhi()
func (d
dier)sing(lyrics
string)
package main這裡通過inte***ce來呼叫sayhi(),see()和sing()方法,這裡被稱為men的隱藏字段(和class繼承的道理是一樣的)import (
"fmt"
"../../queue")//
通過介面
,來繼承
sayhi
和sing(
只能引用匯入包其中的乙個檔案中
,可以說是選擇性的繼承
)type
men
inte***ce
func
diao(r
men) string
func
main()
fmt.println(q
.push(5))
fmt.println(q
.pop())
fmt.println(q
) //i
繼承了sayhi
和sing,
直接呼叫
var
i men
i = queue.human
i.sayhi()
i.sing("18
歲的天空
") fmt.println(i
.see("
三狗子"))
//通過函式
,呼叫不同介面
//呼叫第一種
var
r men
r=queue.human
fmt.println(diao(r
)) //
呼叫第二種
r=queue.dier
fmt.println(diao(r
))}
type值得注意的是,因為human和dier中的方法是一樣的,所以men理論上是都可以繼承的,但是需要在r賦值中宣告men
inte***ce
var結果展示: 因為go中也是可以同級呼叫,或外部呼叫的,效果如下r men
r=queue.human
fmt.println(diao(r
)) //
呼叫第二種
r=queue.dier
fmt.println(diao(r
))
2.1專案位置關係圖
1.2各個檔案中的**
jiben.go是該例子中最底層封裝的結構體
package duostudy.go中的student在jiben.go的基礎上,呼叫了jb引數並讓xx繼承了jieshao() string和mubiao(number int) string函式import
"strconv"
type
jb struct
func (j
jb) jieshao() string
func (j
jb) mubiao(number
int) string
package duo最後的main.go不僅讓ren繼承jieshao() string和mubiao(number int) string,xiao繼承了jie() stringimport (
"strconv"
)type
student
struct
type
xx inte***ce
func (s
student) jie() string
func (s
student) zhen(num
int) string
func (s
student) zhu() string
,zhen(num int) string和zhu() string,而且使得duo繼承了xiao,duo.xx,必須主意的是,因為duo.xx和ren本質上是相同的,所以只需要引入乙個即可;
package main執行main.goimport (
"fmt"
"../../duo")//
繼承jb
type
ren
inte***ce
//繼承
student
type
xiao
inte***ce
//繼承
ren(duo.xx)
和xiao,
因為ren
和duo.xx
是重複呼叫的
,所以只能調其中的乙個
,不能多次呼叫
type
duo
inte***ce
//呼叫者來申明介面
func
main()
fmt.println(i
.jieshao())
fmt.println(i
.mubiao(18))
fmt.println("
王二丫結束
") //
呼叫外部
var
j xiao
//noinspection all
j = duo.student,
"山西大學",
5000}
fmt.println(j
.jie())
fmt.println(j
.zhen(9999))
fmt.println(j
.zhu())
fmt.println("
李二櫃結束
") //
組合呼叫
var
w duo
w = duo.student,
"理工大學",
6000}
fmt.println(w
.jieshao())
fmt.println(w
.jie())
fmt.println(w
.mubiao(30))
}
結果展示:
Go的學習旅程3 物件導向
在go中,是沒有類class的定義的,但是類似於class的是type package main import fmt 定義乙個類 type person struct 建構函式 func con name string,age,tel int person 方法 func aaa person f...
Go語言面向介面
python中的鴨子型別 def duck run duck duck.run 與python類似,go語言中也有鴨子型別。在go語言中介面的型別是inte ce type retriever inte ce 接著我們穿件包retriever,然後在包中實現retriever type retrie...
學習旅程之Neo4j
1.關於命令列啟動資料庫伺服器的問題 neo4j zip環境設定 warning this batch script has been deprecated.please use the provided powershe ll scripts instead 然後換了3.1.0版本,這個版本中沒有...