好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > Go語言-為什么返回值為接口類型,卻返回結(jié)構(gòu)體

Go語言-為什么返回值為接口類型,卻返回結(jié)構(gòu)體

熱門標簽:壽光微信地圖標注 電話機器人軟件免費 阿克蘇地圖標注 百度地圖標注后傳給手機 涿州代理外呼系統(tǒng) 外呼系統(tǒng)顯本地手機號 excel地圖標注分布數(shù)據(jù) 評價高的400電話辦理 外呼系統(tǒng)用什么卡

最近由于項目需求,閱讀一些Go語言編寫的項目的源代碼,在某一個函數(shù)中發(fā)現(xiàn)了一個奇怪的現(xiàn)象:一個函數(shù)的返回值類型聲明的是一個接口的類型,但是實際在函數(shù)體內(nèi)返回的卻是一個結(jié)構(gòu)體類型的對象。

這個現(xiàn)象對于新手的我來說很是費解。在經(jīng)過一些資料的查閱之后,自己得到了如下的解釋:

一個結(jié)構(gòu)體實現(xiàn)了一個接口,那么函數(shù)中返回值類型為接口時,就應(yīng)該返回這個結(jié)構(gòu)體。

下面舉一個例子來說明:

package main
import (
	"fmt"
)
/**
Shape接口定義兩個函數(shù):
area() :計算面積
circumference() :計算周長
*/
type Shape interface {
	area() float64
	circumference() float64
}
//結(jié)構(gòu)體正方形,屬性邊長
type square struct {
	length float64
}
//方法area,由正方形結(jié)構(gòu)體實現(xiàn)
func (s square) area()  float64 {
	sarea := s.length * s.length
	return sarea
}
//方法circumference,由正方形結(jié)構(gòu)體實現(xiàn)
func (s square) circumference()  float64 {
	scircumference := s.length * 4
	return scircumference
}
func getarea(len float64) Shape {
	s := square{
		length:4,
	}
	fmt.Println("正方形的面積為:",s.area())
	fmt.Println("正方形的周長為:",s.circumference())
	return s
}
func main() {
	getarea(4)
}

或者另一個版本:

package main
import (
	"fmt"
)
/**
Shape接口定義兩個函數(shù):
area() :計算面積
circumference() :計算周長
*/
type Shape interface {
	area() float64
	circumference() float64
}
//結(jié)構(gòu)體正方形,屬性邊長
type square struct {
	length float64
}
//方法area,由正方形結(jié)構(gòu)體實現(xiàn)
func (s *square) area()  float64 {
	sarea := s.length * s.length
	return sarea
}
//方法circumference,由正方形結(jié)構(gòu)體實現(xiàn)
func (s *square) circumference()  float64 {
	scircumference := s.length * 4
	return scircumference
}
func getarea(len float64) Shape {
	s := square{
		length:4,
	}
	fmt.Println("正方形的面積為:",s.area())
	fmt.Println("正方形的周長為:",s.circumference())
	return s
}
func main() {
	getarea(4)
}

這兩個代碼的區(qū)別就是前者使用了值傳遞,后者使用了指針傳遞。由于這里沒有改變結(jié)構(gòu)體中的屬性值,所以兩種方法在這樣的應(yīng)用場景下,沒有什么區(qū)別,下面來解釋一下這些簡單的demo:

首先我定義了一個Shape接口,里面有兩個待實現(xiàn)的方法area() :計算面積 和 circumference() :計算周長

然后定義了一個正方形結(jié)構(gòu)體,里面只有一個邊長屬性。

然后使用正方形結(jié)構(gòu)體實現(xiàn)這個Shape接口

接著我們就可以進入正題,試驗我們標題的問題了,使用Shape接口類型作為返回值,但是在函數(shù)體內(nèi)實際的返回值是正方形結(jié)構(gòu)體。

這是Go的一種語法,但實際的作用或者為是什么這樣寫,我還沒有弄清楚,但是通過以上這個實實在在的例子,關(guān)于為什么返回值類型和實際返回的不一樣有了一定的理解。

補充:Go語言-結(jié)構(gòu)體和接口

結(jié)構(gòu)體和接口

接口嵌套

接口中允許嵌套其他接口,效果等同于復(fù)制被嵌套的接口中的方法

