当前位置: 首页 > 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


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

相关文章:

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

背景 最近项目使用中有用到go mod 和 goyacc工具。goyacc涉及到编译原理的词法分析,文法分析等功能,可以用来生成基于golang的语法分析文件。本期是记录一个使用中遇到的依赖相关的问题。因为用到goyacc,需要生成goyacc的可执行文件。 而项目…...

洛谷 P2574 XOR的艺术/CF242E XOR on Segment 题解

1.XOR的艺术 题意 给定一个长度为 n n n的、只含有数字 0 , 1 0,1 0,1的字符串和两种操作。 对于每种操作,给定 o p , l , r op,l,r op,l,r: o p 0 op0 op0表示将字符串的 [ l , r ] [l, r] [l,r]区间内的 0 0 0变成 1 1 1, 1 1 1变成 0 …...

包管理器-汇总介绍

包管理器是一种在操作系统或软件开发环境中用于自动化软件包(程序、库等)的安装、升级、配置和卸载等操作的工具。它能帮助用户更方便地管理软件及其依赖关系,以下是不同操作系统和开发环境中常见的包管理器介绍: 操作系统层面的…...

mysql系列8—Innodb的undolog

背景 本文涉及的内容较为底层,做了解即可,是以前学习《高性能mysql》和《mysql是怎样运行的》的笔记整理所得。 undolog设计的初始目的是保证事务的原子性。mysql的修改操作发生后,如果所在的事务未被提交,如mysql服务或者操作系统…...

静默安装OGG for MySQL微服务版本,高效开展数据同步和迁移

一、背景 本文从Oracle GoldenGate微服务版的概念和组件介绍开始,从零介绍了怎么开始安装GoldenGate 21c for Oracle微服务版本的软件及部署。当然了,微服务版除新功能外包含传统版所有的功能。 二、安装部署 (一)下载OGG for …...

【Golang 面试题】每日 3 题(五十五)

✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/UWz06 📚专栏简介:在这个专栏中,我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏…...

PHP关键字入门指南:分类与功能全解析

如果你是刚接触PHP的新手,可能会对代码中那些“特殊单词”感到困惑。别担心!本文将用最通俗易懂的方式,带你认识PHP中的关键字——它们就像编程世界的“魔法咒语”,每个都有独特的作用。文末还附有代码示例,帮你快速上手! 一、什么是PHP关键字? PHP关键字是语言内置的特…...

消息中间件深度剖析:以 RabbitMQ 和 Kafka 为核心

在现代分布式系统和微服务架构的构建中,消息中间件作为一个不可或缺的组件,承担着系统间解耦、异步处理、流量削峰、数据传输等重要职能。尤其是在面临大规模并发、高可用性和可扩展性需求时,如何选择合适的消息中间件成为了开发者和架构师们…...

【万字详细教程】Linux to go——装在移动硬盘里的Linux系统(Ubuntu22.04)制作流程;一口气解决系统安装引导文件迁移显卡驱动安装等问题

Linux to go制作流程 0.写在前面 关于教程Why Linux to go?实际效果 1.准备工具2.制作步骤 下载系统镜像硬盘分区准备启动U盘安装系统重启完成驱动安装将系统启动引导程序迁移到移动硬盘上 3.可能出现的问题 3.1.U盘引导系统安装时出现崩溃3.2.不影响硬盘里本身已有…...

HCIA项目实践---OSPF的基本配置

