對于函數之前我學習的也是囫囵吞棗,這次分類型再系統的學習一遍
函數定義就不說了,我們看一下嵌套函數
此函數無傳回值

有傳回值的嵌套函數
如果多個函數的傳參參數類型相同,傳回值相同,則可以定義這個函數類型的變量。如題
回調函數
此處引出type的幾種使用(摘自
tzs919的部落格)
(1)定義結構體
type student struct{
name string
age int
}
func main(){
p:=student{
name:"mike", //不要忘記逗号和冒号
age 10,
(2)類型等價定義,相當于類型重命名
type Mystring string
(3)type絕不隻是用于定義一系列的别名,還可以針對新類型定義方法。
type name string
func (n name) len() int {
return len(n)
func main() {
var myname name = "taozs" //其實就是字元串類型
l := []byte(myname) //字元串轉位元組數組
fmt.Println(len(l)) //位元組長度
fmt.Println(myname.len()) //調用對象的方法
(4)定義接口
type newtype intenrface{ //定義newtype 的一個接口,main函數隻要定義一個此接口的變量就能調用旗下的函數
cacl() //函數名稱,如果有參數有傳回值的話需要寫上
(5)定義函數類型
type handler func(name string) int //定義一個 func(name string) int 的變量為handler
下題出現了type涉及到的定義
其中我不懂的調用接口時,強轉成handler的值為什麼是20,這道題懂了,差不多方法、函數以及接口的調用懂了一大半
回歸正題,在函數中我們還有一種類型,就是匿名函數:
特征就是由一個不帶函數名的函數聲明和函數體組成 ,func(a,b int,z float64)bool{ return a*b,匿名函數裡的值會影響外面的值,輸出結果為10,10
兩種傳值方法
在寫這個函數時遇到了一個問題,就是如果我們定義一個變量作為接收傳回值的話,如果自動推導類型去定義,系統自動認為這個變量是函數類型變量,這就出現了二義性,是以如果出這種情況,我們推薦第一種寫法
匿名函數閉包一章寫不完呐,容我學學再寫