當前的接口中不允許有與嵌入的接口相同的方法

方法相同的接口相等同

接口不能為空,否則等同于空接口

結(jié)構(gòu)體嵌套

結(jié)構(gòu)體中的匿名成員內(nèi)的成員和方法會被嵌套到當前結(jié)構(gòu)體中

當前結(jié)構(gòu)體中允許有與被嵌套結(jié)構(gòu)體相同的成員和方法,且會覆蓋被嵌套的結(jié)構(gòu)體的成員和方法

兩個被嵌套的結(jié)構(gòu)體有相同的成員或方法,會發(fā)生沖突

有時候編輯器不會提示,但會產(chǎn)生運行時錯誤

成員名稱和類型完全相同的結(jié)構(gòu)體

如果其中一個是匿名的,可以直接賦值或判斷相等

類型名不同可以進行類型轉(zhuǎn)換,不可以直接賦值或判斷相等

方法的接收器只能是在當前包中指定名稱的類型,不能是原生類型、復(fù)合類型、其他包中的類型

重新命名的結(jié)構(gòu)體與原結(jié)構(gòu)體成員完全相同(包括tag),但是沒有原來的方法

接口實現(xiàn)

一個類型實現(xiàn)了接口的所有方法,就是實現(xiàn)了接口,不管類型和接口之間是否有關(guān)聯(lián)

方法的接收器可以是這個類型或者這個類型的指針類型

指針類型的接收器可以被修改成員

非指針類型的實例直接調(diào)用指針類型接收器的方法,會遇到無法調(diào)用指針方法,無法獲取地址的問題

指針類型的實例調(diào)用非指針類型接收器的方法不會出現(xiàn)問題

將實例賦值給變量再調(diào)用不會出現(xiàn)問題

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • Go語言之結(jié)構(gòu)體與方法
  • Go語言基礎(chǔ)語法之結(jié)構(gòu)體及方法詳解
  • go語言通過反射創(chuàng)建結(jié)構(gòu)體、賦值、并調(diào)用對應(yīng)的操作
  • go語言使用第三方包 json化結(jié)構(gòu)體操作示例
  • 關(guān)于Go 空結(jié)構(gòu)體的 3 種使用場景

標簽:雞西 蘭州 重慶 吐魯番 梅河口 汕頭 銅川 欽州

巨人網(wǎng)絡(luò)通訊聲明:本文標題《Go語言-為什么返回值為接口類型,卻返回結(jié)構(gòu)體》,本文關(guān)鍵詞  語言,為什么,返回,值,為,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Go語言-為什么返回值為接口類型,卻返回結(jié)構(gòu)體》相關(guān)的同類信息!
  • 本頁收集關(guān)于Go語言-為什么返回值為接口類型,卻返回結(jié)構(gòu)體的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 久久久久久久久毛片无码| 女人下部毛毛高清| 被老师摁在教室cao到爽| 国产精产国品一二三产区区别小说| 一级做aA片毛片久久久| 乳娘芸菲| 紧致1V1言情| 国产又黄又爽又湿的免费网站| 漂亮保姆5| 午夜精品福利在线观看| 欧美日韩精品视频一区二区在线观看| 卡一卡二卡三专区免费孩子| 女被c??扒衣服视频草莓视频| 欧美孕妇孕交无码Av免费| 综合欧美一区二区三区| 深夜男人影院| 国内精品大秀视频日韩精品| 91午夜剧场| tube8动漫91精品久久久久久| 好吊操这里只有| 老师撩起裙子让我捅| 我吸了小莹的乳液全文| 爰片久久毛片A片蜜AⅤ| 私人毛片免费高清影视院丶| 99久久精品免费看国产免费软件| 军区首长们的玩物n?p高H| 从玉女到欲女H| 亚洲欧美强伦一区二区另类| 公与媳中字HD中字在线观看 | 老师洗澡时我进去吃她的奶| 俄罗斯一级毛片在线播放| 第5章初尝云雨美妇| a国产精品| 女人与牲囗乱婬视频| 久久香蕉国产在产线看观看| 国产精品男moviesfree在线| 美女视频黄网站| 美女黄软件app下载安装| 星星动漫是未删减| 男女羞羞| 18av视频|