今天写代码遇到一个很奇葩的问题,我一直觉得没有语法错误的地方,偏偏居然有语法错误:
mgr.dbUtxo, err := leveldb.OpenFile(cfg.DataDir+"/blockchain/utxo",nil)
错误提示如下图:

把上面的代码改成下面这样就OK了
var err error
mgr.dbUtxo, err = leveldb.OpenFile(cfg.DataDir+"/blockchain/utxo",nil)
真是见鬼了,以前没遇到过这种情况。
我觉得问题可能出在leveldb.OpenFile这个函数。于是进去看一下

原来里面是这种格式的,给返回值定义了名字,然后return就空着。
难道就是这种语法导致的?难道这种格式的函数不能使用:=接受返回值?
我后来改成
db, err := leveldb.OpenFile(cfg.DataDir+"/blockchain/utxo",nil)
就又通过语法检查了。
也就是说要使用:=接受这样的函数返回值就必须把返回值名字设置成和函数定义里的返回值名字一样。
从使用者的角度来看,感觉好没道理啊,为什么要做这种强制规定?
(全文完)

作者在使用Go语言调用leveldb库时遇到奇怪的语法错误,发现函数返回值的接收必须与函数定义的返回值名称一致才能通过语法检查。调整后问题解决,但此规定让人费解。
1597





