這篇文章主要介紹了2022年Go語言的最新面試題有哪些的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇2022年Go語言的最新面試題有哪些文章都會有所收獲,下面我們一起來看看吧。
1、編譯執行下面代碼會出現什么?
package main
var(
size :=1024
max_size = size*2
)
func main() {
println(size,max_size)
}解析 考點:變量簡短模式 變量簡短模式限制: - 定義變量同時顯式初始化 - 不能提供數據類型 - 只能在函數內部使用
結果:
syntax error: unexpected :=
2、下面函數有什么問題?
package main
const cl = 100
var bl = 123
func main() {
println(&bl,bl)
println(&cl,cl)
}解析 考點:常量 常量不同于變量的在運行期分配內存,常量通常會被編譯器在預處理階段直接展開,作為指令數據使用,
cannot take the address of cl
3、編譯執行下面代碼會出現什么?
package main
func main() {
for i:=0;i<10 ;i++ {
loop:
println(i)
}
goto loop
}解析 考點:goto goto不能跳轉到其他函數或者內層代碼
goto loop jumps into block starting at
4、編譯執行下面代碼會出現什么?
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 基于一個類型創建一個新類型,稱之為defintion;基于一個類型創建一個別名,稱之為alias。 MyInt1為稱之為defintion,雖然底層類型為int類型,但是不能直接賦值,需要強轉; MyInt2稱之為alias,可以直接賦值。
結果:
cannot use i (type int) as type MyInt1 in assignment
5、編譯執行下面代碼會出現什么?
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()
是不能執行的,因為MyUser1沒有定義該方法。 結果:
MyUser1.m1 User.m2
6、編譯執行下面代碼會出現什么?
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
結果不限于方法,字段也也一樣;也不限于type alias,type defintion也是一樣的,只要有重復的方法、字段,就會有這種提示,因為不知道該選擇哪個。 改為:
my.T1.m1() my.T2.m1()
type alias的定義,本質上是一樣的類型,只是起了一個別名,源類型怎么用,別名類型也怎么用,保留源類型的所有方法、字段等。
7、編譯執行下面代碼會出現什么?
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 語句塊內的 err 變量會遮罩函數作用域內的 err 變量,結果:
<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、編譯執行下面代碼會出現什么?
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循環復用局部變量i,每一次放入匿名函數的應用都是想一個變量。 結果:
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、編譯執行下面代碼會出現什么?
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()
}解析 考點:閉包引用相同變量 結果:
100 110
10、編譯執行下面代碼會出現什么?
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語言的最新面試題有哪些”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“2022年Go語言的最新面試題有哪些”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。