最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

golang 函數(shù)以及函數(shù)和方法的詳解及區(qū)別

 更新時間:2017年05月12日 11:57:23   投稿:lqh  
這篇文章主要介紹了golang 函數(shù)以及函數(shù)和方法的區(qū)別的相關資料,需要的朋友可以參考下

golang 函數(shù)以及函數(shù)和方法的區(qū)別

在接觸到go之前,我認為函數(shù)和方法只是同一個東西的兩個名字而已(在我熟悉的c/c++,python,java中沒有明顯的區(qū)別),但是在golang中者完全是兩個不同的東西。官方的解釋是,方法是包含了接收者的函數(shù)。到底什么意思呢。

首先函數(shù)的格式是固定的,func+函數(shù)名+ 參數(shù) + 返回值(可選) + 函數(shù)體。例

func main() 

{

fmt.Println("Hello go")

}

在golang中有兩個特殊的函數(shù),main函數(shù)和init函數(shù),main函數(shù)不用介紹在所有語言中都一樣,它作為一個程序的入口,只能有一個。init函數(shù)在每個package是可選的,可有可無,甚至可以有多個(但是強烈建議一個package中一個init函數(shù)),init函數(shù)在你導入該package時程序會自動調用init函數(shù),所以init函數(shù)不用我們手動調用,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)
}

運行結果:

我們可以看到,程序為我們自動調用了兩個init函數(shù),并且是按照順序調用的。

下面來看方法。

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

運行結果:

我們可以看到方法和函數(shù)的區(qū)別,方法在func關鍵字后是接收者而不是函數(shù)名,接收者可以是自己定義的一個類型,這個類型可以是struct,interface,甚至我們可以重定義基本數(shù)據(jù)類型。我們可以給他一些我們想要的方法來滿足我們的實際工程中的需求,就像上面一樣我重定義了int并給了它一個乘2和平法的方法,這里我們要注意一個細節(jié),接收者是指針和非指針的區(qū)別,我們可以看到當接收者為指針式,我們可以通過方法改變該接收者的屬性,但是非指針類型缺做不到。

這里的接收者和c++中的this指針有一些相似,我們可以把接受者當作一個class,而這些方法就是類的成員函數(shù),當接收者為指針類型是就是c++中的非const成員函數(shù),為非指針時就是const成員函數(shù),不能通過此方法改變累的成員變量。

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

相關文章

  • 使用client-go工具調用kubernetes API接口的教程詳解(v1.17版本)

    使用client-go工具調用kubernetes API接口的教程詳解(v1.17版本)

    這篇文章主要介紹了使用client-go工具調kubernetes API接口(v1.17版本),本文通過圖文實例相結合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • Golang教程之不可重入函數(shù)的實現(xiàn)方法

    Golang教程之不可重入函數(shù)的實現(xiàn)方法

    這篇文章主要給大家介紹了關于Golang教程之不可重入函數(shù)的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-09-09
  • 使用GO實現(xiàn)Paxos共識算法的方法

    使用GO實現(xiàn)Paxos共識算法的方法

    這篇文章主要介紹了使用GO實現(xiàn)Paxos共識算法,本文給大家介紹的非常詳細,對大家的學習或工作,具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • GO語言基礎之數(shù)組

    GO語言基礎之數(shù)組

    或許您是從其他語言轉到GO語言這邊的,那麼在其他語言的影響下您可能會不太適應GO語言的數(shù)組,因為GO語言把數(shù)組給拆分成了array,slice和map,需要的朋友可以參考下
    2015-01-01
  • go開發(fā)過程中mapstructure使用示例詳解

    go開發(fā)過程中mapstructure使用示例詳解

    mapstructure是一個Go語言庫,用于將映射(如map或struct)解碼為結構體,便于處理JSON、YAML等配置文件數(shù)據(jù),通過字段名或結構體標簽控制解碼,支持嵌套結構體、靈活處理多種數(shù)據(jù)源,需要注意錯誤處理,該庫適合于Go開發(fā)中配置數(shù)據(jù)的讀取和轉換
    2024-10-10
  • Go gin框架處理panic的方法詳解

    Go gin框架處理panic的方法詳解

    本文我們介紹下recover在gin框架中的應用, 首先,在golang中,如果在子協(xié)程中遇到了panic,那么主協(xié)程也會被終止,文中通過代碼示例介紹的非常詳細,需要的朋友可以參考下
    2023-09-09
  • Golang中HTTP路由設計的使用與實現(xiàn)

    Golang中HTTP路由設計的使用與實現(xiàn)

    這篇文章主要介紹了Golang中HTTP路由設計的使用與實現(xiàn),為什么要設計路由規(guī)則,因為路由規(guī)則是HTTP的請求按照一定的規(guī)則 ,匹配查找到對應的控制器并傳遞執(zhí)行的邏輯,需要的朋友可以參考下
    2023-05-05
  • golang進行簡單權限認證的實現(xiàn)

    golang進行簡單權限認證的實現(xiàn)

    本文主要介紹了golang簡單權限認證的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • 詳解go-zero如何使用validator進行參數(shù)校驗

    詳解go-zero如何使用validator進行參數(shù)校驗

    這篇文章主要介紹了如何使用validator庫做參數(shù)校驗的一些十分實用的使用技巧,包括翻譯校驗錯誤提示信息、自定義提示信息的字段名稱、自定義校驗方法等,感興趣的可以了解下
    2024-01-01
  • Go異步任務解決方案之Asynq庫詳解

    Go異步任務解決方案之Asynq庫詳解

    需要在Go應用程序中異步處理任務? Asynq,簡單高效的任務隊列實現(xiàn),下面這篇文章主要給大家介紹了關于Go異步任務解決方案之Asynq庫的相關資料,需要的朋友可以參考下
    2023-02-02

最新評論

蓝田县| 启东市| 革吉县| 邯郸县| 陆丰市| 怀仁县| 石景山区| 赞皇县| 漾濞| 馆陶县| 延安市| 章丘市| 辛集市| 镇雄县| 甘肃省| 莱西市| 南康市| 天台县| 方城县| 托克托县| 通江县| 绥宁县| 鸡泽县| 庆安县| 贵港市| 新河县| 莱阳市| 陈巴尔虎旗| 北宁市| 耿马| 高淳县| 五峰| 临海市| 海宁市| 岢岚县| 鄂尔多斯市| 集安市| 喀什市| 大厂| 张家界市| 子洲县|