第十课 go语言函数

1 内置函数

  len() 函数可以接受不同类型参数并返回该类型的长度

  如果我们传入的是字符串则返回字符串的长度

  如果传入的是数组,则返回数组中包含的元素个数

2  自定义函数

// 函数返回单个值
func Max(a, b int) int {
    if a > b {
        return a
    } else {
        return b
    }
}

// 函数返回多个值
func Swap(a, b int) (int, int) {
    return b, a
}

 3  值传递 和 引用传递

var aa, bb int = 1, 10
    Swap2(&aa, &bb)

    fmt.Println(aa)
    fmt.Println(bb)

func Swap2(a *int, b *int) () {
    var temp int
    temp = *a
    *a = *b
    *b = temp
}

4 函数方法

  方法就是一个包含了接受者的函数(注意: 在go中,函数和方法是不一样的!!),接受者可以是命名类型或者结构体类型的一个值或者是一个指针。所有给定类型的方法属于该类型的方法集

package main

import "fmt"

type Circle struct { //定义结构体
radius float64
}

func main() {
var c Circle
c.radius = 10.00
fmt.Println("Area of c is ", c.getArea()) // 可以直接调用结构体的方法

}

func (c Circle) getArea() float64 { // 这个方法是结构体的方法
return 3.14*c.radius*c.radius
}

5 函数闭包 

6 接触到go之前,一般认为函数和方法只是同一个东西的两个名字而已(在我熟悉的c/c++,python,java中没有明显的区别),但是在golang中者完全是两个不同的东西。官方的解释是,方法是包含了接收者的函数。

函数:

 

首先函数的格式是固定的,func+函数名+ 参数 + 返回值(可选) + 函数体。例 

 

func main() 

 

{

 

fmt.Println("Hello go")

 

}

 

在golang中有两个特殊的函数,main函数和init函数,main函数不用介绍在所有语言中都一样,它作为一个程序的入口,只能有一个。init函数在每个package是可选的,可有可无,甚至可以有多个(但是强烈建议一个package中一个init函数),init函数在你导入该package时程序会自动调用init函数,所以init函数不用我们手动调用,l另外它只会被调用一次,因为当一个package被多次引用时,它只会被导入一次。

方法:

package main  

import "fmt"  

type myint int  

//乘2  

func (p *myint) mydouble() int {  

    *p = *p * 2  

    return 0  

}  

//平方  

func (p myint) mysquare() int {  

    p = p * p  

    fmt.Println("mysquare p = ", p)  

    return 0  

}  

func main() {  

     var i myint = 2  

     i.mydouble()     

     fmt.Println("i = ", i)  

     i.mysquare()  

     fmt.Println("i = ", i)  

}  

 

方法在func关键字后是接收者而不是函数名,接收者可以是自己定义的一个类型,这个类型可以是struct,interface,甚至我们可以重定义基本数据类型(上面的type myint int就是重定义基本类型)。我们可以给他一些我们想要的方法来满足我们的实际工程中的需求,就像上面一样我重定义了int并给了它一个乘2和平法的方法,这里我们要注意一个细节,接收者是指针和非指针的区别,我们可以看到当接收者为指针式,我们可以通过方法改变该接收者的属性,但是非指针类型缺做不到。

 

posted @ 2018-06-17 13:57  刘大飞  阅读(144)  评论(0编辑  收藏  举报