当前位置: 首页 > news >正文

使用新版本golang项目中goyacc依赖问题的处理

背景

最近项目使用中有用到go mod 和 goyacc工具。goyacc涉及到编译原理的词法分析,文法分析等功能,可以用来生成基于golang的语法分析文件。本期是记录一个使用中遇到的依赖相关的问题。因为用到goyacc,需要生成goyacc的可执行文件。
而项目使用了go mod 去管理依赖,包括因为golang版本,导致后续遇到很多的问题,这里进行下记录。

分析

首先,本地的golang版本是1.15.6 linux/amd64。在1.8以后,goyacc被移动到了golang.org/x/tools/cmd/goyacc中。而我的项目用了go mod管理依赖,同时会将依赖放置到本地的vendor目录下。但是诡异的是,在执行go mod vendor
以后,在vendor目录下,找不到golang.org/x/tools。即便在go.mod文件中已经引入golang.org/x/tools的依赖。

而依赖写入到go.mod中,如下:

    golang.org/x/tools v0.1.4

甚至于想过使用某些第三方的依赖来添加goyacc,但这个语法解析属于非常底层核心的功能,担心有风险,也就没采用这种方法。
根据如上描述的问题,经过尝试,需要在某个代码中做一次导入,才会在vendor目录中出现,如下:

import (//在这里引用这个可以实现在vendor中导入_ "golang.org/x/tools/cmd/goyacc""testing"
)

不知道是go mod需要配置下,还是它目前的机制就是这样的,或者说是一种特性。这样使用还是有些不太方便的。经过如上的修改后,确实能够找到golang.org/x/tools了。但是又出现新的问题。
在使用go build生成goyacc可执行文件的时候,出现如下的报错。

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

根据报错在网上搜索一圈没找到解决版本,相关的资料也很少。于是又回到报错的信息,尝试在build命令后加上报错信息提示的参数,最终项目编译通过了。如下:

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

总结

以上就是本期的内容,目前对于golang mod 等依赖管理的使用还是不太熟悉,而且和java成熟的maven等机制来比较,确实还是有些差距,使用起来不是很方便,期待往后可以更好吧。

参考资料

  1. goyacc
  2. Go实现自定义语言的基础 - goyacc简易入门
  3. golang1.8以后yacc安装和使用
最后编辑于:2025-02-05 20:50:53


喜欢的朋友记得点赞、收藏、关注哦!!!

http://www.lryc.cn/news/537883.html

相关文章:

  • 洛谷 P2574 XOR的艺术/CF242E XOR on Segment 题解
  • 包管理器-汇总介绍
  • mysql系列8—Innodb的undolog
  • 静默安装OGG for MySQL微服务版本,高效开展数据同步和迁移
  • 【Golang 面试题】每日 3 题(五十五)
  • PHP关键字入门指南:分类与功能全解析
  • 消息中间件深度剖析:以 RabbitMQ 和 Kafka 为核心
  • 【万字详细教程】Linux to go——装在移动硬盘里的Linux系统(Ubuntu22.04)制作流程;一口气解决系统安装引导文件迁移显卡驱动安装等问题
  • HCIA项目实践---OSPF的基本配置
  • Vue 自动配置表单 el-switch等不常用组件覆盖默认值问题
  • 零基础购买阿里云服务器,XShell连接云服务器
  • 【系统架构设计师】虚拟机体系结构风格
  • C语言中qsort函数使用技巧
  • WPF的Prism框架的使用
  • LeetCode每日精进:142.环形链表II
  • CPP集群聊天服务器开发实践(五):nginx负载均衡配置
  • easyexcel解析excel文件的时候报错
  • Android设备 网络安全检测
  • word分栏使得最后一页内容自动平衡
  • 完全免费稳定WebTerm网页版在线SSH连接,在线远程连接云服务器,可以控制背景,支持SFTP访问服务器文件。无需安装即可在线连接和管理服务器的SSH终端工具。支持跨平台设备。
  • 微信小程序医院挂号系统
  • 编程题-最大子数组和(中等-重点【贪心、动态规划、分治思想的应用】)
  • 阿里云视频点播,基于thinkphp8上传视频
  • 《探秘AI绿色计算:降低人工智能硬件能耗的热点技术》
  • 神经网络常见激活函数 9-CELU函数
  • 软考高级《系统架构设计师》知识点(四)
  • opencv交叉编译
  • 安装vite报错Install for [ ‘create-vite@latest‘ ] failed with code 1
  • Spring框架中都用到了哪些设计模式?
  • LabVIEW 中 dotnet.llb 库功能