2017-07-28 70 views
0

依賴是圍棋的一個問題,但是這是新的東西:直接依賴於庫BC 依賴三角

  • 圖書館B

    • 應用A直接取決於庫C

    如果我們在應用代碼A中有這樣的事情:

    funcyInstance := &C.FuncyObject{} 
    B.CleverFunction(funcyInstance) 
    

    當LIB B

    func CleverFunction(arg *C.FuncyObject) {} 
    

    它提出了一個錯誤:

    cannot use funcyInstance (type "*A/vendor/github.com/C".FuncyObject) as type "*B/vendor/github.com/C".FuncyObject in argument to B.CleverFunction

    我使用滑翔作爲一個依賴管理。

    我知道這種依賴關係的配置會導致存在幾種類型而不是單個類型(對於所有庫),並且可能它只是Go的反模式。無論如何...如何解決這個問題?

  • +1

    你不應該嵌套供應商目錄。它看起來像'glide'有一個'--strip-vendor'選項,而不是因爲某些原因默認。 – JimB

    回答

    1

    我刪除vendor文件夾下B,並把Cvendor文件夾(應用程序A如果我正確地得到您的結構)。

    這樣,你只能得到每種類型的一個地方。

    不知道爲什麼B將有一個vendor文件夾中的首位,因爲滑翔的建議很清楚,在此:

    http://glide.readthedocs.io/en/latest/vendor/

    Libraries (codebases without a main package) should not store outside packages in a vendor/ folder

    In applications (codebases with a main package) there should only be one vendor/ directory at the top level