亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

一文了解Go語(yǔ)言中的函數(shù)與方法的用法

 更新時(shí)間:2022年07月05日 10:29:46   作者:孫琦Ray  
與大部分語(yǔ)言一致,Go語(yǔ)言中的函數(shù)與方法定義與其他語(yǔ)言基本一致,但也有一定的差別。本文將通過(guò)示例詳細(xì)講講Go語(yǔ)言中函數(shù)與方法的用法,感興趣的可以學(xué)習(xí)一下

函數(shù)定義語(yǔ)法

與大部分語(yǔ)言一致,Go語(yǔ)言中的函數(shù)定義與其他語(yǔ)言基本一致

func function_name(Parameter-list) {
    // function body...
}

func function_name(Parameter-list) Return-Type {
    // function body...
}

func function_name(Parameter-list) (Multiple Return-Types){
    // function body..
}

func: 函數(shù)定義關(guān)鍵字

function_name: 函數(shù)名稱,Go語(yǔ)言主要使用camel-case(駝峰)命名的方式,還根據(jù)函數(shù)的性質(zhì),用首字母大小寫區(qū)分作用,具體會(huì)在后面專門的章節(jié)講解Go語(yǔ)言的規(guī)范

Parameter-list: 參數(shù)列表,如果沒(méi)有可以忽略

Return-Type/Multiple Return-Types: 返回值的類型,即return返回值的類型,這里特別將三種形式進(jìn)行了區(qū)分:

  • 無(wú)返回值/單一返回值/多返回值
  • 另外兩種的細(xì)小的區(qū)別在于括號(hào)的使用,單一返回類型一般不再添加括號(hào),而多返回值則需要添加括號(hào)
  • 另外為了美觀,參數(shù)列表后面的括號(hào),建議與返回類型之間有一個(gè)空格

函數(shù)定義示例

無(wú)返回值函數(shù)

func HelloFunc() {
    fmt.Println("Hello, World")
}

單一返回值函數(shù)

本示例中演示了參數(shù)定義方法和返回值類型定義方法

func HelloFunc(msg string) string {
    return "Hello, " + msg
}

多返回值函數(shù)

第二個(gè)返回值的類型通常用于回傳錯(cuò)誤,這樣方便程序進(jìn)行異常處理

func HelloFunc(msg string) (string, error) {
    return "Hello, " + msg, nil
}

我們?cè)賮?lái)看一下完整的代碼實(shí)現(xiàn),主函數(shù)中調(diào)用HelloFunc時(shí),也需要兩個(gè)變量接收相應(yīng)的值

package main

import "fmt"

func HelloFunc(msg string) (string, error) {
    return "Hello, " + msg, nil
}

func main() {
    printString, err := HelloFunc("World")
    if err == nil {
        fmt.Println(printString)
    }
}

方法(Method)定義

Go語(yǔ)言中并沒(méi)有類,所以在Go語(yǔ)言中提供了一種類似函數(shù)定義的方法定義,通過(guò)在函數(shù)名稱前增加Reciever類型,實(shí)現(xiàn)一種類似類中方法的定義,方法可以使用Reciver的屬性。我們來(lái)看一下語(yǔ)法:

func (Reciever-Name Type) function_name(Parameter-list) (Multiple Return-Types){
    // function body..
}

由于大部分定義內(nèi)容與上述函數(shù)定義相同,這里就不再贅述,只介紹一下新增的部分:

Reciever-Name:類型必須是自定義類型,不能是內(nèi)置的int, string等,使用的話,在編譯階段就會(huì)報(bào)錯(cuò)

方法(Method)示例

基本類型

我們來(lái)看一個(gè)通過(guò)基本類型實(shí)現(xiàn)的方法,這里使用到了一個(gè)未曾學(xué)習(xí)到的知識(shí)點(diǎn)——自定義類型type,后面還會(huì)詳細(xì)講解,不用在此處糾結(jié)。這句含義就是通過(guò)自定義類型mystring再次定義的變量,本質(zhì)上與string同一類型。

type mystring string

這里注意我們的函數(shù)定義,在函數(shù)名前,多了(msg mystring)的定義,而在函數(shù)體內(nèi),我們也可以直接使用msg

func (msg mystring) HelloFunc() {
    str := "Hello, " + msg
    fmt.Println(str)
}

而在main函數(shù)中進(jìn)行調(diào)用時(shí),與上面的函數(shù)調(diào)用不同,我們直接使用調(diào)用mymsg的方法HelloFunc,實(shí)現(xiàn)了與上面例子類似的方法

var mymsg mystring
mymsg = "World"
mymsg.HelloFunc()

完整代碼如下所示

package main

import "fmt"

type mystring string

func (msg mystring) HelloFunc() {
    str := "Hello, " + msg
    fmt.Println(str)
}

func main() {
    var mymsg mystring
    mymsg = "World"
    mymsg.HelloFunc()
}

結(jié)構(gòu)體類型

