湖北营销网站建设设计,wordpress页面属性全,成都设计公司广告,齐三seo在接触到go之前#xff0c;我认为函数和方法只是同一个东西的两个名字而已#xff08;在我熟悉的c/c#xff0c;python#xff0c;java中没有明显的区别#xff09;#xff0c;但是在golang中者完全是两个不同的东西。官方的解释是#xff0c;方法是包含了接收者的函数。…在接触到go之前我认为函数和方法只是同一个东西的两个名字而已在我熟悉的c/cpythonjava中没有明显的区别但是在golang中者完全是两个不同的东西。官方的解释是方法是包含了接收者的函数。到底什么意思呢。
首先函数的格式是固定的func函数名 参数 返回值可选 函数体。例如
func main {fmt.Println(Hello go)
}在golang中有两个特殊的函数main函数和init函数main函数不用介绍在所有语言中都一样它作为一个程序的入口只能有一个。init函数在每个package是可选的可有可无甚至可以有多个(但是强烈建议一个package中一个init函数)init函数在你导入该package时程序会自动调用init函数所以init函数不用我们手动调用,l另外它只会被调用一次因为当一个package被多次引用时它只会被导入一次。
package mypackage import (fmt) //为了能让其他包(文件)能够访问该变量或方法需要将该变量或方法大写
var I int //全局变量go函数外面定义的变量就是全局变量func init() { I 0 fmt.Println(Call mypackage init1)
} func init() { I 1 fmt.Println(Call mypackage init2)
} package main import ( demo/mypackage fmt
) func main() { fmt.Println(Hello go.... I , mypackage.I)
} 下面来看下方法。
package main import fmt type myint int //乘2
func (p *myint) mydouble() int { *p *p * 2 return 0
} //平方
func (p myint) mysquare() int { p p * p fmt.Println(mysquare p , p) return 0
} func main() { var i myint 2 i.mydouble() fmt.Println(i , i) i.mysquare() fmt.Println(i , i)
}我们可以看到方法和函数的区别方法在func关键字后是接收者而不是函数名接收者可以是自己定义的一个类型这个类型可以是structinterface甚至我们可以重定义基本数据类型。我们可以给他一些我们想要的方法来满足我们的实际工程中的需求就像上面一样我重定义了int并给了它一个乘2和平方的方法这里我们要注意一个细节接收者是指针和非指针的区别我们可以看到当接收者为指针式我们可以通过方法改变该接收者的属性但是非指针类型缺做不到。 这里的接收者和c中的this指针有一些相似我们可以把接受者当作一个class而这些方法就是类的成员函数当接收者为指针类型是就是c中的非const成员函数为非指针时就是const成员函数不能通过此方法改变类的成员变量。