佳木斯湛栽影视文化发展公司

主頁(yè) > 知識(shí)庫(kù) > golang 函數(shù)以及函數(shù)和方法的詳解及區(qū)別

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

熱門(mén)標(biāo)簽:AI電銷(xiāo) 百度競(jìng)價(jià)排名 地方門(mén)戶網(wǎng)站 鐵路電話系統(tǒng) 網(wǎng)站排名優(yōu)化 呼叫中心市場(chǎng)需求 Linux服務(wù)器 服務(wù)外包

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

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

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

func main() 

{

fmt.Println("Hello go")

}

在golang中有兩個(gè)特殊的函數(shù),main函數(shù)和init函數(shù),main函數(shù)不用介紹在所有語(yǔ)言中都一樣,它作為一個(gè)程序的入口,只能有一個(gè)。init函數(shù)在每個(gè)package是可選的,可有可無(wú),甚至可以有多個(gè)(但是強(qiáng)烈建議一個(gè)package中一個(gè)init函數(shù)),init函數(shù)在你導(dǎo)入該package時(shí)程序會(huì)自動(dòng)調(diào)用init函數(shù),所以init函數(shù)不用我們手動(dòng)調(diào)用,l另外它只會(huì)被調(diào)用一次,因?yàn)楫?dāng)一個(gè)package被多次引用時(shí),它只會(huì)被導(dǎo)入一次。

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

運(yùn)行結(jié)果:

我們可以看到,程序?yàn)槲覀冏詣?dòng)調(diào)用了兩個(gè)init函數(shù),并且是按照順序調(diào)用的。

下面來(lá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)
}

運(yùn)行結(jié)果:

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

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

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

您可能感興趣的文章:
  • golang struct擴(kuò)展函數(shù)參數(shù)命名警告解決方法
  • golang中strconv.ParseInt函數(shù)用法示例
  • golang模板template自定義函數(shù)用法示例
  • 深入解析golang編程中函數(shù)的用法
  • Golang的os標(biāo)準(zhǔn)庫(kù)中常用函數(shù)的整理介紹
  • Golang記錄、計(jì)算函數(shù)執(zhí)行耗時(shí)、運(yùn)行時(shí)間的一個(gè)簡(jiǎn)單方法
  • Golang學(xué)習(xí)筆記(五):函數(shù)

標(biāo)簽:衡水 黃山 崇左 仙桃 銅川 蘭州 湖南 湘潭

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《golang 函數(shù)以及函數(shù)和方法的詳解及區(qū)別》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    荔浦县| 剑川县| 宿迁市| 芷江| 乐山市| 绥阳县| 田东县| 平陆县| 青冈县| 望江县| 卓尼县| 慈溪市| 宜良县| 龙南县| 房产| 泰兴市| 宜城市| 武鸣县| 西盟| 元朗区| 秦安县| 柘城县| 越西县| 罗城| 通化县| 阳曲县| 泊头市| 清河县| 鄂温| 民乐县| 仁布县| 靖安县| 怀仁县| 威远县| 民县| 当雄县| 祁门县| 长沙市| 通江县| 高邑县| 东城区|