真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Go語言函數(shù)和指針的概念是什么

這篇文章主要介紹“Go語言函數(shù)和指針的概念是什么”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“Go語言函數(shù)和指針的概念是什么”文章能幫助大家解決問題。

為華陰等地區(qū)用戶提供了全套網(wǎng)頁設計制作服務,及華陰網(wǎng)站建設行業(yè)解決方案。主營業(yè)務為成都網(wǎng)站設計、成都做網(wǎng)站、華陰網(wǎng)站設計,以傳統(tǒng)方式定制建設網(wǎng)站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!

函數(shù)

函數(shù)就是一段基本的代碼塊,一般用來對需要重復執(zhí)行的代碼進行復用。在 go 中,函數(shù)是『一等公民』,這與 js  類似,也就是可以將函數(shù)當做一個變量進行傳遞。

函數(shù)聲明

由于是強類型語言,與 js 不同,在函數(shù)聲明的過程中,需要指定參數(shù)與返回值的類型。

func max (n1, n2 int) int {   var result int   if n1 >= n2 {     result = n1   }   if n1 < n2 {     result = n2   }   return result }

Go語言函數(shù)和指針的概念是什么

在聲明函數(shù)參數(shù)和類型的時候,與聲明變量類似,可以一次性指定多個參數(shù)的類型,也可以分別指定多個參數(shù)為不同類型。

func max (n1 int, n2 int) int {   …… }

如果函數(shù)返回值有多個,在指定返回類型的時候,需要指定每個返回值的類型。

func max (n1 int, n2 int) (error, int) {   ……   return errors.New(""), result }

上面的代碼,表示返回的時候需要返回兩個值,第一個值為 error 對象,用來表示執(zhí)行期間是否出現(xiàn)異常。這種方式也是 Node.js 中常見的  error-first callback 的寫法。

特殊函數(shù)

在 go 中,有兩個特殊函數(shù):main、init,這兩個函數(shù)聲明之后,一般不需要主動調(diào)用,會有自動執(zhí)行的機制。

 func main()

main 函數(shù)是 go 語言中默認的入口函數(shù),只能應用于 package main 中,如果在其他的 package 中不會執(zhí)行。main  函數(shù)有如下幾點需要注意:

  • 不能定義參數(shù);

  • 不能定義返回值;

  • 必須在 package main 中聲明;

 func init()

init 函數(shù)所有的包啟動的時候都會執(zhí)行,執(zhí)行時機比 main 函數(shù)早,與 main 函數(shù)一樣,不能定義參數(shù)和返回值。

package main  import "fmt"  func init() {  fmt.Println("執(zhí)行 init 函數(shù)\n") } func main() {  fmt.Println("執(zhí)行 main 函數(shù)\n") }

Go語言函數(shù)和指針的概念是什么

函數(shù)調(diào)用

函數(shù)的調(diào)用比較簡單,和其他編程語言類似,只需要將函數(shù)需要接受的參數(shù)傳入其中,在執(zhí)行結(jié)束后,就能得到對應的返回值。

// 定義 max 函數(shù) func max (n1, n2 int) int {   var result int   if n1 >= n2 {     result = n1   }   if n1 < n2 {     result = n2   }   return result }  func main () {  var result = max(5, 100)  fmt.Println("max return", result) }

Go語言函數(shù)和指針的概念是什么

匿名函數(shù)

匿名函數(shù)就是一個沒有定義函數(shù)名的函數(shù),匿名函數(shù)可以當成一個值,將其賦值放到某個變量中。這也是之前為什么說函數(shù)是『一等公民』,就是可以將函數(shù)當成一個變量。

var max = func (n1, n2 int) int {   var result int   if n1 >= n2 {     result = n1   }   if n1 < n2 {     result = n2   }   return result } var result = max(5, 100) fmt.Println("max return", result)

立即執(zhí)行函數(shù)

