go語(yǔ)言 一個(gè)主package包引入同級(jí)目錄下go文件包編譯出錯(cuò)是設(shè)置錯(cuò)誤造成的,解決方法為:

創(chuàng)新互聯(lián)建站是一家朝氣蓬勃的網(wǎng)站建設(shè)公司。公司專注于為企業(yè)提供信息化建設(shè)解決方案。從事網(wǎng)站開發(fā),網(wǎng)站制作,網(wǎng)站設(shè)計(jì),網(wǎng)站模板,微信公眾號(hào)開發(fā),軟件開發(fā),微信小程序開發(fā),十年建站對(duì)成都砂巖浮雕等多個(gè)行業(yè),擁有豐富的網(wǎng)站設(shè)計(jì)經(jīng)驗(yàn)。
1、先使用import "strings"導(dǎo)入strings庫(kù)。
2、HasPrefix?判斷字符串?s?是否以?prefix?開頭。
3、HasSuffix?判斷字符串?s?是否以?suffix?結(jié)尾。
4、可以看看判斷的代碼。
5、在cmd下運(yùn)行一下go run test.go,看看如下結(jié)果。
6、Contains?判斷字符串?s?是否包含?substr,也就是判斷一下S是否在strings中。
7、在cmd下運(yùn)行g(shù)o run test.go看看結(jié)果。
先看一下目錄結(jié)構(gòu),注意這里的src名稱是必須的,go在設(shè)置了GOPATH后,默認(rèn)會(huì)添加src去尋找package,暫未查詢是否有方法不按照src查詢
根據(jù)上面的描述,Go語(yǔ)言中通過包中函數(shù)的名稱來區(qū)分公共函數(shù)和私有函數(shù),我們?cè)趍ain函數(shù)中是無法調(diào)用myPrivateFunc的
此時(shí)如果執(zhí)行通過go run方式執(zhí)行,會(huì)看到如下的提示信息,這與大部分語(yǔ)言對(duì)于包管理方式相關(guān),所以我們通過兩種不同的方法來讓代碼執(zhí)行起來
返回如下,這里面對(duì)我們后續(xù)執(zhí)行有影響的兩個(gè)參數(shù)GO111MODULE和GOPATH
如果要使用gopath模式引用包,則需要關(guān)閉mod模式
設(shè)置GOPATH為當(dāng)前路徑,即main.go所在的路徑
此時(shí)再查看go env時(shí),GOPATH已經(jīng)發(fā)生改變
我們?cè)俅螄L試執(zhí)行代碼
可以看到public函數(shù)被調(diào)用
一、go中為什么不允許循環(huán)依賴
二、如何解決循環(huán)依賴
循環(huán)依賴就是A引用B,B又引用A,形成了一個(gè)包引用的閉環(huán)。要解決循環(huán)引用,就是打破這個(gè)閉環(huán),讓A引用B,B不能引用A。看下面的例子:
包結(jié)構(gòu)如下:
執(zhí)行main函數(shù)報(bào)錯(cuò):
報(bào)錯(cuò)的原因是 我們?cè)趫?zhí)行bagA.PrintA()的時(shí)候,引用了A包,A包又引用了B包,B包又引用了A包,形成了循環(huán)依賴。那我們打破依賴就可以了。
那么該怎么打破呢?
我們發(fā)現(xiàn)A包引用B包,是因?yàn)锳包需要調(diào)用B包的bagB.GetName()方法;同樣的,B包引用A包,是因?yàn)锽包需要調(diào)用A包的bagA.GetName()方法。那么,我們有沒有不需要引包就能使B包可以調(diào)用A包的方法呢?
當(dāng)然是有的。看下面:
我們?cè)贐包里定義了一個(gè)方法變量AHandler,并且提供了為這個(gè)方法變量賦值的方法Register(),然后在A包里的init()方法里,調(diào)用B包的Register()方法,將A包的GetName方法復(fù)賦值給了AHandler變量。 這樣,在B包執(zhí)行方法AHandler是不是就相當(dāng)于調(diào)用了A包的GetName方法呢?看執(zhí)行結(jié)果:
總結(jié):
上述解決辦法的核心邏輯就是,B包使用一個(gè)方法變量來替代A中的方法(來完成B不引用A),A來為該變量賦值(因?yàn)锳引用B,A可以調(diào)用B的方法來完成賦值)。 解決循環(huán)依賴問題,思想就是打破包的循環(huán)依賴,以不導(dǎo)包的方式調(diào)用其他包的方法。所以,采用接口的形式也可以解決循環(huán)依賴(B定義一個(gè)接口,A中你想要調(diào)用的方法實(shí)現(xiàn)了該接口,A中完成接口變量賦值,B來調(diào)用接口方法,有時(shí)間再補(bǔ)充例子吧)
當(dāng)前標(biāo)題:go語(yǔ)言包引用 go語(yǔ)言 庫(kù)
標(biāo)題來源:http://chinadenli.net/article10/doecsgo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、商城網(wǎng)站、手機(jī)網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站、網(wǎng)站營(yíng)銷、網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)