成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

go語(yǔ)言中的包引用 go引用類(lèi)型

golang 遇到導(dǎo)入自定義包導(dǎo)入不進(jìn)去的問(wèn)題解決

當(dāng)嘗試了網(wǎng)上所有方法,仍然發(fā)現(xiàn)在主文件.go中或者在其他地方引用自定義包時(shí),自動(dòng)刪除導(dǎo)入的包的情況解決如下:

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)建站!專(zhuān)注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、小程序制作、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶(hù)創(chuàng)新互聯(lián)還提供了虎丘免費(fèi)建站歡迎大家使用!

如你存放地址的包在src/xxx.com中時(shí)請(qǐng)通過(guò)命令行進(jìn)入這個(gè)文件夾的位置

然后執(zhí)行g(shù)o mod init xxx.com/m/v1回車(chē)

上述的.../m/v1隨便,這個(gè)是按照官方的建議這么寫(xiě)的方便維護(hù)版本吧?!

再次嘗試引入自定義包,引用方式如下:

xxx.com/m/v1

|_test

| |_test.go

|_main.go

import (

"fmt"

"xxx.com/m/v1/test"

)

獻(xiàn)給被折磨許久的小伙伴們。。。

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

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

根據(jù)上面的描述,Go語(yǔ)言中通過(guò)包中函數(shù)的名稱(chēng)來(lái)區(qū)分公共函數(shù)和私有函數(shù),我們?cè)趍ain函數(shù)中是無(wú)法調(diào)用myPrivateFunc的

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

返回如下,這里面對(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語(yǔ)言 一個(gè)主package包引入同級(jí)目錄下go文件包編譯出錯(cuò)??!

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

1、先使用import "strings"導(dǎo)入strings庫(kù)。

2、HasPrefix?判斷字符串?s?是否以?prefix?開(kāi)頭。

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é)果。

golang中包循環(huán)依賴(lài)問(wèn)題

一、go中為什么不允許循環(huán)依賴(lài)

二、如何解決循環(huán)依賴(lài)

循環(huán)依賴(lài)就是A引用B,B又引用A,形成了一個(gè)包引用的閉環(huán)。要解決循環(huán)引用,就是打破這個(gè)閉環(huán),讓A引用B,B不能引用A??聪旅娴睦樱?/p>

包結(jié)構(gòu)如下:

執(zhí)行main函數(shù)報(bào)錯(cuò):

報(bào)錯(cuò)的原因是 我們?cè)趫?zhí)行bagA.PrintA()的時(shí)候,引用了A包,A包又引用了B包,B包又引用了A包,形成了循環(huán)依賴(lài)。那我們打破依賴(lài)就可以了。

那么該怎么打破呢?

我們發(fā)現(xiàn)A包引用B包,是因?yàn)锳包需要調(diào)用B包的bagB.GetName()方法;同樣的,B包引用A包,是因?yàn)锽包需要調(diào)用A包的bagA.GetName()方法。那么,我們有沒(méi)有不需要引包就能使B包可以調(diào)用A包的方法呢?

當(dāng)然是有的??聪旅妫?/p>

我們?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è)方法變量來(lái)替代A中的方法(來(lái)完成B不引用A),A來(lái)為該變量賦值(因?yàn)锳引用B,A可以調(diào)用B的方法來(lái)完成賦值)。 解決循環(huán)依賴(lài)問(wèn)題,思想就是打破包的循環(huán)依賴(lài),以不導(dǎo)包的方式調(diào)用其他包的方法。所以,采用接口的形式也可以解決循環(huán)依賴(lài)(B定義一個(gè)接口,A中你想要調(diào)用的方法實(shí)現(xiàn)了該接口,A中完成接口變量賦值,B來(lái)調(diào)用接口方法,有時(shí)間再補(bǔ)充例子吧)

本文名稱(chēng):go語(yǔ)言中的包引用 go引用類(lèi)型
URL標(biāo)題:http://jinyejixie.com/article26/dosgpjg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、網(wǎng)站策劃、網(wǎng)站排名全網(wǎng)營(yíng)銷(xiāo)推廣、微信公眾號(hào)、網(wǎng)站改版

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(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í)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)
丹东市| 武安市| 玉林市| 盐边县| 景东| 台安县| 秦皇岛市| 依安县| 旬阳县| 磐安县| 攀枝花市| 惠州市| 阿拉善右旗| 鹤岗市| 黄梅县| 青浦区| 陆河县| 双城市| 双城市| 东阳市| 海安县| 湘阴县| 星子县| 凤冈县| 平果县| 凤台县| 莱州市| 喀喇| 天等县| 枝江市| 海城市| 沅陵县| 松原市| 安陆市| 太白县| 玉环县| 南安市| 玉溪市| 孙吴县| 石狮市| 横峰县|