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

Go語言入門教程(十一)

原創: IT乾貨棧

Hello,各位小夥伴大家好,我是小棧君,昨天講了關於go語言的函式的定義和自定函式的部分種類,我們今天接著上期所講的內容繼續進行分享。

一、函式之無參有返回值

有返回值的函式,必須有明確的終止語句,否則會引發編譯錯誤。所以在有返回值的函式中需要使用關鍵字 return 。

他可以是一個或者多個返回值。官方建議:最好命名返回值,因為不命名返回值,雖然使得程式碼更加簡潔了,但是會造成生成的文件可讀性差。

 //方式1
func Test01() int {
        return 250
}

 //方式2, 給返回值命名
func Test02() (a int) {
        a = 250
        return a
}
//方式3, 給返回值命名
func Test03() (value int) {
        value = 250
        return
}

func main() {
        v1 := Test01() //函式呼叫
        v2 := Test02() //函式呼叫
        v3 := Test03() //函式呼叫
        fmt.Printf("v1 = %d, v2 = %d, v3 = %d\n", v1, v2, v3)
}

有過程式設計經驗的小夥伴可能發現了,這樣的程式設計語法其實是和JavaScript相差不大的。

對於函式的呼叫或是定義都和其他語言有點區別,如果慢慢熟悉這種語法了,其實也會覺得go語言是一門很好的入門,且效能很高的語言型別。

為什麼會這麼說效能很高呢,因為go語言內建了效能測試包提供了很多三方庫進行協助我們對程式碼進行調優工作。

所以只要我們善於使用三方庫,善於學習,肯定會寫出高質量,高可用,高效能的程式碼啦。

二、函式之無參多個返回值

顧名思義,多個返回值就是利用Go語言處理程式後返回多個值,但在實戰開發的時候,我們一般是使用兩個返回值,一個是我們需要返回的處理後的結果,另一個就是錯誤err。方便我們進行異常處理。

//方式1
func Test01() (int, string) {
        return 520, "it乾貨棧"
}
 //方式2, 給返回值命名
func Test02() (a int, str string) {
        a = 520
        str = "it乾貨棧"
        return
}

func  main() {
        v1, v2 := Test01() //函式呼叫
        _, v3 := Test02()  //函式呼叫, 第一個返回值丟棄
        v4, _ := Test02()  //函式呼叫, 第二個返回值丟棄
        fmt.Printf("v1 = %d, v2 = %s, v3 = %s, v4 = %d\n", v1, v2, v3, v4)
}

三、函式之有參返回值

//求2個數的和差
func SumAndSubtract(num1 int, num2 int) (sun int, subtract int) {

        return num1 +num2 ,num1-num2
}

func main() {
        min, max := SumAndSubtract(33, 22)
        fmt.Printf("min = %d, max = %d\n", min, max) 
        //sum = 55, subtract = 11
}

四、函式之遞迴函式

遞迴指函式可以直接或間接的呼叫自身。遞迴函式通常有相同的結構:一個跳出條件和一個遞迴體。

所謂跳出條件就是根據傳入的引數判斷是否需要停止遞迴,而遞迴體則是函式自身所做的一些處理。在程式語言中特別是對於樹形結構中我們常常使用的是關於遞迴的操作。

我們現在來通過迴圈實現1+2+3……+100的相加求和例子

// 普通實現,利用迴圈進行累加
func Test01() int {
        i := 1
        sum := 0
        for i = 1; i <= 100; i++ {
                sum += i
        }

        return sum
}

//通過遞迴實現1+2+3……+100
func Test02(num int) int {
        if num == 1 {
                return 1
        }
        return num + Test02(num-1) //函式呼叫本身
}

//通過遞迴實現1+2+3……+100
func Test03(num int) int {
        if num == 100 {
                return 100
        }

        return num + Test03(num+1) //函式呼叫本身
}

func main() {
        fmt.Println(Test01())    //5050
        fmt.Println(Test02(100)) //5050
        fmt.Println(Test03(1))   //5050
}

我們用了三種方式來進行實現這個例子,一種是普通的for迴圈相加,我們在程式碼中已經定死了100的常數。

假如我們做成99的相加的話,那麼就得改程式碼,所以實用性不高。

另一種是關於進行傳參,我們傳入100作為最終的計算數字,如果我們想做成50的相加,那麼也只需要改變傳參,可用性較高。

