1. 程式人生 > >Go語言入門教程(十)之函式

Go語言入門教程(十)之函式

Hello 各位小夥伴大家好,我是小棧君,假期一眨眼就過去了。不知道大家玩的是否開心呢?

上次我們講到了關於Go語言的流程控制,小棧君也希望小夥伴跟著小棧君一步一個腳印的敲一下程式碼,相互進步。本期我們要分享的Go語言系列之函式。

一、什麼是函式?

函式是指一段在一起的、可以做某一件事兒的程式。也叫做子程式、(OOP中)方法。

一個較大的程式一般應分為若干個程式塊,每一個模組用來實現一個特定的功能。所有的高階語言中都有子程式這個概念,用子程式實現模組的功能。

在C語言中,子程式的作用是由一個主函式和若干個函式構成。由主函式呼叫其他函式,其他函式也可以互相呼叫。同一個函式可以被一個或多個函式呼叫任意多次。

在程式設計中,常將一些常用的功能模組編寫成函式,放在函式庫中供公共選用。要善於利用函式,以減少重複編寫程式段的工作量

二、函式之函式定義

所以綜上所述我們可以知道函式構成程式碼執行的邏輯結構。在Go語言中,函式的基本組成為:關鍵字func、函式名、引數列表、返回值、函式體和返回語句。

所以函式的通用格式如下:

函式定義說明:

func:函式由關鍵字 func 開始宣告

funcName:函式名稱,根據約定,函式名首字母小寫即為private,大寫即為public ,注意之前小棧君提醒過各位,在go語言中是區分大小寫的。所以這裡的add是僅本類中使用。

引數列表:函式可以有0個或多個引數,引數格式為:變數名 型別,如果有多個引數通過逗號分隔,不支援預設引數

返回型別:
① 上面返回值聲明瞭兩個變數名d和e、f、err(命名返回引數),這個不是必須,可以只有型別沒有變數名
② 如果只有一個返回值且不宣告返回值變數,那麼你可以省略,包括返回值的括號
③ 如果沒有返回值,那麼就直接省略最後的返回資訊
④ 如果有返回值, 那麼必須在函式的內部新增return語句

三、函式之自定義函式

在所有的程式設計中我們都避免不了自定義函式也稱之為方法。以此來確保我們業務的順利進行,自定義函式的好處就是可以複用,避免程式碼臃腫,邏輯混亂,提高程式碼的閱讀性。

所以在go語言的自定義函式中我們可以分為以下幾個種類,無參無返回值、有參無返回值、無參有返回值、有參有返回值這幾種。

無參無返回值

func Test() { //無參無返回值函式定義
        fmt.Println("hello  i am itCarry")
}

func main() {
        Test() //無參無返回值函式呼叫
}

有參無返回值

func Test01(a int, b int) { //方式1
        fmt.Printf("a = %d, b = %d\n", a, b)
}

func Test02(a, b int) { //方式2, v1, v2都是int型別
        fmt.Printf("a = %d, b = %d\n", a, b)
}

func main() {
        Test01(10, 20) //函式呼叫
        Test02(11, 22) //函式呼叫
}

不定引數列表

所謂的不定引數列表就是指傳參的個數不確定,有可能是一個或多個,所以為了滿足這點我們需要將傳參設定為不定引數,和其他程式語言一樣,我們這裡用三個點表示(即...),記住要用英文的哦。

知識點:形如...type格式的型別只能作為函式的引數型別存在,並且必須是最後一個引數

func Test(args ...int) {
for _, n := range args { //遍歷引數列表
fmt.Println(n)
}
}

func main() {
//函式呼叫,可傳0到多個引數
Test()
Test(1)
Test(1, 2, 3, 4)
}

四、函式之不定引數傳遞

