首页后端开发其他后端知识go语言中函数与方法的区别有啥

go语言中函数与方法的区别有啥

时间2024-03-28 01:46:03发布访客分类其他后端知识浏览979
导读:相信很多人对“go语言中函数与方法的区别有啥”都不太了解,下面小编为你详细解释一下这个问题,希望对你有一定的帮助 go语言中函数与方法的区别:对于普通函数,接收者为值类型时,不能将指针类型的数据直接传递...
相信很多人对“go语言中函数与方法的区别有啥”都不太了解,下面小编为你详细解释一下这个问题,希望对你有一定的帮助
 

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

本文操作环境: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()  
      
        //与普通函数不同,接收者为指针类型和值类型的方法,指针类型和值类型的变量均可相互调用  
    }
    



关于“go语言中函数与方法的区别有啥”的内容就介绍到这,感谢各位的阅读,相信大家对go语言中函数与方法的区别有啥已经有了进一步的了解。大家如果还想学习更多知识,欢迎关注网络,小编将为大家输出更多高质量的实用文章!

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!

go语言函数方法

若转载请注明出处: go语言中函数与方法的区别有啥
本文地址: https://pptw.com/jishu/654618.html
go中&和*的区别以及应用场景分别是怎样 如何利用canvas绘制饼图,实现思路和方法是什么

游客 回复需填写必要信息