记录一个go语言与IDE之间的问题

本文涉及的产品
性能测试 PTS,5000VUM额度
可观测可视化 Grafana 版,10个用户账号 1个月
函数计算FC,每月15万CU 3个月
简介: 【7月更文挑战第1天】本文介绍在IDE中调试Go应用可能遇到的问题。当问题与IDE的自动完成有关,可以试着使用其他编辑器如Linux的vim是否无此问题。这可以验证表明IDE可能不完全兼容最新语言版本,建议使用无自动检测工具临时解决。

1 问题简介

我们有一个如下需求:
计算 从0 到 1290 的数字,按如下规则计数:

 如果 这个数是 2的倍数,则计数器 +1
 如果 这个数是 3的倍数,则计数器 +2
 如果 这个数是 4的倍数,则计数器 +3
 如果 这个数是 5的倍数,则计数器 +4
AI 代码解读

每次计算循环累加计数器,并输出计数器的值。

该实现代码计算0到1290间数字的计数,根据数的倍数增加计数器D:偶数+1,3的倍数+2,4的倍数+3,5的倍数+4。

DupLine函数实现此逻辑,但在VS Code(1.76.0 insider)中,//line注释引发自动补全导致错误。gopls报告解析错误,链接器指出非声明语句。

2 代码实现

我们有如下代码:

package main

import (
    "fmt"
)

    var D int

    func DupLine(c int) {
            for i := 0; i < c; i++ {
    //line ld.go:80
                    if i%2 == 0 {
                            D++
                    }
                    if i%3 == 0 {
                            D++
                            D++
                    }
    //line ld.go:80
                    if i%4 == 0 {
                            D++
                            D++
                            D++
                    }
                    if i%5 == 0 {
                            D++
                            D++
                            D++
                            D++
                    }
                    fmt.Println("d:",D)
            }
    }

    func main() {
            DupLine(1290)
    }
AI 代码解读

建立mod包模式

go mod init ldcase
go mod tidy
AI 代码解读

3 软件环境说明如下:

vs code(win10 amd64 1.76.0 insider) + golang 1.20 
AI 代码解读

注意以下注释

      //line ld.go:80 
AI 代码解读

这一行在行首的时候,保存 有自动补全的代码错误, 当保存以上代码时,将被vs code 自动补全以下代码在最后。

            D++
AI 代码解读

