iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > GO >这是 ast 解析的正确行为吗
  • 359
分享到

这是 ast 解析的正确行为吗

2024-04-05 00:04:11 359人浏览 独家记忆
摘要

本篇文章向大家介绍《这是 ast 解析的正确行为吗》,主要包括,具有一定的参考价值,需要的朋友可以参考一下。问题内容我正在学习如何使用 golang 的 ast 库以及如何工作。我正在解析 http

本篇文章向大家介绍《这是 ast 解析的正确行为吗》,主要包括,具有一定的参考价值,需要的朋友可以参考一下。

问题内容

我正在学习如何使用 golang 的 ast 库以及如何工作。我正在解析 https://GitHub.com/modern-Go/concurrent,避免测试文件和 go_below_19.go,因为它会导致错误。

我的问题是解析文件 unbounded_executor.go 中的这些行,

var handlepanic = func(recovered interface{}, funcname string) {
    errorlogger.println(fmt.sprintf("%s panic: %v", funcname, recovered))
    errorlogger.println(string(debug.stack()))
}

两个实例中 errorlogger 的 ast.ident 都有一个 nil 对象。

但是,我相信它不应该为零,应该引用 log.go 中的这些行,

// errorlogger is used to print out error, can be set to writer other than stderr
var errorlogger = log.new(os.stderr, "", 0)

是我错了,还是解析器有问题?我遵循了一些有关解析文件的参考资料,并在每个文件中重用 *token.fileset 并使用 parsecomments 作为模式。

编辑:

围绕此有一个大型代码库,因此演示此内容的代码将包含片段。

这是在所有非测试 go 文件中使用相同的 fset 执行的,没有会阻止代码在 1.16 中使用的构建限制

parsedFile, parseErr := parser.ParseFile(fset, filePath, nil, parser.ParseComments)


正确答案


致电 ast.NewPackage 解析 ast 中的标识符:

fset := token.NewFileSet()
files := make(map[string]*ast.File)
for _, name := range []string{"unbounded_executor.go", "log.go"} {
    f, err := parser.ParseFile(fset, name, nil, parser.ParseComments)
    if err != nil {
        log.Fatal(err)
    }
    files[name] = f
}

ast.NewPackage(fset, files, nil, nil)

ast.Inspect(files["unbounded_executor.go"], func(n ast.node) bool {
    if n, ok := n.(*ast.Ident); ok && n.Name == "ErrorLogger" {
        fmt.Println(n.Obj)
    }
    return true
})

由于未提供正确的导入程序,并且文件列表未包含包中的所有文件,因此 newpackage 返回未解析的符号错误。

到这里,我们也就讲完了《这是 ast 解析的正确行为吗》的内容了。个人认为,基础知识的学习和巩固,是为了更好的将其运用到项目中,欢迎关注编程网公众号,带你了解更多关于的知识点!

您可能感兴趣的文档:

--结束END--

本文标题: 这是 ast 解析的正确行为吗

