首页 > 解决方案 > 具有 1/2 值和短变量声明的函数两次分配给同一变量

问题描述

我对以下代码有两个问题

  1. emptyinterface.(int)可以返回一两个值,这个函数是怎么定义的来达到那个效果的呢?
  2. ok已使用短变量声明进行了两次声明,为什么在这种情况下可能?
package main

import (
    "fmt"
)

func main() {
    var emptyinterface interface{}
    emptyinterface=4

    i1:=emptyinterface.(int)
    fmt.Println(i1)
    i2,ok:=emptyinterface.(int)//<- how the function is defined such that it can return either 1 (i1) or 2 values (i2,ok)?
    fmt.Println(i2,ok)
    i3,ok:=emptyinterface.(string) //<--why I can reassign to ok, which has assign previously?
    fmt.Println(i3,ok)
}

标签: go

解决方案


  1. 这不是一个函数,它是一个语言特性。你不能编写一个函数来做到这一点,但编译器编写者可以创建一些语法来做到这一点。

  2. 如果A左侧没有:=新变量,则 A无效。如果声明了至少一个新变量,则允许。


推荐阅读