其實(shí)從各個(gè)項(xiàng)目的源代碼來(lái)看,方法還是更多的與結(jié)構(gòu)體(struct)和接口(interface)一起使用,這些都會(huì)在后面進(jìn)行詳細(xì)講解,這里只需要了解即可。這里介紹一個(gè)簡(jiǎn)單的例子,我們來(lái)計(jì)算長(zhǎng)方形的面積。

  • 定義了一個(gè)結(jié)構(gòu)體rect,其中包含長(zhǎng)和寬兩個(gè)屬性
  • 計(jì)算面積的方法area(),Reciver定義為結(jié)構(gòu)體類型,這樣方法體內(nèi),就可以使用長(zhǎng)和寬計(jì)算面積
  • 主函數(shù)中,定義了一個(gè)結(jié)構(gòu)體,并且初始化長(zhǎng)和寬分別為3和4
  • 調(diào)用自定義結(jié)構(gòu)體的r.area()完成面積計(jì)算
package main

import "fmt"

type rect struct {
    width float64
    height float64
}

func (r rect) area() float64 {
    return r.width * r.height
}

func main() {
    r := rect{3, 4}
    rectArea := r.area()
    fmt.Printf("Rect area is %v\n", rectArea)
}

到此這篇關(guān)于一文了解Go語(yǔ)言中的函數(shù)與方法的用法的文章就介紹到這了,更多相關(guān)Go語(yǔ)言 函數(shù) 方法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go語(yǔ)言變量創(chuàng)建的五種方法

    Go語(yǔ)言變量創(chuàng)建的五種方法

    這篇文章主要介紹了Go語(yǔ)言五種變量創(chuàng)建的方法,本文給大家提到了匿名變量的優(yōu)點(diǎn),通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2020-02-02
  • 深入理解go unsafe用法及注意事項(xiàng)

    深入理解go unsafe用法及注意事項(xiàng)

    go雖然是一種高級(jí)語(yǔ)言,但是也還是給開發(fā)者提供了指針的類型unsafe.Pointer,我們可以通過(guò)它來(lái)直接讀寫變量的內(nèi)存,本文來(lái)了解一下?unsafe?里所能提供的關(guān)于指針的一些功能,以及使用unsafe.Pointer的一些注意事項(xiàng)
    2024-01-01
  • golang 數(shù)組隨機(jī)排序的實(shí)現(xiàn)

    golang 數(shù)組隨機(jī)排序的實(shí)現(xiàn)

    本文主要介紹了golang 數(shù)組隨機(jī)排序的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • 深入了解Go語(yǔ)言中web框架的中間件運(yùn)行機(jī)制

    深入了解Go語(yǔ)言中web框架的中間件運(yùn)行機(jī)制

    大家在使用iris框架搭建web系統(tǒng)時(shí),一定會(huì)用到中間件。那么你了解中間件的運(yùn)行機(jī)制嗎?你知道為什么在iris和gin框架的請(qǐng)求處理函數(shù)中要加c.Next()函數(shù)嗎?本文就和大家一起探究該問(wèn)題的答案
    2023-02-02
  • go?mode?tidy出現(xiàn)報(bào)錯(cuò)go:?warning:?“all“?matched?no?packages的解決方法

    go?mode?tidy出現(xiàn)報(bào)錯(cuò)go:?warning:?“all“?matched?no?package

    使用go的時(shí)候我們一般都會(huì)使用go?mode管理,下面這篇文章主要給大家介紹了關(guān)于go?mode?tidy出現(xiàn)報(bào)錯(cuò)go:?warning:?“all“?matched?no?packages的解決方法,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • Go語(yǔ)言結(jié)構(gòu)化日志slog的用法解析

    Go語(yǔ)言結(jié)構(gòu)化日志slog的用法解析

    go?1.21.0?版本引入了一個(gè)新的包?log/slog,該包提供了結(jié)構(gòu)化日志的功能,本文小編就來(lái)和大家聊聊log/slog?包的使用,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-10-10
  • 一文帶你了解Go語(yǔ)言中的單元測(cè)試

    一文帶你了解Go語(yǔ)言中的單元測(cè)試

    寫過(guò)單元測(cè)試的開發(fā)人員應(yīng)該理解,單元測(cè)試最核心的價(jià)值是為了證明:為什么我寫的代碼是正確的?也就是從邏輯角度幫你檢查你的代碼。本文就來(lái)和大家詳細(xì)聊聊Go語(yǔ)言中的單元測(cè)試,需要的可以參考一下
    2022-07-07
  • golang Goroutine超時(shí)控制的實(shí)現(xiàn)

    golang Goroutine超時(shí)控制的實(shí)現(xiàn)

    日常開發(fā)中我們大概率會(huì)遇到超時(shí)控制的場(chǎng)景,比如一個(gè)批量耗時(shí)任務(wù)、網(wǎng)絡(luò)請(qǐng)求等,本文主要介紹了golang Goroutine超時(shí)控制的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-09-09
  • go?defer延遲調(diào)用的使用場(chǎng)景示例詳解

    go?defer延遲調(diào)用的使用場(chǎng)景示例詳解

    這篇文章主要為大家介紹了go?defer延遲調(diào)用的使用場(chǎng)景示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • Golang 刪除文件并遞歸刪除空目錄的操作

    Golang 刪除文件并遞歸刪除空目錄的操作

    這篇文章主要介紹了Golang 刪除文件并遞歸刪除空目錄的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04

最新評(píng)論