• 第十课 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和平法的方法,这里我们要注意一个细节,接收者是指针和非指针的区别,我们可以看到当接收者为指针式,我们可以通过方法改变该接收者的属性,但是非指针类型缺做不到。

  • 相关阅读:
    Hive创建表格报Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException的错误
    Hive本地模式安装及遇到的问题和解决方案
    CentOS6 编译安装Mysql5.6.26
    数据结构全攻略--学好数据结构的必经之路
    JAVA项目打开出现红色感叹号!
    前端语言html
    1 利用Anaconda完美解决Python 2与python 3的共存问题
    0 Windows上安装Anaconda和python的教程详解
    回溯算法
    建立结构体
  • 原文地址:https://www.cnblogs.com/liufei1983/p/9192762.html
Copyright © 2020-2023  润新知