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

2022-03-01 14:42:24 +08:00
 Reid

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)
	}
}

1932 次点击
所在节点    Go 编程语言
2 条回复
MicroPan
2022-03-01 15:00:56 +08:00
d 是通过 DB(值) 调用的 Run, 修改 Sess 并不会生效.
你可以试试改为 func (d *DB) Run(stmt string) 试试是否可以解决这个问题
Reid
2022-03-01 15:06:45 +08:00
@MicroPan 是的,是这个问题,指针接受者 和 值接受者的区别...

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/837166

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX