Go語言-函數(shù)func,方法method

函數(shù)屬于包,通過包調(diào)用函數(shù)。方法屬于結(jié)構(gòu)體,通過結(jié)構(gòu)體變量調(diào)用
如果方法的修改內(nèi)容需要調(diào)用者跟隨變化,接收者使用指針

函數(shù)不支持重載,嵌套和默認(rèn)參數(shù)
一個指針類型擁有它以及它的基底類型為接收者類型的所有方法,而它的基底類型卻只能擁有以它本身為接收者類型的方法

一.函數(shù)的定義

  • 1 表達(dá)式作為返回值
func minus(a int,b int) int{
    return  a-b
}
  • 2 定義變量接收返回值
func minus(a int,b int) int{
    result:=a-b
    return  result
}
  • 3 在函數(shù)定義時定義接收變量
func minus(a int,b int) (result int){
    result=a-b
    return
}
  • 4.不定參函數(shù)...
func minus(args ...int){
//1.
    //for i := 0; i < len(args); i++ {
       // fmt.Println("下標(biāo)",i,"值",args[i])
    result:=0
        for i := 0; i < len(args); i++ {
            result+=args[i]
    }
//第2種for循環(huán)
      for _,data:=range args{
        result+=data
    }
    fmt.Println(result)
}
func main() {
    minus(1,2,3)
    minus(1)
}

不定參函數(shù)傳遞它的不定參給函數(shù)時,傳遞方式為a[0:]...(傳遞所有參數(shù)),a[:3]...(從0開始傳遞到第3位(不含第3位))

二.函數(shù)的類型

  • 1 無參有返回值.
func minus()(a,b,c int){
    a,b,c=1,2,3
    return
}
func main() {
//函數(shù)的返回值可以為主調(diào)函數(shù)賦值,可以通過返回值改變實參數(shù)據(jù)
a,b,c:=minus()
fmt.Println(a,b,c)
}
  • 2 type自定義函數(shù)類型
package main

import "fmt"

func test1(){
    fmt.Println("hello")
}
func test2(a int, b int)  {
    fmt.Println(a+b)
}
func test3(){
    fmt.Println("你好")
}
//type定義函數(shù)類型
type NULL func()
type YOU func(int,int)
func main() {
    //定義函數(shù)類型變量
    var f NULL
     f= test1
     //通過函數(shù)變量調(diào)用函數(shù)
     f()
     var f1 YOU
     f1=test2
     f1(10,20)
     //相同類型函數(shù),無需再次定義函數(shù)類型
     f2:=test3
     f2()
}
  1. defer函數(shù)屬延遲執(zhí)行,延遲到調(diào)用者函數(shù)執(zhí)行 return 命令前被執(zhí)行。多個defer之間按LIFO先進(jìn)后出順序執(zhí)行。通常用于釋放資源
  2. Go中可以拋出一個panic的異常,然后在defer中通過recover捕獲這個異常,然后正常處理。
  3. 如果同時有多defer,那么異常會被最近的recover()捕獲并正常處理。
    4.無參匿名函數(shù)可以簡寫,如
    {fmt.Println("hello")}

三、閉包

func test() func() int {
    var a int
    return func() int {
        a++
        return a * a
    }
}
func main() {
    f := test()
    fmt.Println(f())      //1
    fmt.Println(f())      //4
    fmt.Println(f())     //9
    fmt.Println(f())     //16
    fmt.Println(f())     //25
}
    a := 10
    str := "lucy"
    func() {
        a = 666
        str = "go"
        fmt.Println(a, str)   //666,"go"
    }()
    fmt.Println(a, str)          //666,"go"

4. 擴(kuò)展方法

type A int

func (a *A) print()  {
    fmt.Println("A")
}

func main() {
    var a A
    a.print()  //Method Value
    (*A).print(&a) //Method Expressions
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 函數(shù) Go語言函數(shù)格式func 函數(shù)名稱(形參列表)(返回值列表){函數(shù)語句} Go語言函數(shù)的類型沒有返回值沒有形...
    喝酸奶要舔蓋__閱讀 438評論 0 0
  • Lua 5.1 參考手冊 by Roberto Ierusalimschy, Luiz Henrique de F...
    蘇黎九歌閱讀 14,235評論 0 38
  • 這篇文章用來記錄我碰到的一些有意思的小問題??赡懿⒉桓呱?。但是一定會比較有意思。并且會持續(xù)更新。(?????) 從...
    繾綣一時閱讀 395評論 0 1
  • 文/鴻運(yùn) 雨凋殘香盡 風(fēng)落葉枝頭 一片紅,一片黃 霜露似淚流 蟬鳴哀曲起 蛙叫幾時休 一聲笛,一聲簫 呆窗幾多愁 ...
    HONGYUNDANGTOU閱讀 257評論 0 1
  • 明清時期,遼南地區(qū)的古文化經(jīng)過近千年曲折發(fā)育期之后,終于進(jìn)入比較穩(wěn)定發(fā)展時期,在文化上重新與中原接軌,教育蔚興、文...
    云風(fēng)景閱讀 2,385評論 2 1

友情鏈接更多精彩內(nèi)容