返回介绍

第三十七天

发布于 2023-06-25 22:22:03 字数 3076 浏览 0 评论 0 收藏 0

1.关于channel的特性,下面说法正确的是?

  • A. 给一个 nil channel 发送数据,造成永远阻塞

  • B. 从一个 nil channel 接收数据,造成永远阻塞

  • C. 给一个已经关闭的 channel 发送数据,引起 panic

  • D. 从一个已经关闭的 channel 接收数据,如果缓冲区中为空,则返回一个零值

参考答案及解析:ABCD。

2.下面代码有什么问题?

const i = 100
var j = 123

func main() {
    fmt.Println(&j, j)
    fmt.Println(&i, i)
}

参考答案及解析:编译报错cannot take the address of i。知识点:常量。常量不同于变量的在运行期分配内存,常量通常会被编译器在预处理阶段直接展开,作为指令数据使用,所以常量无法寻址。

3.下面代码能否编译通过?如果通过,输出什么?

func GetValue(m map[int]string, id int) (string, bool) {

     if _, exist := m[id]; exist {
         return "exist", true
     }
     return nil, false
 }
 func main() {
     intmap := map[int]string{
        1: "a",
        2: "b",
        3: "c",
    }

    v, err := GetValue(intmap, 3)
    fmt.Println(v, err)
}

参考答案及解析:不能通过编译。知识点:函数返回值类型。nil 可以用作 interface、function、pointer、map、slice 和 channel 的“空值”。但是如果不特别指定的话,Go 语言不能识别类型,所以会报错:cannot use nil as type string in return argument.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文