go函数与方法的区别

BIT_ · · 1395 次点击
方法也是函数的一种,只不过比较特殊而已。如下所示,带数据集入参的函数本质上就是一个方法。 ``` 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 返回值类型 方法名称(参数类型 参数名称,……) { 方法内容 } ``` #### C++定义函数关键词:无 ```c++ 返回值类型 函数名(参数类型 参数名称,…… ) { 方法内容 } ``` #### Java定义函数关键词:无 ```java 修饰符(public static)返回值类型 方法名称(参数类型 参数名称,……){ 方法体 return 返回值; } ``` #### php定义函数关键词:function ``` function 方法名称(参数名称,……) { // 要执行的代码 } ``` python3定义函数关键词:def ``` python def 函数名(参数名称,……): 函数体 ``` #### js定义函数关键词:function ```javascript function 方法名称(参数名称,……) { // 执行代码 } ``` #### Go定义函数关键词:func ```golang func 函数名(参数名称 参数类型,……) [返回值名称 返回值类型,……] { 函数体 } ``` #### 总结:在这些语言里面定义函数/方法的关键词为 C、C++、JAVA的关键词: **无** PHP、JS、Go的关键词: **function及其简写** Python3的关键词: **define的简写def** 我有很大的把握确定,`函数与方法很可能是编程语言里面同一个概念的不同中文翻译` ### 数据收集 不过以上都是我一家之言,并没有100%把握;所以后面的人如果方便的话,做个统计。 在你们的理念里面,函数与方法是两个不同的东西吗? **相同**的请回复 `1`; **不相同**的请回复 `2`;
#1
准确的说方法和函数没有本质的区别, 在其他语言中也是如此. 只不过golang比较直接, 把其他语言中对象方法隐含传递的this对象(指针)写在明面上了而已. ```go 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