使用新版本golang項目中goyacc依賴問題的處理

背景

最近項目使用中有用到go mod 和 goyacc工具。goyacc涉及到編譯原理的詞法分析,文法分析等功能,可以用來生成基于golang的語法分析文件。本期是記錄一個使用中遇到的依賴相關的問題。因為用到goyacc,需要生成goyacc的可執(zhí)行文件。
而項目使用了go mod 去管理依賴,包括因為golang版本,導致后續(xù)遇到很多的問題,這里進行下記錄。

分析

首先,本地的golang版本是1.15.6 linux/amd64。在1.8以后,goyacc被移動到了golang.org/x/tools/cmd/goyacc中。而我的項目用了go mod管理依賴,同時會將依賴放置到本地的vendor目錄下。但是詭異的是,在執(zhí)行go mod vendor
以后,在vendor目錄下,找不到golang.org/x/tools。即便在go.mod文件中已經(jīng)引入golang.org/x/tools的依賴。

而依賴寫入到go.mod中,如下:

    golang.org/x/tools v0.1.4

甚至于想過使用某些第三方的依賴來添加goyacc,但這個語法解析屬于非常底層核心的功能,擔心有風險,也就沒采用這種方法。
根據(jù)如上描述的問題,經(jīng)過嘗試,需要在某個代碼中做一次導入,才會在vendor目錄中出現(xiàn),如下:

import (
    //在這里引用這個可以實現(xiàn)在vendor中導入
    _ "golang.org/x/tools/cmd/goyacc"
    "testing"
)

不知道是go mod需要配置下,還是它目前的機制就是這樣的,或者說是一種特性。這樣使用還是有些不太方便的。經(jīng)過如上的修改后,確實能夠找到golang.org/x/tools了。但是又出現(xiàn)新的問題。
在使用go build生成goyacc可執(zhí)行文件的時候,出現(xiàn)如下的報錯。

go build -o ./bin/goyacc ./vendor/golang.org/x/tools/cmd/goyacc
without -mod=vendor, directory xxx/vendor/golang.org/x/tools/cmd/goyacc has no package path

根據(jù)報錯在網(wǎng)上搜索一圈沒找到解決版本,相關的資料也很少。于是又回到報錯的信息,嘗試在build命令后加上報錯信息提示的參數(shù),最終項目編譯通過了。如下:

go build -mod=vendor -o ./bin/goyacc ./vendor/golang.org/x/tools/cmd/goyacc

總結(jié)

以上就是本期的內(nèi)容,目前對于golang mod 等依賴管理的使用還是不太熟悉,而且和java成熟的maven等機制來比較,確實還是有些差距,使用起來不是很方便,期待往后可以更好吧。

參考資料

  1. goyacc
  2. Go實現(xiàn)自定義語言的基礎 - goyacc簡易入門
  3. golang1.8以后yacc安裝和使用
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容