最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

golang中import cycle not allowed解決的一種思路

 更新時(shí)間:2018年08月13日 11:30:20   作者:南尼喜嘛斯嘎  
這篇文章主要給大家介紹了關(guān)于golang中import cycle not allowed解決的一種思路,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

發(fā)現(xiàn)問(wèn)題

項(xiàng)目中碰到了一些問(wèn)題,使用了指針函數(shù)的思路來(lái)解決相應(yīng)問(wèn)題

在實(shí)際項(xiàng)目中,因?yàn)閮蓚€(gè)項(xiàng)目互相引了對(duì)方的一些方法,導(dǎo)致了循環(huán)引用的錯(cuò)誤,原本可以使用http的請(qǐng)求來(lái)解決,經(jīng)過(guò)其他人指導(dǎo),發(fā)現(xiàn)了可以使用指針函數(shù)來(lái)解決

這里通過(guò)一個(gè)簡(jiǎn)單的例子來(lái)說(shuō)明,首先是例子的結(jié)構(gòu),我們僅僅用到了這兩個(gè)文件:ciconnector.go和rockettest.go


例子結(jié)構(gòu)

原本設(shè)定的方法是這兩個(gè)包里的函數(shù)互相調(diào)用,那么我們通過(guò)代碼來(lái)看下怎么解決相應(yīng)的問(wèn)題。

首先是rockettest.go,這里調(diào)用了ciconnector.go中的Test方法,代碼如下

package main
import (
 "fmt"
 "citest"
)

func main() {
 str := "hello world"
 citest.Test(str, rocketfunction)
}

func rocketfunction(str string) {
 fmt.Println(str)
}

這里我們將函數(shù)名稱作為參數(shù)傳遞給ciconnector.go的Test函數(shù)中

接下來(lái)我們看下ciconnector.go的代碼

package citest
import (
 "fmt"
 "reflect"
 "strconv"
 "unsafe"
)

type Callback func(str string)

func Test(str string, callback Callback) {

 //pointer 轉(zhuǎn) string
 straddress := &callback
 strPiniter := fmt.Sprintf("%d", unsafe.Pointer(straddress))
 fmt.Println("connection is", strPiniter)

 //string 轉(zhuǎn) pointer
 intPointer, _ := strconv.ParseInt(strPiniter, 10, 0)
 var pointer *Callback
 pointer = *(**Callback)(unsafe.Pointer(&intPointer))

 (Callback)(*pointer)(str)
}

在ciconnector.go中,我們定義了一個(gè)Callback類型的函數(shù),這個(gè)函數(shù)和rockettest.go中傳入的函數(shù)類型相同,可以理解為一個(gè)接口

之后變量straddress則是傳入函數(shù)的地址,我們將地址通過(guò)fmt.Sprintf的形式轉(zhuǎn)為了十進(jìn)制的數(shù)的string類型,并賦值給strPiniter