由于 go 中的函數(shù)是  『一等公民』,可以在聲明之后立即執(zhí)行,就是在函數(shù)聲明結(jié)束后,直接加上一個括號,表示該函數(shù)會立即執(zhí)行,執(zhí)行之后的結(jié)果可以通過變量進行接收。

import "math"  var Pi = func () float64 {   return math.Pi }()  fmt.Println("PI =",Pi)

Go語言函數(shù)和指針的概念是什么

閉包

“閉包就是能夠讀取其他函數(shù)內(nèi)部變量的函數(shù)。在本質(zhì)上,閉包是將函數(shù)內(nèi)部和函數(shù)外部連接起來的橋梁。 ——百度百科

上面的描述來自百度百科,初次看概念比較難理解,如果站在使用的角度來說,閉包就是在一個函數(shù)調(diào)用后,返回另一個匿名函數(shù),并保持當前函數(shù)內(nèi)的局部變量,可以給匿名函數(shù)引用。

下面我們可以簡單實現(xiàn)一個迭代器函數(shù),該函數(shù)接受一個切片,返回一個匿名函數(shù),該匿名函數(shù)每次執(zhí)行,都會取出切片的一個值,直到全部讀取。

func generate(slice []int) func() (bool, int) {  i := 0  length := len(slice)  return func () (bool, int) {   if i >= length {    return true, 0   }   var result = slice[i]   i++   return false, result  } }  func main() {  slice := []int{1, 2, 3, 4, 5}  nextNum := generate(slice)  done, result := nextNum()   // 直到 done 不等于 false,才停止  for done == false {   fmt.Println(result, done)   done, result = nextNum()  }   fmt.Println(result, done) }

Go語言函數(shù)和指針的概念是什么

Go語言函數(shù)和指針的概念是什么

指針

我們前面常說的變量指的一般是一個值,指針是指向該變量存儲在內(nèi)存的位置。指針也可以存儲在一個變量中,該變量稱為『指針變量』。

指針變量聲明

聲明指針變量時,需要指針指向哪一種類型,因為不同類型的值在內(nèi)存占用的空間大小不一樣,僅僅知道內(nèi)存地址還是不夠,還需要知道該變量在內(nèi)存中占用多大空間。聲明指針變量只需要在類型前,加上  * 即可。

var point *int // 聲明 int 類型的指針

指針變量賦值

給指針變量賦值,需要在對應類型的變量前加上&符號,表示取出該變量的地址。

var i = 1 var point *int point = &i

值傳遞與引用傳遞

一般情況下,我們傳入函數(shù)的參數(shù)僅為變量的值,這樣的傳遞被稱為值傳遞,在函數(shù)內(nèi)對參數(shù)修改也不會影響到外部變量。

func addOne(slice []int, number int) {  slice = append(slice, number)  fmt.Println("inner slice =",  slice) }  slice := []int{1, 2, 3} addOne(slice, 100) fmt.Println("outer slice =",  slice)

上述代碼中,我們寫了一個函數(shù),會對傳入的切片追加一個值,調(diào)用之后,我們會發(fā)現(xiàn)外部切片的值并沒有發(fā)生變量。

Go語言函數(shù)和指針的概念是什么

如果需要外部變量的值會跟隨函數(shù)調(diào)用發(fā)生變化,就需要將變量的指針傳入函數(shù)中,這樣的傳遞被稱為引用傳遞。這樣在函數(shù)中修改參數(shù)就會影響到外部的變量了。

// 此時 slice 為指針變量 func addOne(slice *[]int, number int) {   // 通過 *slice 可以取出 slice 指針對應的值  *slice = append(*slice, number)  fmt.Println("inner slice =",  *slice) }  slice := []int{1, 2, 3} addOne(&slice, 100) fmt.Println("outer slice =",  slice)

Go語言函數(shù)和指針的概念是什么

Go語言函數(shù)和指針的概念是什么

關于“Go語言函數(shù)和指針的概念是什么”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識,可以關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,小編每天都會為大家更新不同的知識點。


新聞標題:Go語言函數(shù)和指針的概念是什么
分享地址:http://weahome.cn/article/pssjhj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部