// 定義函式 一
func MyFunc01(args ...int) {
fmt.Println("MyFunc01")
for _, n := range args { //遍歷引數列表
    fmt.Println(n)
        }
}
// 定義函式 二
func MyFunc02(args ...int) {
fmt.Println("MyFunc02")
for _, n := range args { //遍歷引數列表
    fmt.Println(n)
}
}
// 定義函式 三
func Test(args ...int) {
        MyFunc01(args...)     //按原樣傳遞, Test()的引數原封不動傳遞給MyFunc01
        MyFunc02(args[1:]...) //Test()引數列表中,第1個引數及以後的引數傳遞給MyFunc02 
// PS: 這裡運用了一個之後的知識點 就是關於Go語言的切片
}
// 呼叫函式 三
func main() {
        Test(1, 2, 3) //函式呼叫
}

所以我們也是可以看到函式中可以呼叫函式,構成新的函式。所以我們只要妥善處理好函式之間的關係我們就可以構建出高效率、高質量、高可用的程式碼啦。

好啦,今天的分享就到這裡了,對於這一方面還需要各位小夥伴下來後好好琢磨一下。


往期精彩回顧

Go語言入門教程(一)
Go語言入門教程(二)
Go語言入門教程(三)
Go語言系列教程(四)
Go語言系列教程(五)
Go語言系列教程(六)

這裡每天會分享包含java,go,Python,大資料,人工智慧的相關乾貨,我們一起提高,一起進步。我是小棧君,我們明天再見,拜了個拜。

相關推薦

Go語言入門教程()函式

Hello 各位小夥伴大家好,我是小棧君,假期一眨眼就過去了。不知道大家玩的是否開心呢? 上次我們講到了關於Go語言的流程控制,小棧君也希望小夥伴跟著小棧君一步一個腳印的敲一下程式碼,相互進步。本期我們要分享的Go語言系列之函式。 一、什麼是函式? 函式是指一段在一起的、可以做某一件事兒的程式。也叫做子程式、

Go語言入門教程(一)

原創: IT乾貨棧 Hello,各位小夥伴大家好,我是小棧君,昨天講了關於go語言的函式的定義和自定函式的部分種類,我們今天接著上期所講的內容繼續進行分享。 一、函式之無參有返回值 有返回值的函式,必須有明確的終止語句,否則會引發編譯錯誤。所以在有返回值的函式中需要使用關鍵字 return 。 他可以是一

Go語言入門教程系列——函式、迴圈與分支

本文始發於個人公眾號:**TechFlow**,原創不易,求個關注 今天是Golang專題的第四篇,這一篇文章將會介紹golang當中的函式、迴圈以及選擇判斷的具體用法。 函式 在之前的文章當中其實我們已經接觸過函數了,因為我們寫的main函式本質上也是一個函式。只不過由於main函式沒有返回值,也

Go語言入門系列(六)再探函式

