Go每日一题(第8天)

2019/10/23 10:15
阅读数 21

下面给出上一篇文章的答案:

1.BD

知识点:字符串连接。除了以上两种连接方式,还有 strings.Join()、buffer.WriteString()等。

Go中,双引号是用来表示字符串string,其实质是一个byte类型的数组,单引号表示rune类型。还有一个反引号,用来创建原生的字符串字面量,它可以由多行组成,但不支持任何转义序列。因此,当把两个不同类型的变量进行拼接时,就会报错

2.贴下原题代码:

const (
    x = iota
    _
    y
    z = "zz"
    k 
    p = iota
)

func main()  {
    fmt.Println(x,y,z,k,p)
}

参考答案及解析:编译通过,输出:0 2 zz zz 5。

知识点:iota 的使用。给大家贴篇文章,讲的很详细
https://www.cnblogs.com/zsy/p/5370052.html

3.下面赋值正确的是()

  • A. var x = nil

  • B. var x interface{} = nil

  • C. var x string = nil

  • D. var x error = nil

参考答案及解析:BD。知识点:nil 值。nil 只能赋值给指针、chan、func、interface、map 或 slice 类型的变量。强调下 D 选项的 error 类型,它是一种内置接口类型,看下方贴出的源码就知道,所以 D 是对的。

type error interface {
    Error() string
}

 

欢迎在留言区补充!

看下今天的题目:
1.关于init函数,下面说法正确的是()

  • A. 一个包中,可以包含多个 init 函数;

  • B. 程序编译时,先执行依赖包的 init 函数,再执行 main 包内的 init 函数;

  • C. main 包中,不能有 init 函数;

  • D. init 函数可以被其他函数调用;

2.下面这段代码输出什么以及原因?

func hello() []string {  
    return nil
}

func main() {  
    h := hello
    if h == nil {
        fmt.Println("nil")
    } else {
        fmt.Println("not nil")
    }
}
  • A. nil

  • B. not nil

  • C. compilation error  

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

func GetValue() int {
    return 1
}

func main() {
    i := GetValue()
    switch i.(type) {
    case int:
        println("int")
    case string:
        println("string")
    case interface{}:
        println("interface")
    default:
        println("unknown")
    }
}

答案以及解析会在下一篇文章中给出,鼓励大家在留言区留下答案,抱团学习,日拱一卒,每天进步一点!

所有学习上的成功,都只依靠两件事 -- 策略和坚持,而坚持本身就是最重要的策略!

展开阅读全文
Go
加载中

作者的其它热门文章

打赏
0
0 收藏
分享
打赏
1 评论
0 收藏
0
分享
返回顶部
顶部