真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

go語言main函數(shù) go語言基本語法

go語言的main函數(shù)放上面好還是下面好

Go語言的MV書包在上面來說會(huì)比放在下面好,一般來說這種情況的話基本上都是放在上面比較好。

網(wǎng)頁設(shè)計(jì)是網(wǎng)站建設(shè)的前奏,好的網(wǎng)頁設(shè)計(jì)更深度的剖析產(chǎn)品和設(shè)計(jì)風(fēng)格定位,結(jié)合最新的網(wǎng)頁設(shè)計(jì)流行趨勢,與WVI應(yīng)用標(biāo)準(zhǔn),設(shè)計(jì)出具企業(yè)表現(xiàn)力,大器而深穩(wěn)的網(wǎng)站界面設(shè)。成都創(chuàng)新互聯(lián)公司從2013年開始,是成都網(wǎng)站建設(shè)公司:提供企業(yè)網(wǎng)站設(shè)計(jì),品牌網(wǎng)站建設(shè),營銷型企業(yè)網(wǎng)站建設(shè)方案,響應(yīng)式網(wǎng)站建設(shè),成都微信小程序,專業(yè)建站公司做網(wǎng)站。

Golang 中函數(shù)和方法的區(qū)別

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

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

func main()

{

fmt.Println("Hello go")

}

在golang中有兩個(gè)特殊的函數(shù),main函數(shù)和init函數(shù),main函數(shù)不用介紹在所有語言中都一樣,它作為一個(gè)程序的入口,只能有一個(gè)。init函數(shù)在每個(gè)package是可選的,可有可無,甚至可以有多個(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?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)用的。

下面來看方法。

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è)類型,這個(gè)類型可以是struct,interface,甚至我們可以重定義基本數(shù)據(jù)類型。我們可以給他一些我們想要的方法來滿足我們的實(shí)際工程中的需求,就像上面一樣我重定義了int并給了它一個(gè)乘2和平法的方法,這里我們要注意一個(gè)細(xì)節(jié),接收者是指針和非指針的區(qū)別,我們可以看到當(dāng)接收者為指針式,我們可以通過方法改變該接收者的屬性,但是非指針類型缺做不到。

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

4.1 Go語言中包(Packages)基礎(chǔ)知識

先看一下目錄結(jié)構(gòu),注意這里的src名稱是必須的,go在設(shè)置了GOPATH后,默認(rèn)會(huì)添加src去尋找package,暫未查詢是否有方法不按照src查詢

根據(jù)上面的描述,Go語言中通過包中函數(shù)的名稱來區(qū)分公共函數(shù)和私有函數(shù),我們在main函數(shù)中是無法調(diào)用myPrivateFunc的

此時(shí)如果執(zhí)行通過go run方式執(zhí)行,會(huì)看到如下的提示信息,這與大部分語言對于包管理方式相關(guān),所以我們通過兩種不同的方法來讓代碼執(zhí)行起來

返回如下,這里面對我們后續(xù)執(zhí)行有影響的兩個(gè)參數(shù)GO111MODULE和GOPATH

如果要使用gopath模式引用包,則需要關(guān)閉mod模式

設(shè)置GOPATH為當(dāng)前路徑,即main.go所在的路徑

此時(shí)再查看go env時(shí),GOPATH已經(jīng)發(fā)生改變

我們再次嘗試執(zhí)行代碼

可以看到public函數(shù)被調(diào)用

Go語言”奇怪用法“有哪些

1,go的變量聲明順序是:”先寫變量名,再寫類型名“,此與C/C++的語法孰優(yōu)孰劣,可見下文解釋:

2,go是通過package來組織的(與python類似),只有package名為main的包可以包含main函數(shù),一個(gè)可執(zhí)行程序有且僅有一個(gè)main包,通過import關(guān)鍵字來導(dǎo)入其他非main包。

3,可見性規(guī)則。go語言中,使用大小寫來決定該常量、變量、類型、接口、結(jié)構(gòu)或函數(shù)是否可以被外部包含調(diào)用。根據(jù)約定,函數(shù)名首字母小寫即為private,函數(shù)名首字母大寫即為public。

4,go內(nèi)置關(guān)鍵字(25個(gè)均為小寫)。

5,函數(shù)不用先聲明,即可使用。

6,在函數(shù)內(nèi)部可以通過 := 隱士定義變量。(函數(shù)外必須顯示使用var定義變量)