[Go語言入門系列](https://mp.weixin.qq.com/mp/appmsgalbum?action=getalbum&album_id=1441283546689404928)前面的文章: - [Go語言入門系列(三)之陣列和切片](https://mp.weixin.qq.com/

Go語言學習筆記()切片

-h 種類 一個 fmt advance 小練習 輸出 程序 otto 15.切片 切片是基於數組類型做的一層封裝。它非常靈活,可以自動擴容。 切片的定義 1: var a []int // 定義一個int類型的空切片// 切片不初始化是無法操作的,這點和數組不一樣。

2017年Go語言入門教程-徐培成-專題視訊課程

2017年Go語言入門教程—3763人已學習 課程介紹        Go語言入門教程,只要你懂中文都可以看的懂本套教程,為任何想學習Go語言研製的教程。課程收益    讓任何人都可以輕鬆掌握Go語言,你可以不用看任何書籍,用最短的時間快速學會Go語言。講師介紹    徐培成

Go語言入門教程(三)在Ubuntu上使用Eclipse開發Go

說明 這裡假設您已經安裝了JDK,如果沒有,請自行安裝。 一、安裝eclipse 下載Eclipse 首先,請到官方網站下載Eclipse,推薦下載完成安裝包,Gavin下載的是eclipse-java-oxygen-R-linux-gtk-x8

Go語言入門教程(一)Linux下安裝Go

說明 Gavin使用的系統是Ubuntu。 關於安裝 這裡只介紹原始碼安裝,至於使用包管理工具安裝,不再介紹,因為就一條命令,沒得說。 下載安裝包 當前官方下載地址是https://g

Go語言入門教程(五)

Go語言系列教程(五) 原創: IT小棧君 Hello,各位小夥伴,大家好,我是小棧君,馬上就是我們偉大祖國的70華誕了,所以在

golang | Go語言入門教程——結構體初始化與繼承

本文始發於個人公眾號:**TechFlow**,原創不易,求個關注 今天是golang專題第10篇文章,我們繼續來看golang當中的面向物件部分。 在上一篇文章當中我們一起學習了怎麼建立一個結構體,以及怎麼給結構體定義函式,還有函式接收者的使用。今天我們來學習一下結構體本身的一些使用方法。 初始化 在

Go語言入門系列(五)指標和結構體的使用

[Go語言入門系列](https://mp.weixin.qq.com/mp/appmsgalbum?action=getalbum&album_id=1441283546689404928)前面的文章: - [Go語言入門系列(二)之基礎語法總結](https://mp.weixin.qq.com

C語言入門八)指標、字串、函式

如何利用指標運算元組 int ages[3] = {1, 3 , 5}; ages[0] = 998; printf("ages[0] = %i\n", ages[0]); int *p = ages; // int *p = &a

Go語言【第篇】:Go數據結構:指針

如何 import 占位符 函數傳遞 markdown 數組 pack 它的 數據結構 Go語言指針 Go語言中指針是很容易學習的,Go語言中使用指針可以更簡單的執行一些任務。我們都知道變量是一種使用方便的占位符,用於引用計算機內存地址。Go語言的取地址符是 &,放

C語言入門九)結構體

太晚了(11點半了),明天繼續結構體 陣列: 是用於儲存一組相同型別的資料 結構體: 是用於儲存一組不同型別的資料 // 1.定義結構體型別 struct Person { // char name[20]; char *name;

C語言入門七)指標的基本概念

如何定義指標變數      普通變數:      資料型別 變數名稱;            指標變數:  &nb

C語言入門六)字串

字串的基本概念 如何定義字串變數, 由於字串是同一種類型的資料組成,  並且是有序的。 而陣列就是用於儲存很多同一種類型的有序資料, 所以可以使用陣列來儲存字串。 注意: 字串變數和普通的字元陣列有一定的區別。 C語言規定, 字串必須以\0結尾(作為字串的結束符號), 所以

大資料入門教程系列Hive內建函式及自定義函式

本篇文章主要介紹Hive內建函式以及自定義UDF函式和UDFT函式,自定義UDF函式通過一個國際轉換中文的例子說明。 操作步驟: ①、準備資料和環境 ②、演示Hive內建函式 ③、自定義UDF函式編寫、演示   詳細步驟: 一、準備資料和

Go語言學習筆記(一)指標

16 指標 變數和記憶體地址 1.每個變數都有記憶體地址,可以說通過變數來操作對應大小的記憶體,&符號可以獲取變數的地址 1: var a int32 2: a = 100 3: fmt.Printf("%d\n", a) 4: fmt.Printf("%p\n", &a)

Go語言學習筆記(二)Map型別

17.Map型別 Map 是一種無序的鍵值對的集合。Map 最重要的一點是通過 key 來快速檢索資料,key 類似於索引,指向資料的值。 Map 是一種集合,所以我們可以像迭代陣列和切片那樣迭代它。不過,Map 是無序的,我們無法決定它的返回順序,這是因為 Map 是使用 hash 表來實現的。

Go語言學習筆記(四)介面型別

21.介面型別 介面型別是其他型別行為的概括與抽象。介面是一種抽象型別,它並沒有暴露了基於這個精確佈局的內部操作。 1: type Humaner interface { 2: SayHi() 3: } 介面命令習慣以er結尾介面只有方法宣告,沒有實現,沒有資料欄位介面可以匿名嵌入其他