最近由於專案需求,閱讀一些go語言編寫的專案的源**,在某乙個函式中發現了乙個奇怪的現象:乙個函式的返回值型別宣告的是乙個介面的型別,但是實際在函式體內返回的卻是乙個結構體型別的物件。這個現象對於新手的我來說很是費解。在經過一些資料的查閱之後,自己得到了如下的解釋:
乙個結構體實現了乙個介面,那麼函式中返回值型別為介面時,就應該返回這個結構體。
下面舉乙個例子來說明:
package main
import
("fmt"
)/**
shape介面定義兩個函式:
area(
) :計算面積
circumference(
) :計算周長
*/type shape inte***ce
//結構體正方形,屬性邊長
type square struct
//方法area,由正方形結構體實現
func (s square) area(
) float64
//方法circumference,由正方形結構體實現
func (s square) circumference(
) float64
func getarea(len float64) shape
fmt.println(
"正方形的面積為:",s.area(
)) fmt.println(
"正方形的周長為:",s.circumference(
))return s
}func main(
)
或者另乙個版本:
package main
import
("fmt"
)/**
shape介面定義兩個函式:
area(
) :計算面積
circumference(
) :計算周長
*/type shape inte***ce
//結構體正方形,屬性邊長
type square struct
//方法area,由正方形結構體實現
func (s *square) area(
) float64
//方法circumference,由正方形結構體實現
func (s *square) circumference(
) float64
func getarea(len float64) shape
fmt.println(
"正方形的面積為:",s.area(
)) fmt.println(
"正方形的周長為:",s.circumference(
))return s
}func main(
)
這兩個**的區別就是前者使用了值傳遞,後者使用了指標傳遞。由於這裡沒有改變結構體中的屬性值,所以兩種方法在這樣的應用場景下,沒有什麼區別,下面來解釋一下這些簡單的demo:
這是go的一種語法,但實際的作用或者為是什麼這樣寫,我還沒有弄清楚,但是通過以上這個實實在在的例子,關於為什麼返回值型別和實際返回的不一樣有了一定的理解。
函式返回值為指標型別
char getstring void void main void 在函式getstring 中定義的變數p屬於local 區域性變數 當函式結束時自動消失,所以在返回時,根本就得不到p所指的內容。解決辦法有以下幾種 可能還有很多方法,不過這裡只是最常見的幾中,也是最能體表現程式中記憶體使用的情況...
C語言函式返回值為指標和函式返回值為void
有時遇到函式返回值為空和函式返回值為指標的情況下,需要在前面定義該函式 函式的返回值為指標也必須在此定義,函式的返回值為void必須在此定義,返回值是整形或者其他基本型別不需要在此定義 函式功能 把格式化的資料寫入某個字串 函式原型 int sprintf char buffer,const cha...
spring mvc返回值型別
spring mvc處理方法支援如下的返回方式 modelandview,model,modelmap,map,view,string,void。下面一一進行說明 返回的邏輯檢視名是 demo message 通過modelandview構造方法可以指定返回的頁面名稱,也可以通過setviewnam...