Go面试题56

Posted by     "" on Sunday, January 19, 2020

Go面试题56

1: 下面的代码有什么问题?

package main

import "fmt"

func main() {
    s := make([]int, 3, 9)
    fmt.Println(len(s))
    s2 := s[4:8]
    fmt.Println(len(s2))
}

2: 下面代码输出什么?

type N int

func (n N) test() {
    fmt.Println(n)
}

func main() { 
    var n N = 10
    p := &n
    n++
    f1 := n.test

    n++
    f2 := p.test

    n++
    fmt.Println(n)

    f1()
    f2()
}

参考答案及解析

1: 答案及解析: 代码没问题, 输出3 4. 从一个基础切片派生出的子切片的长度可能大于基础切片的长度. 假设基础切片是baseSlice, 使用操作符[low,high],有如下规则: 0<= low <= high <= cap(baseSlice).只要上述满足这个关系,下标lowhigh都可以大于len(baseSlice).

2: 答案及解析: 13 11 12. 知识点: 方法值. 当指针值赋值给变量或者作为函数参数传递时, 会立即计算并赋值改方法执行所需的接受者对象,与其绑定, 以便在稍后执行时,能隐式的传入接受者参数.

「真诚赞赏,手留余香」

Richie Time

真诚赞赏,手留余香

使用微信扫描二维码完成支付