golang main 和 init,函数和方法

huangliang-hb · · 1308 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

  在golang中有两个特殊的函数,main函数和init函数,main函数不用介绍在所有语言中都一样,它作为一个程序的入口,只能有一个。init函数在每个package是可选的,可有可无,甚至可以有多个(但是强烈建议一个package中一个init函数),init函数在你导入该package时程序会自动调用init函数,所以init函数不用我们手动调用,l另外它只会被调用一次,因为当一个package被多次引用时,它只会被导入一次。

package mypackage
 
import (
    "fmt"
)
 
var I int
 
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)
}

运行结果:

Call mypackage init1
Call mypackage init2
Hello go.... I = 

------------------------------------------------------------------------------------------ 华丽分割线 ----------------------------------------------------------------------------------------

函数的定义:
func function_name(param1, param2) (return_type)
eg:
func A(a int, b string) (int, string, int)  { 
//第一个小括号当中是你的参数列表,第二个小括号是你的返回值列表
    
}

详细可看:https://www.cnblogs.com/skymyyang/p/7659775.html

 
方法的定义:
func (receiver_name receiver_type) function_name() (return_type)
eg:
func (a int) A() int  { 
//a是int类型的接收参数,返回值是int
    
}

方法的经典例子

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)
}

运行结果:

i = 4
mysquare p = 16
i = 4

  我们可以看到方法和函数的区别,方法在func关键字后是接收者而不是函数名,接收者可以是自己定义的一个类型,这个类型可以是struct,interface,甚至我们可以重定义基本数据类型。我们可以给他一些我们想要的方法来满足我们的实际工程中的需求,就像上面一样我重定义了int并给了它一个乘2和平法的方法,这里我们要注意一个细节,接收者是指针和非指针的区别,我们可以看到当接收者为指针式,我们可以通过方法改变该接收者的属性,但是非指针类型缺做不到
这里的接收者和c++中的this指针有一些相似,我们可以把接受者当作一个class,而这些方法就是类的成员函数,当接收者为指针类型是就是c++中的非const成员函数,为非指针时就是const成员函数,不能通过此方法改变累的成员变量。

 

有疑问加站长微信联系(非本文作者)

本文来自:博客园

感谢作者:huangliang-hb

查看原文:golang main 和 init,函数和方法

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1308 次点击  
加入收藏 微博
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传