亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

在接觸到go之前,我認為函數和方法只是同一個東西的兩個名字而已(在我熟悉的c/c++,python,java中沒有明顯的區(qū)別),但是在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

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函數,并且是按照順序調用的。

下面來看方法。

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

運行結果:

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

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

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

相關文章

  • golang原生實現JWT的示例代碼

    golang原生實現JWT的示例代碼

    在Go中實現JWT驗證,可以通過標準庫crypto/hmac、crypto/sha256和encoding/base64來編寫自己的JWT,本文就詳細的來介紹一下,感興趣的可以了解下
    2023-05-05
  • Go實現簡單的數據庫表轉結構體詳解

    Go實現簡單的數據庫表轉結構體詳解

    這篇文章主要為大家介紹了Go實現簡單的數據庫表轉結構體詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • GoFrame框架Scan類型轉換實例

    GoFrame框架Scan類型轉換實例

    這篇文章主要為大家介紹了GoFrame框架Scan類型轉換的實例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • go?打包運行文件在windows,liunx運行

    go?打包運行文件在windows,liunx運行

    這篇文章主要介紹了go?打包運行文件在windows,liunx運行的相關資料,需要的朋友可以參考下
    2023-11-11
  • Go標準庫http?server的優(yōu)雅關閉深入理解

    Go標準庫http?server的優(yōu)雅關閉深入理解

    這篇文章主要為大家介紹了Go標準庫http?server的優(yōu)雅有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪關閉深入理解
    2024-01-01
  • golang值接收者和指針接收者的區(qū)別介紹

    golang值接收者和指針接收者的區(qū)別介紹

    這篇文章主要介紹了golang值接收者和指針接收者的區(qū)別,它和函數的區(qū)別在于方法有一個接收者,給一個函數添加一個接收者,那么它就變成了方法,接收者可以是值接收者,也可以是指針接收者,本文通過實例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-08-08
  • golang jwt+token驗證的實現

    golang jwt+token驗證的實現

    這篇文章主要介紹了golang jwt+token驗證的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • go數據結構和算法BitMap原理及實現示例

    go數據結構和算法BitMap原理及實現示例

    這篇文章主要為大家介紹了go數據結構和算法BitMap原理及實現示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • go從指定的URL下載圖片并保存到本地的代碼實現

    go從指定的URL下載圖片并保存到本地的代碼實現

    這段代碼定義了一個名為 downloadImage 的函數,其目的是從指定的URL下載圖片并保存到本地文件系統(tǒng),本文是對代碼功能的詳細描述,對大家的學習或工作有一定的幫助,需要的朋友可以參考下
    2024-08-08
  • Go語言高效I/O并發(fā)處理雙緩沖和Exchanger模式實例探索

    Go語言高效I/O并發(fā)處理雙緩沖和Exchanger模式實例探索

    這篇文章主要介紹了Go語言高效I/O并發(fā)處理雙緩沖和Exchanger模式實例探索,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2024-01-01

最新評論