Go語言學習筆記七: 函數

來源:互聯網
上載者:User

標籤:return   命名   就是   屬性   www.   表達   method   parameter   result   

Go語言學習筆記七: 函數

Go語言有函數還有方法,神奇不。這有點像python了。

函數定義
func function_name( [parameter list] ) [return_types] {   函數體}

舉個例子:

/* 函數返回兩個數的最大值 */func max(num1, num2 int) int {   /* 聲明局部變數 */   var result int   if (num1 > num2) {      result = num1   } else {      result = num2   }   return result }
函數調用
var a int = 1var b int = 2var c intc = max(a, b)
函數可以返回多個值
func swap(x, y string) (string, string) {   return y, x}func main() {    a, b := swap("hello", "kris")    fmt.Println(a, b)}

是不是有點像python.

值傳遞

傳遞是指在調用函數時將實際參數複製一份傳遞到函數中,這樣在函數中如果對參數進行修改,將不會影響到實際參數。

基礎類型都是值傳遞,地球人都知道。

引用傳遞

引用傳遞是指在調用函數時將實際參數的地址傳遞到函數中,那麼在函數中對參數所進行的修改,將影響到實際參數。

func swap(x *int, y *int) {   var temp int   temp = *x    /* 保持 x 地址上的值 */   *x = *y      /* 將 y 值賦給 x */   *y = temp    /* 將 temp 值賦給 y */}

天呀,我感覺自己又回到了上學時代。(感覺自己好年輕)

函數作為值

Go 語言可以很靈活的建立函數,並作為值使用。

func main(){   /* 聲明函數變數 */   getSquareRoot := func(x float64) float64 {      return math.Sqrt(x)   }   /* 使用函數 */   fmt.Println(getSquareRoot(9))}

是不是感覺像javascript語言。

閉包

Go 語言支援匿名函數,可作為閉包。匿名函數是一個"內聯"語句或運算式。匿名函數的優越性在於可以直接使用函數內的變數,不必申明。

func getSequence() func() int {    i := 0    return func() int {        i += 1        return i    }}func main() {    next := getSequence()    fmt.Println(next())    fmt.Println(next())}

這個寫法太。。。完美(真趕時髦)。我猜 func() int是閉包的傳回值。

方法

Go 語言中同時有函數和方法。一個方法就是一個包含了接受者的函數,接受者可以是命名類型或者結構體類型的一個值或者是一個指標。所有給定類型的方法屬於該類型的方法集。

func (variable_name variable_data_type) function_name() [return_type]{   /* 函數體*/}

舉個例子:

/* 定義結構體 */type Circle struct {  radius float64}func main() {  var c1 Circle  c1.radius = 10.00  fmt.Println("Area of Circle(c1) = ", c1.getArea())}//該 method 屬於 Circle 類型對象中的方法func (c Circle) getArea() float64 {  //c.radius 即為 Circle 類型對象中的屬性  return 3.14 * c.radius * c.radius}

感覺寫法很彆扭,Circle給我的感覺就是一個Java的類,而getArea()是這個類的方法。估計只要在函數前面加上(c Circle)的都是屬於c的方法。

此系列其他文章地址

https://github.com/zhangqunshi/golang_study

參考: http://www.runoob.com/go/go-method.html

Go語言學習筆記七: 函數

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.