golang main 和 init,函數和方法


  在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成員函數,不能通過此方法改變累的成員變量。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM