使用新版本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.rhkb.cn/news/19280.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WPS的AI助手进化跟踪(灵犀+插件)

Ver V0.0 250216: 如何给WPS安装插件用以支持其他大模型LLM V0.1 250217: WPS的灵犀AI现在是DeepSeek R1(可能是全参数671B) 前言 WPS也有内置的AI,叫灵犀,之前应是自已的LLM模型,只能说是属于“能用,有好过无”,所…

计算机视觉:卷积神经网络(CNN)基本概念(一)

第一章:计算机视觉中图像的基础认知 第二章:计算机视觉:卷积神经网络(CNN)基本概念(一) 第三章:计算机视觉:卷积神经网络(CNN)基本概念(二) 第四章:搭建一个经典的LeNet5神经网络 一、引言 卷积神经网络&…

rabbitmq详解

有需要的直接看狂神的视频,讲得很好 简介 RabbitMQ 是一个开源的 消息队列中间件,实现了 AMQP(Advanced Message Queuing Protocol,先进消息队列协议)。它允许 应用程序、服务、系统之间异步地传递消息,并…

moveable 一个可实现前端海报编辑器的 js 库

目录 缘由-胡扯本文实验环境通用流程1.基础移动1.1 基础代码1.1.1 data-* 解释 1.2 操作元素创建1.3 css 修饰1.4 cdn 引入1.5 js 实现元素可移动1.6 图片拖拽2.缩放3.旋转4.裁剪 懒得改文案了,海报编辑器换方案了,如果后面用别的再更。 缘由-胡扯 导火…

计算机视觉中图像的基础认知

第一章:计算机视觉中图像的基础认知 第二章:计算机视觉:卷积神经网络(CNN)基本概念(一) 第三章:计算机视觉:卷积神经网络(CNN)基本概念(二) 第四章:搭建一个经典的LeNet5神经网络 一、图像/视频的基本属性…

java八股文-mysql

1. 索引 1.1 什么是索引 索引(index)是帮助Mysql高效获取数据的数据结构(有序).提高数据的检索效率,降低数据库的IO成本(不需要全表扫描).通过索引列对数据进行排序,降低数据排序成本,降低了CPU的消耗. 1.2 mysql索引使用的B树? 1. 没有使用二叉树,最坏情况o&…

Next.js【详解】CSS 样式方案

全局样式 Global CSS 默认已创建,即 src\app\globals.css,可根据需要修改 默认在全局布局中导入 src\app\layout.tsx import "./globals.css";组件样式 CSS Modules 新建文件 src\app\test\styles.module.css .red {color: red;}导入目标页面…

彻底解决Idea控制台中文乱码问题

中文乱码我相信每一个程序员都会遇到这种问题。 但有时候我们按照网上教程去设置,确实编码好了,但是有时候按照教程来却没能达到我们的预期。 在此之前我将所有编码都设置成了UTF-8,文件编码,项目编码,尝试(最终不需要…

[实现Rpc] 客户端划分 | 框架设计 | common类的实现

目录 3. 客户端模块划分 3.1 Network模块 3.2 Protocol模块 3.3 Dispatcher模块 3.4 Requestor模块 3.5 RpcCaller模块 3.6 Publish-Subscribe模块 3.7 Registry-Discovery模块 3.8 Client模块 4. 框架设计 4.1 抽象层 4.2 具象层 4.3 业务层 ⭕4.4 整体设计框架…

Java里ArrayList和LinkedList有什么区别?

大家好,我是锋哥。今天分享关于【Java里ArrayList和LinkedList有什么区别?】面试题。希望对大家有帮助; Java里ArrayList和LinkedList有什么区别? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 ArrayList 和 LinkedL…

【Java】分布式锁Redis和Redisson

https://blog.csdn.net/weixin_44606481/article/details/134373900 https://www.bilibili.com/video/BV1nW421R7qJ Redis锁机制一般是由 setnx 命令实现,set if not exists,语法setnx key value,将key设置值为value,如果key不存在…

c++TinML转html

cTinML转html 前言解析解释转译html类定义开头html 结果这是最终效果(部分): ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/6cf6c3e3c821446a84ae542bcc2652d4.png) 前言 在python.tkinter设计标记语言(转译2-html)中提到了将Ti…

2.2 反向传播:神经网络如何“学习“?

一、神经网络就像小学生 想象一个刚学算术的小学生,老师每天布置练习题,学生根据例题尝试解题,老师批改后指出错误。神经网络的学习过程与此相似: 输入层:相当于练习题(如数字图片)输出层&…

QEMU 通过网络实现共享文件

系列文章目录 Linux内核学习 Linux 知识(1) Linux 知识(2) WSL Ubuntu QEMU 虚拟机 Linux 调试视频 PCIe 与 USB 的补充知识 vscode 使用说明 树莓派 4B 指南 设备驱动畅想 Linux内核子系统 Linux 文件系统挂载 QEMU 通过网络实现…

当时只道是寻常

晴,2025年2月16日 卸载了油管、脸书和 X 手机 app ,太浪费我时间,以后再去经营吧。 教学技能大赛材料需要在明天之内搞定——《教学实施方案》。感觉玄,同部门有经验的老师说至少花一周时间。 只能明天早点继续接着弄&#xff…

Hive之分区表

Hive之分区表 文章目录 Hive之分区表写在前面分区表分区表基本操作引入分区表创建分区表语法加载数据到分区表中查询分区表中数据增加分区删除分区查看分区表有多少分区查看分区表结构 二级分区正常的加载数据分区表和数据产生关联 动态分区开启动态分区参数设置案例实操 写在前…

【线段树模板】

介绍 这段代码看起来是一个基于树结构的数据结构,可能是线段树或者其他类似的数据结构。主要包含了构建数据结构、查询和修改等基本操作的实现函数。以下是对每个函数的简要介绍: pushup(int u): 用于计算结点u的属性。build(int u, int l, int r): 用于…

DeepSeek辅助测试测试一 -- DeepSeek加MaxKB知识库本地部署

文章目录 前言任务拆解最终目标两种技术路径对比知识库检索增强(RAG) 大语言模型 构建知识库加本地部署DeepSeek目前的问题 前言 开工已经两周啦,开始慢慢的进入工作状态了,新的一年大家一起加油吧~ 任务拆解 最终目标 训练一…

Yuque-DL:一款强大的语雀资源下载工具

语雀是一款常用的文档管理工具,但官方未提供直接下载文档的功能。为此,可以使用第三方工具下载语雀文档。以下是使用步骤: 1. 安装工具 GitHub - gxr404/yuque-dl: yuque 语雀知识库下载 安装步骤: 确保已安装 Node.js&#xff…

【Java 面试 八股文】Spring Cloud 篇

Spring Cloud 篇 1. Spring Cloud 5大组件有哪些?2. 服务注册和发现是什么意思?Spring Cloud 如何实现服务注册发现?3. 我看你之前也用过nacos,你能说下nacos与eureka的区别?4. 你们项目负载均衡如何实现的&#xff1f…