天天看點

Go——小白學習之函數一

對于函數之前我學習的也是囫囵吞棗,這次分類型再系統的學習一遍

函數定義就不說了,我們看一下嵌套函數

此函數無傳回值

Go——小白學習之函數一

有傳回值的嵌套函數

Go——小白學習之函數一

如果多個函數的傳參參數類型相同,傳回值相同,則可以定義這個函數類型的變量。如題

Go——小白學習之函數一

回調函數

Go——小白學習之函數一

此處引出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涉及到的定義

Go——小白學習之函數一

其中我不懂的調用接口時,強轉成handler的值為什麼是20,這道題懂了,差不多方法、函數以及接口的調用懂了一大半

回歸正題,在函數中我們還有一種類型,就是匿名函數:

Go——小白學習之函數一

特征就是由一個不帶函數名的函數聲明和函數體組成 ,func(a,b int,z float64)bool{ return a*b,匿名函數裡的值會影響外面的值,輸出結果為10,10    

Go——小白學習之函數一

兩種傳值方法

Go——小白學習之函數一

在寫這個函數時遇到了一個問題,就是如果我們定義一個變量作為接收傳回值的話,如果自動推導類型去定義,系統自動認為這個變量是函數類型變量,這就出現了二義性,是以如果出這種情況,我們推薦第一種寫法

匿名函數閉包一章寫不完呐,容我學學再寫