或者补全如下:

         D++
      }
    //line ld.go:80
            if i%4 == 0 {
                D++
                D++
                D++
            }
            if i%5 == 0 {
                D++
                D++
                D++ 
AI 代码解读

当//line ld.go:80 注释在如上位置时,vs code 将在
在解析包时,pkgname 将被首先调用以保证语法正确。

    func pkgname(ctxt *Link, lib string) string {
        return path.Clean(lib)
    }
AI 代码解读

语言服务器gopls调试信息

    unable to compute positions for parse errors: no parsed file for file
AI 代码解读

gopls输出错误,导入错误信息,包初始化失败,预期声明信息,但是发现一个孤立未声明的D:

    expected declaration, found D
AI 代码解读

链接器报错信息:

ld.go:117: syntax error: non-declaration statement outside function body (exit status 1)
AI 代码解读

ld.go 为go链接器接口,

   src/cmd/link/internal/ld/ld.go
AI 代码解读

错误提示为,函数findlib 加载包时报错。

而使用其他编辑器,比如txt文本,或者sublime不会有此问题。
在 linux 环境vim 也可以正确编辑和执行。

...
d: 3488
d: 3489
d: 3489
d: 3495
d: 3499
d: 3500
d: 3502
d: 3506
d: 3506
AI 代码解读

4 小结

由此可以看出,IDE并不是完全与语言兼容的,它与最新的编程语言同步需要有一段时间,而这段时间可能导致各种兼容问题。

从go的最新版本1.20 之于 vscode 和 pycharm 之于 python 1.10 的新语法莫不是如此。

解决办法仍然是出现这类似的错误时,使用没有自动代码检测补全的工具,比如txt,vim等。

目录
打赏
0
0
0
0
172
分享
相关文章
员工上网行为监控中的Go语言算法:布隆过滤器的应用
在信息化高速发展的时代,企业上网行为监管至关重要。布隆过滤器作为一种高效、节省空间的概率性数据结构,适用于大规模URL查询与匹配,是实现精准上网行为管理的理想选择。本文探讨了布隆过滤器的原理及其优缺点,并展示了如何使用Go语言实现该算法,以提升企业网络管理效率和安全性。尽管存在误报等局限性,但合理配置下,布隆过滤器为企业提供了经济有效的解决方案。
98 8
员工上网行为监控中的Go语言算法:布隆过滤器的应用
|
2月前
|
go语言中数组和切片
go语言中数组和切片
54 7
百炼-千问模型通过openai接口构建assistant 等 go语言
由于阿里百炼平台通义千问大模型没有完善的go语言兼容openapi示例,并且官方答复assistant是不兼容openapi sdk的。 实际使用中发现是能够支持的,所以自己写了一个demo test示例,给大家做一个参考。
|
3天前
|
公司局域网管理系统里的 Go 语言 Bloom Filter 算法,太值得深挖了
本文探讨了如何利用 Go 语言中的 Bloom Filter 算法提升公司局域网管理系统的性能。Bloom Filter 是一种高效的空间节省型数据结构,适用于快速判断元素是否存在于集合中。文中通过具体代码示例展示了如何在 Go 中实现 Bloom Filter,并应用于局域网的 IP 访问控制,显著提高系统响应速度和安全性。随着网络规模扩大和技术进步,持续优化算法和结合其他安全技术将是企业维持网络竞争力的关键。
17 1
公司局域网管理系统里的 Go 语言 Bloom Filter 算法,太值得深挖了
|
10天前
|
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
【02】客户端服务端C语言-go语言-web端PHP语言整合内容发布-优雅草网络设备监控系统-2月12日优雅草简化Centos stream8安装zabbix7教程-本搭建教程非docker搭建教程-优雅草solution
61 20
探秘员工泄密行为防线:基于Go语言的布隆过滤器算法解析
在信息爆炸时代,员工泄密行为对企业构成重大威胁。本文聚焦布隆过滤器(Bloom Filter)这一高效数据结构,结合Go语言实现算法,帮助企业识别和预防泄密风险。通过构建正常操作“指纹库”,实时监测员工操作,快速筛查可疑行为。示例代码展示了如何利用布隆过滤器检测异常操作,并提出优化建议,如调整参数、结合日志分析系统等,全方位筑牢企业信息安全防线,守护核心竞争力。
|
16天前
|
Go语言入门:分支结构
本文介绍了Go语言中的条件语句,包括`if...else`、`if...else if`和`switch`结构,并通过多个练习详细解释了它们的用法。`if...else`用于简单的条件判断;`if...else if`处理多条件分支;`switch`则适用于基于不同值的选择逻辑。特别地,文章还介绍了`fallthrough`关键字,用于优化重复代码。通过实例如判断年龄、奇偶数、公交乘车及成绩等级等,帮助读者更好地理解和应用这些结构。
35 14
|
2月前
|
go语言中结构体(Struct)
go语言中结构体(Struct)
126 71
|
2月前
|
go语言中的数组(Array)
go语言中的数组(Array)
123 67
|
30天前
|
内网监控系统之 Go 语言布隆过滤器算法深度剖析
在数字化时代,内网监控系统对企业和组织的信息安全至关重要。布隆过滤器(Bloom Filter)作为一种高效的数据结构,能够快速判断元素是否存在于集合中,适用于内网监控中的恶意IP和违规域名筛选。本文介绍其原理、优势及Go语言实现,提升系统性能与响应速度,保障信息安全。
30 5

云原生

+关注