9.5.12 OSPF的基本配置 (所搭环境如上图所示) A 先配置IP地址 (先进入路由器R1的0/0/0接口配置IP地址,再进入环回接口配置IP地址) (配置R2路由器的0/0/0和0/0/1以及环回接口的IP地址) (置R3路由器的0/0/0接…...

Vue 自动配置表单 el-switch等不常用组件覆盖默认值问题

有自动解析表单的vue组件如下&#xff0c;其原理是调用一个配置表单定义的接口&#xff0c;然后再调用获取表单配置的接口并将配置的数据覆盖表单的默认值。其中el-switch的配置值没有覆盖默认值&#xff0c;分析其原因。 主页面如下&#xff1a; <template> <div cla…...

零基础购买阿里云服务器,XShell连接云服务器

目录 1.环境搭建方式 2. 使用云服务器 3.使用终端软件登录到Linux 4.使用XShell登录主机 5.连接失败的原因&#xff1a; 下一篇更新&#xff1a;Linux的基础指令以及如何Linux的环境搭建 1.环境搭建方式 主要有四种: 1.直接安装在物理机上&#xff0c;虽然Linux有图形化…...

【系统架构设计师】虚拟机体系结构风格

目录 1. 说明2. 解释器体系结构风格3. 规则系统体系结构风格4. 例题4.1 例题1 1. 说明 1.p263。2.虚拟机体系结构风格的基本思想是人为构建一个运行环境&#xff0c;在这个环境之上&#xff0c;可以解析与运行自定义的一些语言&#xff0c;这样来增加架构的灵活性。3.虚拟机体…...

C语言中qsort函数使用技巧

在C语言的标准库中&#xff0c; qsort 函数是一个强大的通用排序函数&#xff0c;它采用快速排序算法&#xff0c;能够高效地对各种数据类型的数组进行排序。掌握 qsort 函数的使用技巧&#xff0c;对于提升程序的效率和代码的简洁性至关重要。 一、qsort函数基本介绍 qsort 函…...

WPF的Prism框架的使用

安装Prism.DryIoc库&#xff1a; Prism的区域和模块化&#xff1a; 一个区域可以显示一个用户控件 一个模块就是一个项目&#xff0c;也就是一个类库 动态切换用户控件的案例&#xff1a; <Grid><Grid.RowDefinitions><RowDefinition Height"auto"…...

LeetCode每日精进:142.环形链表II

题目链接&#xff1a;142.环形链表II 题目描述&#xff1a; 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环…...

CPP集群聊天服务器开发实践(五):nginx负载均衡配置

1 负载均衡器的原理与功能 单台Chatserver可以容纳大约两万台客户端同时在线聊天&#xff0c;为了提升并发量最直观的办法需要水平扩展服务器的数量&#xff0c;三台服务器可以容纳六万左右的客户端。 负载均衡器的作用&#xff1a; 把client的请求按照负载均衡算法分发到具体…...

easyexcel解析excel文件的时候报错

easyexcel解析xls文件的时候&#xff0c;报错Exception in thread "main" com.alibaba.excel.exception.ExcelAnalysisException: java.lang.NoClassDefFoundError: org/objectweb/asm/Type at com.alibaba.excel.analysis.ExcelAnalyserImpl.analysis(ExcelAnalyser…...

Android设备 网络安全检测

八、网络与安全机制 6.1 网络框架对比 volley&#xff1a; 功能 基于HttpUrlConnection;封装了UIL图片加载框架&#xff0c;支持图片加载;网络请求的排序、优先级处理缓存;多级别取消请求;Activity和生命周期的联动&#xff08;Activity结束生命周期同时取消所有网络请求 …...

word分栏使得最后一页内容自动平衡

word分栏使得最后一页内容自动平衡 Word中的分页符分节符 Word中的分页符与分节符统称为分隔符 【分页符】 是将一页内容分成两页, 但分离后的两页属于同一节;分页符用于强制在当前位置分页, 后续内容从下一页开始;分页符对应快捷键 Ctrl Enter ; 【分节符】 分节符用…...

基于AWS Serverless构建企业级OpenAI代理网关:安全、可控、低成本集成AI服务

1. 项目概述与核心价值最近在折腾一个很有意思的项目&#xff0c;叫aws-openai&#xff0c;来自 GitHub 上的FullStackWithLawrence仓库。乍一看名字&#xff0c;你可能会觉得这又是一个简单的“把 OpenAI API 套个 AWS 壳”的玩具。但实际深入进去&#xff0c;你会发现它的设计…...

CANN/hixl性能基准测试

目录 【免费下载链接】hixl HIXL&#xff08;Huawei Xfer Library&#xff09;是一个灵活、高效的昇腾单边通信库&#xff0c;面向集群场景提供简单、可靠、高效的点对点数据传输能力。 项目地址: https://gitcode.com/cann/hixl 目录Benchmarks目录结构环境要求程序编译…...

CANN/runtime流内存操作

11-09 流内存操作 【免费下载链接】runtime 本项目提供CANN运行时组件和维测功能组件。 项目地址: https://gitcode.com/cann/runtime 本章节描述内存值写入与等待接口&#xff0c;用于在 Stream 上异步写入/等待内存值。 aclError aclrtValueWrite(void* devAddr, uin…...

CANN学习中心CMake配置详解

CMake 配置详解 【免费下载链接】cann-learning-hub CANN 学习中心仓&#xff0c;支持在线互动运行、边学边练&#xff0c;提供教程、示例与优化方案&#xff0c;一站式助力昇腾开发者快速上手。 项目地址: https://gitcode.com/cann/cann-learning-hub CMakePresets.js…...

非洲AI本土化实践:医疗、农业、金融、教育四大领域创新与挑战

1. 非洲AI发展的现实图景&#xff1a;机遇与挑战并存 谈论人工智能&#xff0c;我们常常将目光聚焦在硅谷、北京或伦敦。但如果你把视线转向非洲大陆&#xff0c;会发现一片截然不同却又充满生机的AI创新土壤。这里没有OpenAI或DeepMind那样的科技巨头&#xff0c;却有着一群直…...

人工智能日报。今日 AI 重要动态 · 2026.05.08

&#x1f4f0; 今日 AI 重要动态 2026.05.08 1. &#x1f916; Claude 主动助手 Orbit 功能曝光 事件&#xff1a; Anthropic 的 Claude 主动助手功能「Orbit」本周被技术情报站 testingcatalog 从客户端代码中挖掘曝光。Orbit 不需要用户发起对话&#xff0c;会在后台持续运…...

绝地求生罗技鼠标宏终极指南:三步实现智能压枪的完整教程

绝地求生罗技鼠标宏终极指南&#xff1a;三步实现智能压枪的完整教程 【免费下载链接】logitech-pubg PUBG no recoil script for Logitech gaming mouse / 绝地求生 罗技 鼠标宏 项目地址: https://gitcode.com/gh_mirrors/lo/logitech-pubg 你是否在绝地求生&#xff…...

UDS诊断实战:手把手教你用0x3D服务(WriteMemoryByAddress)刷写ECU标定数据

UDS诊断实战&#xff1a;手把手教你用0x3D服务&#xff08;WriteMemoryByAddress&#xff09;刷写ECU标定数据 在汽车电子诊断领域&#xff0c;ECU标定数据的修改是工程师们经常需要面对的任务。想象一下这样的场景&#xff1a;台架测试中某个燃油喷射参数需要微调&#xff0c;…...

OpenClaw开源抓取框架应用实践:从模块化设计到工业自动化落地

1. 项目概述与核心价值最近在开源社区里&#xff0c;我注意到一个名为ammohitchaprana/OpenClaw-Applications-Usecases的项目仓库。这个标题本身就像一把钥匙&#xff0c;指向了一个非常具体且充满潜力的技术领域&#xff1a;基于“OpenClaw”的应用与用例集合。对于很多刚接触…...

Aegis-Veil:基于Linux命名空间的桌面应用沙箱隔离实践

1. 项目概述&#xff1a;Aegis-Veil 是什么&#xff0c;以及它解决了什么问题如果你在开源社区里混迹过一段时间&#xff0c;尤其是对系统安全、隐私增强或者沙箱技术感兴趣&#xff0c;那么你很可能已经听说过smouj/Aegis-Veil这个项目。乍一看这个标题&#xff0c;可能会觉得…...