在golang中有很多使用nil的情况.例如:
func (u *URL) Parse(ref string) (*URL, error) {
refurl, err := Parse(ref)
if err != nil {
return nil, err
}
return u.ResolveReference(refurl), nil
}
Run Code Online (Sandbox Code Playgroud)
但我们不能这样使用它:
var str string //or var str int
str = nil
Run Code Online (Sandbox Code Playgroud)
golang编译器会抛出can't use nil as type string in assignment错误.
看起来nil只能用于struct和interface的指针.如果是这样,那么它意味着什么?
而当我们用它来比较其他对象,他们如何比较,换句话说,如何golang确定一个对象是零?
编辑:例如,如果接口为nil,则其类型和值必须同时为nil.golang怎么做到这一点?
我正在运行2个查询,第一个查询正确并返回所需的值,但第二个返回false.
我已经设置$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);好了我应该得到一个异常而不是假,所以我猜这是我$stmt->execute();的罪魁祸首.
因为我已经设置了错误属性,所以这是唯一可以返回false的函数.我也曾尝试设置$stmt->closeCursor();,$stmt = null;以及unset($stmt);与无济于事.
这将执行两个查询(fetch_wallet()函数中的"darkrp"和"pointshop").
if($this->pdo) {
foreach($this->methods as $method => $bool) {
if($bool) { $array[$method] = $this->fetch_wallet($method); }
}
}
Run Code Online (Sandbox Code Playgroud)
这是fetch_wallet()功能:
public function fetch_wallet($type) {
if($type == "darkrp") {
$query = "SELECT `wallet` FROM `darkrp_player` WHERE uid=:uid LIMIT 1";
}
elseif ($type == "pointshop") {
$query = "SELECT `points` FROM `pointshop_data` WHERE uniqueid=:uid LIMIT 1";
}
try {
$stmt = $this->pdo->prepare($query);
$stmt->execute(array(":uid" => …Run Code Online (Sandbox Code Playgroud)