至于string轉(zhuǎn)換回pointer,則是通過(guò)strconvs將string轉(zhuǎn)為了十進(jìn)制的數(shù)字,通過(guò)多次對(duì)地址取值后獲取到相應(yīng)的函數(shù)指針,最后將其轉(zhuǎn)換為Callback類型后,即可使用,這里使用的函數(shù)是rockettest.go中的函數(shù),但是卻沒(méi)有調(diào)用其內(nèi)容

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • golang時(shí)間/時(shí)間戳的獲取與轉(zhuǎn)換實(shí)例代碼

    golang時(shí)間/時(shí)間戳的獲取與轉(zhuǎn)換實(shí)例代碼

    說(shuō)實(shí)話,golang的時(shí)間轉(zhuǎn)化還是很麻煩的,最起碼比php麻煩很多,下面這篇文章主要給大家介紹了關(guān)于golang時(shí)間/時(shí)間戳的獲取與轉(zhuǎn)換的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • Golang設(shè)計(jì)模式之組合模式講解

    Golang設(shè)計(jì)模式之組合模式講解

    這篇文章主要介紹了Golang設(shè)計(jì)模式之組合模式,組合模式針對(duì)于特定場(chǎng)景,如文件管理、組織管理等,使用該模式能簡(jiǎn)化管理,使代碼變得非常簡(jiǎn)潔
    2023-01-01
  • golang 如何刪除二進(jìn)制文件中的源碼路徑信息

    golang 如何刪除二進(jìn)制文件中的源碼路徑信息

    這篇文章主要介紹了golang 如何刪除二進(jìn)制文件中的源碼路徑信息,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-04-04
  • Go并發(fā)編程實(shí)踐

    Go并發(fā)編程實(shí)踐

    并發(fā)編程一直是Golang區(qū)別與其他語(yǔ)言的很大優(yōu)勢(shì),也是實(shí)際工作場(chǎng)景中經(jīng)常遇到的。近日筆者在組內(nèi)分享了我們常見(jiàn)的并發(fā)場(chǎng)景,及代碼示例,以期望大家能在遇到相同場(chǎng)景下,能快速的想到解決方案,或者是拿這些方案與自己實(shí)現(xiàn)的比較,取長(zhǎng)補(bǔ)短。現(xiàn)整理出來(lái)與大家共享
    2017-01-01
  • Golang錯(cuò)誤處理:異常捕捉和恢復(fù)機(jī)制

    Golang錯(cuò)誤處理:異常捕捉和恢復(fù)機(jī)制

    Golang中,異常處理是通過(guò) defer + panic + recover 的方式來(lái)實(shí)現(xiàn)的,使用 defer 可以將清理操作注冊(cè)到函數(shù)執(zhí)行完畢后執(zhí)行,而 panic 和 recover 可以用于處理異常,通過(guò)組合使用這些功能,可以實(shí)現(xiàn)更加健壯的程序
    2024-01-01
  • Go官方工具鏈用法詳解

    Go官方工具鏈用法詳解

    Go官方工具鏈工具要求所有的Go源代碼文件必須以.go后綴結(jié)尾。這里,我們假設(shè)一個(gè)最簡(jiǎn)單的Go程序放在hello.go的文件中,下面通過(guò)示例代碼給大家介紹Go官方工具鏈用法簡(jiǎn)介,需要的朋友可以參考下
    2021-10-10
  • golang文件內(nèi)容覆蓋問(wèn)題的分析及解決

    golang文件內(nèi)容覆蓋問(wèn)題的分析及解決

    通過(guò)golang讀取數(shù)據(jù)庫(kù)站點(diǎn)映射配置,生成nginx conf文件,并檢查和重啟nginx服務(wù),已達(dá)到站點(diǎn)自動(dòng)化部署目的,當(dāng)目標(biāo)文件中內(nèi)容很長(zhǎng),而寫(xiě)入的內(nèi)容很短時(shí),目標(biāo)文件內(nèi)容無(wú)法完全覆蓋,本文給大家介紹了解決方法,需要的朋友可以參考下
    2024-01-01
  • 深入string理解Golang是怎樣實(shí)現(xiàn)的

    深入string理解Golang是怎樣實(shí)現(xiàn)的

    這篇文章主要為大家介紹了深入string理解Golang是怎樣實(shí)現(xiàn)的原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • Go遍歷struct,map,slice的實(shí)現(xiàn)

    Go遍歷struct,map,slice的實(shí)現(xiàn)

    本文主要介紹了Go語(yǔ)言遍歷結(jié)構(gòu)體、切片和字典的方法,對(duì)大家的學(xué)習(xí)具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-06-06
  • golang使用接口進(jìn)行靈活緩存

    golang使用接口進(jìn)行靈活緩存

    緩存是編程中一種常見(jiàn)的技術(shù),通過(guò)存儲(chǔ)昂貴的計(jì)算或?IO?結(jié)果來(lái)快速查找,從而提高性能,本文將介紹一下Go的接口如何幫助構(gòu)建靈活、可擴(kuò)展的緩存,感興趣的可以了解下
    2023-09-09

最新評(píng)論

灵武市| 玉山县| 稻城县| 金华市| 延庆县| 时尚| 监利县| 宜宾县| 喀喇| 定陶县| 隆子县| 鸡泽县| 竹北市| 灵璧县| 绥滨县| 宁国市| 巴彦县| 工布江达县| 海原县| 马鞍山市| 安远县| 满洲里市| 台北县| 紫阳县| 沂源县| 仙游县| 伊宁市| 德安县| 长白| 宜良县| 芜湖县| 晋城| 铜川市| 甘南县| 揭东县| 博罗县| 公主岭市| 铜梁县| 吉木萨尔县| 石嘴山市| 綦江县|