go - 具有 1/2 值和短变量声明的函数两次分配给同一变量
问题描述
我对以下代码有两个问题
emptyinterface.(int)
可以返回一两个值,这个函数是怎么定义的来达到那个效果的呢?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)
}
解决方案
这不是一个函数,它是一个语言特性。你不能编写一个函数来做到这一点,但编译器编写者可以创建一些语法来做到这一点。
如果A左侧没有
:=
新变量,则 A无效。如果声明了至少一个新变量,则允许。
推荐阅读
- architecture - 什么是主动-主动和主动-被动应用?
- r - 在长于 n 个字符的单词之间包含一个空格
- java - TimeUnit Java 返回零天
- vuejs3 - 为什么 Vue3 Composition API - watch 的选项 deep 在响应式中不起作用,但在响应式 getter 中起作用?
- apache-kafka - 使用 Spring-Kafka 和 Confluent 模式注册表将带有 JSON 模式的记录发送到 Kafka
- c++ - 当剂量移动构造函数和默认构造函数被调用
- php - 立即在 WooCommerce 中设置待处理订单并发送处理电子邮件通知
- echarts - Echarts DataZoom 让高度变大
- javascript - 更改 HTML 表中 td 元素的颜色,然后使用 AJAX 写入 DB
- string - 在 stringLongestWord(sen) 中查找最长的单词,获取传递的 sen 参数并返回字符串中最长的单词。如果