這篇文章主要介紹golang中import cycle not allowed解決的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
創新互聯建站自2013年創立以來,是專業互聯網技術服務公司,擁有項目網站建設、成都網站建設網站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元泰山做網站,已為上家服務,為泰山各地企業和個人服務,聯系電話:18980820575發現問題
項目中碰到了一些問題,使用了指針函數的思路來解決相應問題
在實際項目中,因為兩個項目互相引了對方的一些方法,導致了循環引用的錯誤,原本可以使用http的請求來解決,經過其他人指導,發現了可以使用指針函數來解決
這里通過一個簡單的例子來說明,首先是例子的結構,我們僅僅用到了這兩個文件:ciconnector.go和rockettest.go
例子結構
原本設定的方法是這兩個包里的函數互相調用,那么我們通過代碼來看下怎么解決相應的問題。
首先是rockettest.go,這里調用了ciconnector.go中的Test方法,代碼如下
package main import ( "fmt" "citest" ) func main() { str := "hello world" citest.Test(str, rocketfunction) } func rocketfunction(str string) { fmt.Println(str) }
這里我們將函數名稱作為參數傳遞給ciconnector.go的Test函數中
接下來我們看下ciconnector.go的代碼
package citest import ( "fmt" "reflect" "strconv" "unsafe" ) type Callback func(str string) func Test(str string, callback Callback) { //pointer 轉 string straddress := &callback strPiniter := fmt.Sprintf("%d", unsafe.Pointer(straddress)) fmt.Println("connection is", strPiniter) //string 轉 pointer intPointer, _ := strconv.ParseInt(strPiniter, 10, 0) var pointer *Callback pointer = *(**Callback)(unsafe.Pointer(&intPointer)) (Callback)(*pointer)(str) }
在ciconnector.go中,我們定義了一個Callback類型的函數,這個函數和rockettest.go中傳入的函數類型相同,可以理解為一個接口
之后變量straddress則是傳入函數的地址,我們將地址通過fmt.Sprintf的形式轉為了十進制的數的string類型,并賦值給strPiniter
至于string轉換回pointer,則是通過strconvs將string轉為了十進制的數字,通過多次對地址取值后獲取到相應的函數指針,最后將其轉換為Callback類型后,即可使用,這里使用的函數是rockettest.go中的函數,但是卻沒有調用其內容
以上是“golang中import cycle not allowed解決的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注創新互聯成都網站設計公司行業資訊頻道!
另外有需要云服務器可以了解下創新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
本文名稱:golang中importcyclenotallowed解決的示例分析-創新互聯
本文路徑:http://m.newbst.com/article20/hsgco.html
成都網站建設公司_創新互聯,為您提供手機網站建設、Google、網站導航、電子商務、App開發、微信小程序
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