溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

2022年Go語言的最新面試題有哪些

發(fā)布時間:2022-01-18 14:11:36 來源:億速云 閱讀:281 作者:iii 欄目:云計算

這篇文章主要介紹了2022年Go語言的最新面試題有哪些的相關知識,內(nèi)容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇2022年Go語言的最新面試題有哪些文章都會有所收獲,下面我們一起來看看吧。

1、編譯執(zhí)行下面代碼會出現(xiàn)什么?

package main
var(
    size :=1024
    max_size = size*2
)
func main()  {
    println(size,max_size)
}

解析 考點:變量簡短模式 變量簡短模式限制: - 定義變量同時顯式初始化 - 不能提供數(shù)據(jù)類型 - 只能在函數(shù)內(nèi)部使用

結(jié)果:

syntax error: unexpected :=

2、下面函數(shù)有什么問題?

package main
const cl  = 100

var bl    = 123

func main()  {
    println(&bl,bl)
    println(&cl,cl)
}

解析 考點:常量 常量不同于變量的在運行期分配內(nèi)存,常量通常會被編譯器在預處理階段直接展開,作為指令數(shù)據(jù)使用,

cannot take the address of cl

3、編譯執(zhí)行下面代碼會出現(xiàn)什么?

package main

func main()  {

    for i:=0;i<10 ;i++  {
    loop:
        println(i)
    }
    goto loop
}

解析 考點:goto goto不能跳轉(zhuǎn)到其他函數(shù)或者內(nèi)層代碼

goto loop jumps into block starting at

4、編譯執(zhí)行下面代碼會出現(xiàn)什么?

package main
import "fmt"

func main()  {
    type MyInt1 int
    type MyInt2 = int
    var i int =9
    var i1 MyInt1 = i
    var i2 MyInt2 = i
    fmt.Println(i1,i2)
}

解析 考點:Go 1.9 新特性 Type Alias 基于一個類型創(chuàng)建一個新類型,稱之為defintion;基于一個類型創(chuàng)建一個別名,稱之為alias。 MyInt1為稱之為defintion,雖然底層類型為int類型,但是不能直接賦值,需要強轉(zhuǎn); MyInt2稱之為alias,可以直接賦值。

結(jié)果:

cannot use i (type int) as type MyInt1 in assignment

5、編譯執(zhí)行下面代碼會出現(xiàn)什么?

package main
import "fmt"

type User struct {
}
type MyUser1 User
type MyUser2 = User
func (i MyUser1) m1(){
    fmt.Println("MyUser1.m1")
}
func (i User) m2(){
    fmt.Println("User.m2")
}

func main() {
    var i1 MyUser1
    var i2 MyUser2
    i1.m1()
    i2.m2()
}

解析 考點:Go 1.9 新特性 Type Alias 因為MyUser2完全等價于User,所以具有其所有的方法,并且其中一個新增了方法,另外一個也會有。 但是

i1.m2()

是不能執(zhí)行的,因為MyUser1沒有定義該方法。 結(jié)果:

MyUser1.m1
User.m2

6、編譯執(zhí)行下面代碼會出現(xiàn)什么?

package main

import "fmt"

type T1 struct {
}
func (t T1) m1(){
    fmt.Println("T1.m1")
}
type T2 = T1
type MyStruct struct {
    T1
    T2
}
func main() {
    my:=MyStruct{}
    my.m1()
}

**解析 考點:Go 1.9 新特性 Type Alias ** 是不能正常編譯的,異常:

ambiguous selector my.m1

結(jié)果不限于方法,字段也也一樣;也不限于type alias,type defintion也是一樣的,只要有重復的方法、字段,就會有這種提示,因為不知道該選擇哪個。 改為:

my.T1.m1()
my.T2.m1()

type alias的定義,本質(zhì)上是一樣的類型,只是起了一個別名,源類型怎么用,別名類型也怎么用,保留源類型的所有方法、字段等。

7、編譯執(zhí)行下面代碼會出現(xiàn)什么?

package main

import (
    "errors"
    "fmt"
)

var ErrDidNotWork = errors.New("did not work")

func DoTheThing(reallyDoIt bool) (err error) {
    if reallyDoIt {
        result, err := tryTheThing()
        if err != nil || result != "it worked" {
            err = ErrDidNotWork
        }
    }
    return err
}

func tryTheThing() (string,error)  {
    return "",ErrDidNotWork
}

func main() {
    fmt.Println(DoTheThing(true))
    fmt.Println(DoTheThing(false))
}

解析 考點:變量作用域 因為 if 語句塊內(nèi)的 err 變量會遮罩函數(shù)作用域內(nèi)的 err 變量,結(jié)果:

<nil>
<nil>

改為:

func DoTheThing(reallyDoIt bool) (err error) {
    var result string
    if reallyDoIt {
        result, err = tryTheThing()
        if err != nil || result != "it worked" {
            err = ErrDidNotWork
        }
    }
    return err
}

8、編譯執(zhí)行下面代碼會出現(xiàn)什么?

package main

func test() []func()  {
    var funs []func()
    for i:=0;i<2 ;i++  {
        funs = append(funs, func() {
            println(&i,i)
        })
    }
    return funs
}

func main(){
    funs:=test()
    for _,f:=range funs{
        f()
    }
}

解析 考點:閉包延遲求值 for循環(huán)復用局部變量i,每一次放入匿名函數(shù)的應用都是想一個變量。 結(jié)果:

0xc042046000 2
0xc042046000 2

如果想不一樣可以改為:

func test() []func()  {
    var funs []func()
    for i:=0;i<2 ;i++  {
        x:=i
        funs = append(funs, func() {
            println(&x,x)
        })
    }
    return funs
}

9、編譯執(zhí)行下面代碼會出現(xiàn)什么?

package main

func test(x int) (func(),func())  {
    return func() {
        println(x)
        x+=10
    }, func() {
        println(x)
    }
}

func main()  {
    a,b:=test(100)
    a()
    b()
}

解析 考點:閉包引用相同變量 結(jié)果:

100
110

10、編譯執(zhí)行下面代碼會出現(xiàn)什么?

package main

import (
    "fmt"
)

func main()  {
    defer func() {
       if err:=recover();err!=nil{
           fmt.Println(err)
       }else {
           fmt.Println("fatal")
       }
    }()

    defer func() {
        panic("defer panic")
    }()
    panic("panic")
}

關于“2022年Go語言的最新面試題有哪些”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對“2022年Go語言的最新面試題有哪些”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI