婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Go語言-為什么返回值為接口類型,卻返回結構體

Go語言-為什么返回值為接口類型,卻返回結構體

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

最近由于項目需求,閱讀一些Go語言編寫的項目的源代碼,在某一個函數中發現了一個奇怪的現象:一個函數的返回值類型聲明的是一個接口的類型,但是實際在函數體內返回的卻是一個結構體類型的對象。

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

一個結構體實現了一個接口,那么函數中返回值類型為接口時,就應該返回這個結構體。

下面舉一個例子來說明:

package main
import (
	"fmt"
)
/**
Shape接口定義兩個函數:
area() :計算面積
circumference() :計算周長
*/
type Shape interface {
	area() float64
	circumference() float64
}
//結構體正方形,屬性邊長
type square struct {
	length float64
}
//方法area,由正方形結構體實現
func (s square) area()  float64 {
	sarea := s.length * s.length
	return sarea
}
//方法circumference,由正方形結構體實現
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接口定義兩個函數:
area() :計算面積
circumference() :計算周長
*/
type Shape interface {
	area() float64
	circumference() float64
}
//結構體正方形,屬性邊長
type square struct {
	length float64
}
//方法area,由正方形結構體實現
func (s *square) area()  float64 {
	sarea := s.length * s.length
	return sarea
}
//方法circumference,由正方形結構體實現
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)
}

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

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

然后定義了一個正方形結構體,里面只有一個邊長屬性。

然后使用正方形結構體實現這個Shape接口

接著我們就可以進入正題,試驗我們標題的問題了,使用Shape接口類型作為返回值,但是在函數體內實際的返回值是正方形結構體。

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

補充:Go語言-結構體和接口

結構體和接口

接口嵌套

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

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

方法相同的接口相等同

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

結構體嵌套

結構體中的匿名成員內的成員和方法會被嵌套到當前結構體中

當前結構體中允許有與被嵌套結構體相同的成員和方法,且會覆蓋被嵌套的結構體的成員和方法

兩個被嵌套的結構體有相同的成員或方法,會發生沖突

有時候編輯器不會提示,但會產生運行時錯誤

成員名稱和類型完全相同的結構體

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

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

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

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

接口實現

一個類型實現了接口的所有方法,就是實現了接口,不管類型和接口之間是否有關聯

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

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

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

指針類型的實例調用非指針類型接收器的方法不會出現問題

將實例賦值給變量再調用不會出現問題

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

您可能感興趣的文章:
  • Go語言之結構體與方法
  • Go語言基礎語法之結構體及方法詳解
  • go語言通過反射創建結構體、賦值、并調用對應的操作
  • go語言使用第三方包 json化結構體操作示例
  • 關于Go 空結構體的 3 種使用場景

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

