V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
Reid
V2EX  ›  Go 编程语言

为什么这里会报 ineffective assignment to field DB.Sess (SA4005)go-staticcheck

  •  
  •   Reid · 2022-03-01 14:42:24 +08:00 · 1915 次点击
    这是一个创建于 789 天前的主题,其中的信息可能已经有所发展或是发生改变。

    Go 语言 下面这段代码会提示这个 warning 。不太理解为啥? 逻辑是从 slice 中取一个 session 执行,执行后放回 slice ,有更好用的方式吗?

    func (d DB) Run(stmt string) {
    	if len(d.Sess) > 0 {
    		sess := d.Sess[0]
    		d.Sess = d.Sess[1:]
    		result, err := sess.ExecuteJson(stmt)
    		if err != nil {
    			fmt.Println("sess Executejson err: ", err)
    			d.Sess = append(d.Sess, sess)
    			return
    		}
    		fmt.Println(gjson.Get(string(result), "results.0.data"))
    		d.Sess = append(d.Sess, sess)
    	}
    }
    

    codeImage

    2 条回复    2022-03-01 15:06:45 +08:00
    MicroPan
        1
    MicroPan  
       2022-03-01 15:00:56 +08:00
    d 是通过 DB(值) 调用的 Run, 修改 Sess 并不会生效.
    你可以试试改为 func (d *DB) Run(stmt string) 试试是否可以解决这个问题
    Reid
        2
    Reid  
    OP
       2022-03-01 15:06:45 +08:00
    @MicroPan 是的,是这个问题,指针接受者 和 值接受者的区别...
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2373 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 16:10 · PVG 00:10 · LAX 09:10 · JFK 12:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.