go函数与方法的区别

BIT_ · 2020-12-11 18:14:55 · 1619 次点击

方法也是函数的一种,只不过比较特殊而已。如下所示,带数据集入参的函数本质上就是一个方法。

package main

import "fmt"

type Pen struct{ name string }

// 方法
func (p *Pen) pens() {
    p.name = "nihao"
}

// 函数
func pening(p *Pen) {
    p.name = "wohao"
}


func main() {
    p2 := new(Pen)
    pening(p2)    
    fmt.Println(p2.name) 
    p1 := new(Pen)
     p1.pens()   
    fmt.Println(p1.name)
}
#6
更多评论

面向过程与面向对象的区别

一时想不到怎么更好的用通俗的语言解释这种两种的区别,请允许我借用其他人的解释 https://www.cnblogs.com/strivers/p/6681876.html

面向过程(你说的函数)就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了

面向对象(你说的方法)是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。

补充一:结构体名字没有首字母大写

不确定你是不是还在新手村,还是只是单独的举个简单例子,注意到你的结构体名字没有首字母大写,我就多啰嗦一句。

Go语言中字母大写 代替了 public,小写为private

没有首字母大写别的包无法调用,函数体与方法都是

补充二: 程序里面方法和函数有区别吗?

那东西不是同一个含义吗?

我记得在我的概念里面是一个是全局函数/常规函数/通用函数---你说的函数,另外一个是某某类的函数,某某对象的函数---你说的方法

我不确定是不是自己的概念出问题啦,需要其他人确认一下。

我接触到的几种编程语言基本上定义函数/方法都是 function这个单词,要不就没有

为此我专门去查了几种比较常见的编程语言定义函数/方法的格式

C定义函数关键词:无

返回值类型 方法名称(参数类型 参数名称,……)
{
   方法内容
}

C++定义函数关键词:无

返回值类型 函数名(参数类型 参数名称,…… )
{
   方法内容
}

Java定义函数关键词:无

修饰符(public static)返回值类型 方法名称(参数类型 参数名称,……){

方法体

return 返回值;

}

php定义函数关键词:function

function 方法名称(参数名称,……)
{
    // 要执行的代码
}

python3定义函数关键词:def

def 函数名(参数名称,……):
    函数体

js定义函数关键词:function

function 方法名称(参数名称,……)
{
    // 执行代码
}

Go定义函数关键词:func

func 函数名(参数名称 参数类型,……) [返回值名称 返回值类型,……] {
   函数体
}

总结:在这些语言里面定义函数/方法的关键词为

C、C++、JAVA的关键词:

PHP、JS、Go的关键词: function及其简写

Python3的关键词: define的简写def

我有很大的把握确定,函数与方法很可能是编程语言里面同一个概念的不同中文翻译

数据收集

不过以上都是我一家之言,并没有100%把握;所以后面的人如果方便的话,做个统计。

在你们的理念里面,函数与方法是两个不同的东西吗?

相同的请回复 1;

不相同的请回复 2;

#1

准确的说方法和函数没有本质的区别, 在其他语言中也是如此. 只不过golang比较直接, 把其他语言中对象方法隐含传递的this对象(指针)写在明面上了而已.

   type someType struct {
      A string
   }
   func (t *someType) test {
      // 这里的t就是this
     t.A = "AAA"
  }
  func main() {
    st := someType{}
    st.A = "AAA" // 和调用st.test结果没有任何区别
 }

方法的用途主要有2个, 一个是为了实现interface{}, 另外一个是为了同名函数隔离

#2