巨人網絡通訊聲明:本文標題《Go語言-為什么返回值為接口類型,卻返回結構體》,本文關鍵詞  語言,為什么,返回,值,為,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Go語言-為什么返回值為接口類型,卻返回結構體》相關的同類信息!
  • 本頁收集關于Go語言-為什么返回值為接口類型,卻返回結構體的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    蜜臀久久99精品久久久画质超高清| 亚洲国产婷婷综合在线精品| 久久成人av少妇免费| 欧美一三区三区四区免费在线看| 国精产品一区一区三区mba视频 | 26uuu精品一区二区| 99精品国产热久久91蜜凸| 亚洲靠逼com| 久久久久久**毛片大全| 欧美久久久一区| 不卡视频在线观看| 免费成人在线视频观看| 亚洲国产精品天堂| 亚洲久草在线视频| 国产欧美一区二区精品婷婷| 欧美一区二区久久| 欧美日韩精品二区第二页| 不卡视频一二三| 精品亚洲免费视频| 婷婷夜色潮精品综合在线| 欧美96一区二区免费视频| 亚洲1区2区3区视频| 亚洲精品videosex极品| 国产精品久久久久三级| 欧美不卡在线视频| 精品少妇一区二区三区日产乱码| 亚洲国产成人高清精品| 国产91精品露脸国语对白| 日本va欧美va瓶| 欧美理论在线播放| 欧美日韩国产综合一区二区三区| 91原创在线视频| 成人午夜激情在线| 国产a久久麻豆| 国产91在线观看| 国产精品自拍一区| 激情综合亚洲精品| 国产在线精品视频| 国产99久久久国产精品 | 蜜桃久久久久久| 精品一区二区三区久久| 国产一区高清在线| 国产精品久久久久婷婷| 亚洲国产精品黑人久久久| 久久97超碰国产精品超碰| 国产精品综合一区二区三区| 国产成人免费视频| 91一区二区三区在线观看| 欧美三级三级三级| 欧美精品粉嫩高潮一区二区| 欧美精品一区二区三区高清aⅴ | 欧美午夜一区二区三区免费大片| 在线播放91灌醉迷j高跟美女| 国产视频在线观看一区二区三区 | 成人黄色在线视频| 色综合天天综合网天天狠天天| 欧美日韩亚洲综合一区 | 久久99久久99小草精品免视看| 国产麻豆成人传媒免费观看| 国产成人av电影在线观看| 日本欧美大码aⅴ在线播放| 蜜臀av一区二区在线观看| 午夜精品福利一区二区蜜股av | 五月婷婷激情综合网| 色偷偷一区二区三区| 麻豆精品新av中文字幕| 精品日韩在线一区| 色婷婷精品久久二区二区蜜臂av | 欧美人妇做爰xxxⅹ性高电影| 精品一区二区免费看| www.久久久久久久久| 久久精子c满五个校花| 亚洲美女一区二区三区| 午夜视频在线观看一区二区 | 国产电影精品久久禁18| 日本高清无吗v一区| 国产呦萝稀缺另类资源| 欧美日韩国产系列| 欧美亚洲动漫制服丝袜| 制服丝袜亚洲播放| 欧美视频一区二区三区在线观看| 日本一区二区成人在线| 不卡一区在线观看| 亚洲精品一区二区三区在线观看| 91日韩精品一区| 亚洲免费av网站| 国产精品电影院| 国产精品美日韩| 成人欧美一区二区三区白人 | 日韩精品一区第一页| 中国色在线观看另类| 韩日av一区二区| 欧美一区二区三区四区高清| 日韩亚洲欧美综合| 日本不卡在线视频| 美国毛片一区二区| 91久久精品网| 欧美肥胖老妇做爰| 欧美久久一二三四区| 粉嫩av一区二区三区| 日韩黄色免费电影| 精品中文字幕一区二区小辣椒| 国产精品久久久久久久久免费樱桃| 国产精品久久久久久久午夜片| 亚洲青青青在线视频| 99re视频这里只有精品| 91激情五月电影| 亚洲一级在线观看| 日韩不卡在线观看日韩不卡视频| 67194成人在线观看| 国产日产欧美一区二区视频| 中文字幕综合网| 青草av.久久免费一区| 国内国产精品久久| 午夜欧美在线一二页| 精品系列免费在线观看| 粉嫩av一区二区三区粉嫩| 中文字幕高清不卡| 午夜欧美在线一二页| 久久久噜噜噜久久人人看| 亚洲精品国产视频| 欧美精品在线一区二区| 久久精品人人爽人人爽| 97se亚洲国产综合在线| 国产成人精品三级| 一区二区三区免费在线观看| 欧美日韩一区三区| 中文字幕av一区二区三区| 99久久99久久久精品齐齐| 欧美日本在线播放| 国产成人在线视频网站| 欧美日韩www| 成人手机在线视频| 国产精品自在在线| 亚洲h精品动漫在线观看| 精品国产不卡一区二区三区| 亚洲一区二区欧美激情| 久久精品夜色噜噜亚洲a∨| 亚洲一级二级三级在线免费观看| 欧美一级黄色大片| 亚洲老妇xxxxxx| 国产欧美日韩在线看| 亚洲欧洲国产日韩| 久久一夜天堂av一区二区三区| 色综合天天天天做夜夜夜夜做| 欧美xxxxxxxx| 91玉足脚交白嫩脚丫在线播放| 精品美女被调教视频大全网站| 成人天堂资源www在线| 精品入口麻豆88视频| 欧美日韩视频第一区| 欧美久久婷婷综合色| 成人精品gif动图一区| 美女免费视频一区| 777a∨成人精品桃花网| 不卡大黄网站免费看| 国产午夜精品理论片a级大结局 | 欧美一区二区三区在线看| 99久久综合国产精品| 欧美精品一区男女天堂| 99久久国产免费看| 一二三区精品福利视频| 日韩视频一区二区三区| 日韩美女天天操| 日韩制服丝袜av| 麻豆精品在线播放| 亚洲精选免费视频| 成人一级片网址| 久久久久国产一区二区三区四区| 久久99精品视频| 日韩欧美的一区| 51精品国自产在线| 精品一区二区三区在线观看国产| 亚洲精品高清视频在线观看| 欧美激情艳妇裸体舞| 麻豆精品精品国产自在97香蕉| 日韩av二区在线播放| 日韩一区二区精品在线观看| 91黄视频在线| 夜夜嗨av一区二区三区中文字幕 | 亚洲三级视频在线观看| 欧美另类变人与禽xxxxx| 欧美视频日韩视频| 亚洲午夜精品一区二区三区他趣| 亚洲激情图片qvod| 精品国产区一区| 国产在线看一区| 色综合天天视频在线观看 | 日韩国产欧美三级| 欧美一区二区在线不卡| 欧美日韩中文字幕一区| 亚洲bt欧美bt精品| 美腿丝袜一区二区三区| 午夜av区久久| 久久―日本道色综合久久| 国产亚洲一区二区三区在线观看| 久久国产婷婷国产香蕉| 精品免费视频.| 欧美电影免费观看高清完整版在线 | 亚洲色图都市小说|