最後用的是初始傳參,雖然是可以做為100以內的計算,但如果我們改成101的呢?

他是不是會一直計算下去導致記憶體溢位呢?所以我們在編寫程式碼的時候,也是需要大家能夠多想一下,畢竟這個也是需要經驗的積累的一個過程。

好了,今天的分享就到這裡啦,我們主要分享了一下關於go語言的無參,有參 和遞迴函式,下一期我們繼續分享關於go語言的函式型別。

我是小棧君,如果你喜歡我的分享,麻煩你點選一個好看,轉發或分享,當然也可以後臺私信給我哦。

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

相關推薦

Go語言入門教程()

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

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

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

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

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

Go語言學習筆記: 切片(slice)

操作 容量 方括號 一個 組類型 學習 中學 slice 修改 Go語言學習筆記十一: 切片(slice) 切片這個概念我是從python語言中學到的,當時感覺這個東西真的比較好用。不像java語言寫起來就比較繁瑣。不過我覺得未來java語法也會支持的。 定義切片 切片可以

Go語言開發()、Go語言常用標準庫

lena unix doc 計算 cmd.run ner rem 信息 前綴 Go語言開發(十一)、Go語言常用標準庫一 一、log 1、log模塊簡介 Go語言中log模塊用於在程序中輸出日誌。log模塊提供了三類日誌輸出接口,Print、Fatal和Panic。Prin

Go語言基礎()—— 實現命令列引數對資料的簡單查詢小案例

案例要求: 結合命令列引數、複合型別、包管理、排序等知識,寫一個商品管理系統 商品屬性包括:整型商品ID(gid)、字串型名稱(name)、整型類別(cid)、浮點型價格(price) 自己造一些假資料,實現如下功能: shop.exe -cmd single -gi

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

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

Django入門教程()資料庫ORM一對多

Django 模型是與資料庫相關的,與資料庫相關的程式碼一般寫在 models.py 中,Django 支援 sqlite3, MySQL等資料庫,只需要在settings.py中配置即可,不用更改models.py中的程式碼,豐富的API極大的方便了使用。 D

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

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

【QT】QT從零入門教程():QT自定義視窗

  首先是借鑑了網上的部落格,實現無邊框,自由拖動的自定義視窗效果。 #ifndef CUSTOMWINDOW_H #define CUSTOMWINDOW_H #include <QtGui> #include <QtWidg

GO 語言 新手教程) 基礎語法

GO 語言結構 package main //定義了包名, 必須在原始檔中非註釋的第一行指明這個檔案屬於哪個包 //package main表示一個可獨立執行的程式,每個 Go 應用程式都包含一個名為 main 的包 import "fmt

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

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

Scrapy爬蟲入門教程 Request和Response(請求和響應)

開發環境: Python 3.6.0 版本 (當前最新) Scrapy 1.3.2 版本 (當前最新) 目錄 請求和響應 請求子類 響應物件 響應子類 請求和響應 Scrapy的

RabbitMQ入門教程():訊息屬性Properties

簡介 傳送訊息可以為訊息指定一些引數 Delivery mode: 是否持久化,1 - Non-persistent,2 - Persistent Headers:Headers can have

Java入門教程(異常處理)

在程式設計和執行的過程中,發生錯誤是不可避免的。儘管 Java 語言的設計從根本上提供了便於寫出整潔、安全程式碼的方法,並且程式設計師也儘量地減少錯誤的產生,但是使程式被迫停止的錯誤的存在仍然不可避免。為此,Java 提供了異常處理機制來幫助程式設計師檢查可能出現的錯誤,以保證程式的可讀性和可維護性 異常(E

Spring Cloud 入門教程(): 斷路器聚合監控(Hystrix Turbine)(Greenwich.RELEASE)

參考網址:https://blog.csdn.net/forezp/article/details/81041125 一、準備工

Go語言入門教程(五)

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

【原創】go語言學習()package簡介

目錄 Go原始碼組織方式 main函式和main包 編譯命令 自定義包 init函式以及執行行順序 _識別符號 Go原始碼組織方式 1、 Go通過package的方式來組織原始碼 package 包名   注意:任何一個原始碼都屬於一個包   作用:程式碼複用和可讀性 2、可執行程式的包名必須為ma

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

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

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

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