本文链接: https://www.lsjlt.com/news/596259.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 这是 ast 解析的正确行为吗
    本篇文章向大家介绍《这是 ast 解析的正确行为吗》,主要包括,具有一定的参考价值,需要的朋友可以参考一下。问题内容我正在学习如何使用 golang 的 ast 库以及如何工作。我正在解析 http...
    99+
    2024-04-05
  • html的正确理解是什么
    HTML,即超文本标记语言,是一种标记语言,它用于编写web文档并实现网页的结构和内容。HTML是web开发中的重要组成部分,它的正确理解有助于开发者更好地掌握web技术。HTML的原始目的是为了向用户展示文本(包括图像和链接等内容),并且...
    99+
    2023-05-14
  • C#使用HttpClient的正确方式你了解吗
    目录错误使用New HttpClientstatic HttpClient正确使用错误使用 New HttpClient 如下面一段代码,日常开发中经常使用的 call http 方...
    99+
    2024-04-02
  • 如何正确解析 Golang 中的 JSON 数据?
    非常抱歉,由于您没有提供文章标题,我无法为您生成一篇高质量的文章。请您提供文章标题,我将尽快为您生成一篇优质的文章。...
    99+
    2024-05-14
  • 将 Go func 转换为 uintptr 的正确方法是什么?
    在Go语言中,将一个`func`类型转换为`uintptr`类型是一项常见的操作,但是正确的方法并不是直接进行转换,因为这样可能会导致一些潜在的问题。正确的方法是使用`unsafe`包...
    99+
    2024-02-09
    go语言
  • c语言编译正确但是无法运行怎么解决
    当C语言程序编译成功但无法运行时,通常有以下几个可能的原因和解决方法:1. 程序中存在语法错误:编译器能够检测到语法错误,但是这些错...
    99+
    2023-08-08
    c语言
  • Node.js ESLint错误解析:解决ESlint报错的正确姿势
    ESLint 是一个流行的 JavaScript 代码分析工具,它可以帮助开发者发现代码中的语法错误、逻辑错误和最佳实践问题。尽管 ESLint 十分强大,但它也可能报出一些难以理解的错误。本文将列出一些常见的 ESLint 错误,并提供...
    99+
    2024-02-13
    ESLint, JavaScript, 代码分析, 代码错误, 最佳实践
  • 正确解决IE6的问题的方法是什么
    正确解决IE6的问题的方法是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。这个话题是从IE6 No More引起的,那本是一场反对IE6浏览器的行动,几乎每个身边的开发人员...
    99+
    2023-06-12
  • 想要在Java中正确设置日志路径?这篇教程是必看的!
    在Java应用程序中,日志是一个非常重要的组成部分。它可以帮助我们追踪应用程序的运行状态,定位问题和错误。但是,正确设置日志路径并不总是那么容易。在本文中,我们将介绍如何在Java中正确设置日志路径,以便您可以轻松地管理和查看应用程序的日...
    99+
    2023-10-17
    日志 教程 path
  • 正确理解C++的构造函数和析构函数
    目录一、构造函数二、C++类的内存模型2.1、只定义成员函数2.2、往空类中添加静态成员变量2.3、再加入非静态成员变量三、this指针四、析构函数一、构造函数 首先,由于类只是一个...
    99+
    2024-04-02
  • Apache2无法正确解析PHP文件的处理方法
    由于篇幅限制,以下是一个简短的文章: Apache2是一种常用的Web服务器软件,而PHP是一种广泛使用的服务器端脚本语言。在搭建网站过程中,有时会遇到Apache2无法正确解析PHP...
    99+
    2024-03-08
    php apache 解析 php解析
  • 数据库事务隔离级别解析:确保数据操作的正确性
    事务是数据库管理系统中的一组原子操作,它是一个不可分割的工作单元,要么全部成功,要么全部失败。事务隔离级别是指数据库管理系统在并发环境中执行事务时,用来防止事务之间相互影响的一种机制。它可以保证每个事务都能够独立地执行,不受其他事务的影...
    99+
    2024-02-25
    数据库 事务 隔离级别 并发性 ACID
  • macOS 运行xxxx.command文件提示”无法执行,因为您没有正确的访问权限“解决办法
    在macOS Catalina 、macOS Big Sur、macOS Monterey 12、macOS Ventura 13系统直接双击.command文件运行时候提示”无法执行,因为您没有正确的访问权限“怎么办? 文件“xxxx...
    99+
    2023-09-23
    macos linux ubuntu
  • 如何进行Python数据分析?正确的“入门之路”三部曲!
    Python是一种面向对象、直译式计算机程序设计语言,由于他简单、易学、免费开源、可移植性、可扩展性等特点,Python又被称之为胶水语言。下图为主要程序语言近年来的流行趋势,Python受欢迎程度扶摇直上。由于Python拥有非常丰富的库...
    99+
    2023-06-05
  • macOS 运行xxx.command文件提示”无法执行,因为您没有正确的访问权限“
    使用苹果mac电脑运行.command文件时,是否遇到弹出”无法执行,因为您没有正确的访问权限“的窗口?遇到这种问题怎么解决呢?这里小编为大家带来了详细的解决方法,一起来看看吧! 解决方法: 方法一: 打开终端工具,输入以下命令: su...
    99+
    2023-09-26
    macos
  • 正确理解和判断PR劫持的方法是什么
    本篇文章为大家展示了正确理解和判断PR劫持的方法是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。PR劫持是什么? PR挟持就是用欺骗手段获得工具条上比较高的PR值显示。PR挟持的SEO作弊方法有...
    99+
    2023-06-12
  • 利用SpringBoot进行Web开发时如何正确的使用注解
    利用SpringBoot进行Web开发时如何正确的使用注解?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。一、spring-boot-starter-web 依赖...
    99+
    2023-05-31
    springboot web
  • 如何理解Python程序转为EXE文件的正确实现方法
    这篇文章给大家介绍如何理解Python程序转为EXE文件的正确实现方法,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。在Python编程语言中,开发出的程序可以转换成EXE文件来实现一些特定的操作。在这里我们将会为大家详...
    99+
    2023-06-17
  • 您是否正确地记录了Go IDE中的对象和日志?这里是一些技巧和要点!
    在Go IDE开发中,正确记录对象和日志是非常重要的。它不仅可以帮助开发人员更好地理解代码运行的情况,还可以在出现错误时提供有用的信息。下面是一些技巧和要点,帮助您正确地记录对象和日志。 使用log包记录日志 在Go语言中,log包是一...
    99+
    2023-07-20
    ide 对象 日志
  • PHP中使用NumPy进行响应重定向的正确方式是什么?
    在Web开发中,重定向是一项常见的技术。重定向可以帮助我们把用户从一个页面或URL重定向到另一个页面或URL,从而实现多种功能,例如:登录后跳转到主页、错误页面跳转到错误提示页面等等。在PHP中,使用NumPy库来实现重定向是一种非常常见...
    99+
    2023-09-30
    numy 响应 重定向
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作