golang:go语言中函数与方法有什么区别

 所属分类:php教程

 浏览:172次-  评论: 0次-  更新时间:2022-09-30
描述:更多教程资料进入php教程获得。 go语言中函数与方法的区别:对于普通函数,接收者为值类型时,不能将指针类型的数据直接传递;对于方法,接...
更多教程资料进入php教程获得。

go语言中函数与方法的区别:对于普通函数,接收者为值类型时,不能将指针类型的数据直接传递;对于方法,接收者为值类型时,可以直接用指针类型的变量调用方法。

php入门到就业线上直播课:进入学习
API 文档、设计、调试、自动化测试一体化协作工具:点击使用

本文操作环境:windows10系统、Go 1.11.2、thinkpad t480电脑。

函数与方法的区别官方解释:一个方法就是一个包含了接收者的函数。接收者可以是命名类型或者结构体类型的一个值或者是一个指针。所有给定类型的方法属于该类型的方法集。

区别:

1、对于普通函数:接收者(函数参数)为值类型时,不能将指针类型的数据直接传递,反之亦然。

func function_name([parameter list]) [return_types] {
   函数体
}

2、对于方法(如struct方法): 接收者为值类型时,可以直接用指针类型的变量调用方法,反之亦然

func (variable_name variable_data_type) function_name() [return_type]{
   /* 函数体*/
   }

可以看到方法和函数的区别,方法在func关键字后是接收者而不是函数名,接收者可以是自己定义的一个类型,这个类型可以是struct,interface,甚至我们可以重定义基本数据类型。

Go函数

函数是基本的代码块,用于执行一个任务。

Go 语言最少有个 main() 函数。

你可以通过函数来划分不同功能,逻辑上每个函数执行的是指定的任务。

函数声明告诉了编译器函数的名称,返回类型,和参数。

Go 函数可以返回多个值。

Go 语言标准库提供了多种可动用的内置的函数。例如,len() 函数可以接受不同类型参数并返回该类型的长度。如果我们传入 的是字符串则返回字符串的长度,如果传入的是数组,则返回数组中包含的元素个数。

1、值传递:值传递是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。

2、引用传递:引用传递是指在调用函数时将实际参数的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。

Go方法

Go 语言中同时有函数和方法。一个方法就是一个包含了接受者的函数,接受者可以是命名类型或者结构体类型的一个值或者是一个指针。所有给定类型的方法属于该类型的方法集。

下面定义一个结构体类型和该类型的一个方法:

package mainimport (   "fmt"  )/* 定义结构体 */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
}

(学习视频分享:编程入门)

以上代码执行结果为:

Area of Circle(c1) =  314

例子

 package structTest  
      
    //普通函数与方法的区别(在接收者分别为值类型和指针类型的时候)  
    //Date:2014-4-3 10:00:07  
      
    import (  
        "fmt"  
    )  
      
    func StructTest06Base() {  
        structTest0601()  
        structTest0602()  
    }  
      
    //1.普通函数  
    //接收值类型参数的函数  
    func valueIntTest(a int) int {  
        return a + 10  
    }  
      
    //接收指针类型参数的函数  
    func pointerIntTest(a *int) int {  
        return *a + 10  
    }  
      
    func structTest0601() {  
        a := 2  
        fmt.Println("valueIntTest:", valueIntTest(a))  
        //函数的参数为值类型,则不能直接将指针作为参数传递  
        //fmt.Println("valueIntTest:", valueIntTest(&a))  
        //compile error: cannot use &a (type *int) as type int in function argument  
      
        b := 5  
        fmt.Println("pointerIntTest:", pointerIntTest(&b))  
        //同样,当函数的参数为指针类型时,也不能直接将值类型作为参数传递  
        //fmt.Println("pointerIntTest:", pointerIntTest(b))  
        //compile error:cannot use b (type int) as type *int in function argument  
    }  
      
    //2.方法  
    type PersonD struct {  
        id   int  
        name string  
    }  
      
    //接收者为值类型  
    func (p PersonD) valueShowName() {  
        fmt.Println(p.name)  
    }  
      
    //接收者为指针类型  
    func (p *PersonD) pointShowName() {  
        fmt.Println(p.name)  
    }  
      
    func structTest0602() {  
        //值类型调用方法  
        personValue := PersonD{101, "Will Smith"}  
        personValue.valueShowName()  
        personValue.pointShowName()  
      
        //指针类型调用方法  
        personPointer := &PersonD{102, "Paul Tony"}  
        personPointer.valueShowName()  
        personPointer.pointShowName()  
      
        //与普通函数不同,接收者为指针类型和值类型的方法,指针类型和值类型的变量均可相互调用  
    }

相关推荐:golang教程

以上就是go语言中函数与方法有什么区别的详细内容,更多请关注zzsucai.com其它相关文章!

积分说明:注册即送10金币,每日签到可获得更多金币,成为VIP会员可免金币下载! 充值积分充值会员更多说明»

讨论这个素材(0)回答他人问题或分享使用心得奖励金币

〒_〒 居然一个评论都没有……

表情  文明上网,理性发言!