求助大神?百度过了,教程也看了,还是不明白函数与方法的区别在哪里,在我看来方法是多余的,因为你方法可以做的我函数也可以做,为什么要方法呢?下面我要打印结构体name字段,函数和方法都行,所以我为什么要用方法?求大神解惑,方法应该有更深层次的原因才存在的。
// Pen 结构体
type Pen struct{ name string }
// 方法
func (p Pen) pens() Pen {
p.name = "nihao"
return p
}
// 函数
func pening() Pen {
var pp Pen
pp.name = "wohao"
return pp
}
func main() {
p2 := pening() // 函数直接调用就行
fmt.Println(p2.name)
p1 := p2.pens() // 方法还要在调用别的函数
fmt.Println(p1.name)
}
有疑问加站长微信联系(非本文作者)

面向过程与面向对象的区别
一时想不到怎么更好的用通俗的语言解释这种两种的区别,请允许我借用其他人的解释
https://www.cnblogs.com/strivers/p/6681876.html
面向过程(你说的函数)就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了
面向对象(你说的方法)是把构成问题事务分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
补充一:结构体名字没有首字母大写
不确定你是不是还在新手村,还是只是单独的举个简单例子,注意到你的结构体名字没有首字母大写,我就多啰嗦一句。
Go语言中字母大写 代替了 public,小写为private
没有首字母大写别的包无法调用,函数体与方法都是
补充二: 程序里面方法和函数有区别吗?
那东西不是同一个含义吗?
我记得在我的概念里面是一个是全局函数/常规函数/通用函数---你说的函数,另外一个是某某类的函数,某某对象的函数---你说的方法
我不确定是不是自己的概念出问题啦,需要其他人确认一下。
我接触到的几种编程语言基本上定义函数/方法都是 function这个单词,要不就没有
为此我专门去查了几种比较常见的编程语言定义函数/方法的格式
C定义函数关键词:无
C++定义函数关键词:无
Java定义函数关键词:无
php定义函数关键词:function
python3定义函数关键词:def
js定义函数关键词:function
Go定义函数关键词:func
总结:在这些语言里面定义函数/方法的关键词为
C、C++、JAVA的关键词: 无
PHP、JS、Go的关键词: function及其简写
Python3的关键词: define的简写def
我有很大的把握确定,
函数与方法很可能是编程语言里面同一个概念的不同中文翻译
数据收集
不过以上都是我一家之言,并没有100%把握;所以后面的人如果方便的话,做个统计。
在你们的理念里面,函数与方法是两个不同的东西吗?
相同的请回复
1
;不相同的请回复
2
;准确的说方法和函数没有本质的区别, 在其他语言中也是如此. 只不过golang比较直接, 把其他语言中对象方法隐含传递的this对象(指针)写在明面上了而已.
方法的用途主要有2个, 一个是为了实现interface{}, 另外一个是为了同名函数隔离
谢谢各位大神的回答,我现在想的是:有三个村子A,B,C,方法就是:修一条路,从A到B再到C,类似设定,人可以用方法从A到B再到C。函数:人必须从A走到B再走到C,走不过去我就修路过去,类似流程。
其实还是我现在想太多,多用代码应该就会理解。举个例子:我不知道番茄是什么,别人告诉我番茄可以当水果吃,或者做番茄炒蛋吃。我去买番茄,发现有两种番茄:大番茄和小番茄。我不知道大番茄和小番茄的区别,因为其他人告诉我他们是一样的,所以我两种番茄都买了。我回到家,分别吃起它们,发现大番茄汁水溅到我身上了,而小番茄没有,所以以后当水果吃的时候应该选小番茄,或者吃大番茄的时候小心点。番茄炒蛋用小番茄炒鸡蛋没有大番茄味道好,所以以后做番茄炒蛋应该用大番茄。(说的太多了,感觉看的麻烦)
方法和函数只是看概念两者没什么差别,如果放到工程项目中,2这区别就大了, 比如工程中使用方法,多数为了达到程序设计中高内聚,低耦合,以及接口隔离的设计方法,也有为了支持程序的扩展。
你的工程里面可以都是函数实现,但是一个可扩展,好理解的,必定离不开方法 说白了设计模式里面多数用方法实现以上论点
方法也是函数的一种,只不过比较特殊而已。如下所示,带数据集入参的函数本质上就是一个方法。
在接触到go之前,我认为函数和方法只是同一个东西的两个名字而已(在我熟悉的c/c++,python,java中没有明显的区别),但是在golang中有点区别,方法是包含了接收者的函数。