Golang用:=对结构体字段赋值出现expected identifier报错如何解决
问题触发原因
Go语言的短变量声明语法:=有明确的语法限制:
- 短声明的左侧必须全部是标识符(也就是普通变量名),不允许出现带选择器的表达式(比如结构体字段
kvs.listener、数组下标取值arr[0]、map索引取值m["key"]这类都属于表达式,不是独立标识符) :=的作用是同时完成「变量声明+赋值」操作,而结构体字段kvs.listener是已经随结构体实例声明过的成员,不属于需要新声明的变量,不符合短声明的语法要求
修复方案
有两种常用的修复方式,根据你的代码场景选择即可:
方案1:改用普通赋值语句=,提前声明err变量
如果err是你当前作用域第一次使用,提前声明它之后用普通赋值:
var err error kvs.listener, err = net.Listen("tcp", ":9999") if err != nil { // 错误处理逻辑 }
方案2:用临时变量接收后再赋值给结构体字段
就是你测试时用的普通变量接收的方式,之后再转赋值给结构体成员:
ln, err := net.Listen("tcp", ":9999") if err != nil { // 错误处理逻辑 } kvs.listener = ln
内容的提问来源于stack exchange,提问作者Ashar
相关产品推荐
相关产品推荐