7,go程序使用UTF-8編碼的純Unicode文本編寫。

8,使用big.Int的陷阱:

9,從技術(shù)層面講,go語言的語句是以分號分隔的,但這些是由編譯器自動(dòng)添加的,不用手動(dòng)輸入,除非需要在同一行中寫入多個(gè)語句。沒有分號及只需少量的逗號和圓括號,使得go語言的程序更容易閱讀。

10,go語言只有一個(gè)循環(huán)結(jié)構(gòu)——for循環(huán)。

11,go里的自增運(yùn)算符只有——“后++”

12,go語言中的slice用法類似python中數(shù)組,關(guān)于slice的詳細(xì)用法可見:

13,函數(shù)也是一個(gè)值,使用匿名函數(shù)返回一個(gè)值。

14,函數(shù)閉包的使用,閉包是一個(gè)匿名函數(shù)值,會(huì)引用到其外部的變量。

GO語言學(xué)習(xí)系列八——GO函數(shù)(func)的聲明與使用

GO是編譯性語言,所以函數(shù)的順序是無關(guān)緊要的,為了方便閱讀,建議入口函數(shù) main 寫在最前面,其余函數(shù)按照功能需要進(jìn)行排列

GO的函數(shù) 不支持嵌套,重載和默認(rèn)參數(shù)

GO的函數(shù) 支持 無需聲明變量,可變長度,多返回值,匿名,閉包等

GO的函數(shù)用 func 來聲明,且左大括號 { 不能另起一行

一個(gè)簡單的示例:

輸出為:

參數(shù):可以傳0個(gè)或多個(gè)值來供自己用

返回:通過用 return 來進(jìn)行返回

輸出為:

上面就是一個(gè)典型的多參數(shù)傳遞與多返回值

對例子的說明:

按值傳遞:是對某個(gè)變量進(jìn)行復(fù)制,不能更改原變量的值

引用傳遞:相當(dāng)于按指針傳遞,可以同時(shí)改變原來的值,并且消耗的內(nèi)存會(huì)更少,只有4或8個(gè)字節(jié)的消耗

在上例中,返回值 (d int, e int, f int) { 是進(jìn)行了命名,如果不想命名可以寫成 (int,int,int){ ,返回的結(jié)果都是一樣的,但要注意:

當(dāng)返回了多個(gè)值,我們某些變量不想要,或?qū)嶋H用不到,我們可以使用 _ 來補(bǔ)位,例如上例的返回我們可以寫成 d,_,f := test(a,b,c) ,我們不想要中間的返回值,可以以這種形式來舍棄掉

在參數(shù)后面以 變量 ... type 這種形式的,我們就要以判斷出這是一個(gè)可變長度的參數(shù)

輸出為:

在上例中, strs ...string 中, strs 的實(shí)際值是b,c,d,e,這就是一個(gè)最簡單的傳遞可變長度的參數(shù)的例子,更多一些演變的形式,都非常類似

在GO中 defer 關(guān)鍵字非常重要,相當(dāng)于面相對像中的析構(gòu)函數(shù),也就是在某個(gè)函數(shù)執(zhí)行完成后,GO會(huì)自動(dòng)這個(gè);

如果在多層循環(huán)中函數(shù)里,都定義了 defer ,那么它的執(zhí)行順序是先進(jìn)后出;

當(dāng)某個(gè)函數(shù)出現(xiàn)嚴(yán)重錯(cuò)誤時(shí), defer 也會(huì)被調(diào)用

輸出為

這是一個(gè)最簡單的測試了,當(dāng)然還有更復(fù)雜的調(diào)用,比如調(diào)試程序時(shí),判斷是哪個(gè)函數(shù)出了問題,完全可以根據(jù) defer 打印出來的內(nèi)容來進(jìn)行判斷,非??焖伲@種留給你們?nèi)?shí)現(xiàn)

一個(gè)函數(shù)在函數(shù)體內(nèi)自己調(diào)用自己我們稱之為遞歸函數(shù),在做遞歸調(diào)用時(shí),經(jīng)常會(huì)將內(nèi)存給占滿,這是非常要注意的,常用的比如,快速排序就是用的遞歸調(diào)用

本篇重點(diǎn)介紹了GO函數(shù)(func)的聲明與使用,下一篇將介紹GO的結(jié)構(gòu) struct


網(wǎng)頁題目:go語言main函數(shù) go語言基本語法
新聞來源:http://weahome.cn/article/dosogih.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部