大佬教程收集整理的这篇文章主要介绍了Golang面试题解析(二),大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
funcmain(){ i:=GetValue() switchi.(type){ caseint: println("int") casestring: println("string") caseinterface{}: println("interface") default: println("unkNown") } } funcGetValue()int{ return1 }
考点:type
编译失败,因为type只能使用在interface
funcfuncMui(x,yint)(sumint,error){ returnx+y,nil }
考点:函数返回值命名在函数有多个返回值时,只要有一个返回值有指定命名,其他的也必须有命名。 如果返回值有有多个返回值必须加上括号; 如果只有一个返回值并且有命名也需要加上括号; 此处函数第一个返回值有sum名称,第二个为命名,所以错误。
packagemain funcmain(){ println(DeferFunc1(1)) println(DeferFunc2(1)) println(DeferFunc3(1)) } funcDeferFunc1(iint)(tint){ t=i deferfunc(){ t+=3 }() returnt } funcDeferFunc2(iint)int{ t:=i deferfunc(){ t+=3 }() returnt } funcDeferFunc3(iint)(tint){ deferfunc(){ t+=i }() return2 }
考点:defer和函数返回值需要明确一点是defer需要在函数结束前执行。 函数返回值名字会在函数起始处被初始化为对应类型的零值并且作用域为整个函数 DeferFunc1有函数返回值t作用域为整个函数,在return之前defer会被执行,所以t会被修改,返回4; DeferFunc2函数中t的作用域为函数,返回1; DeferFunc3返回3
funcmain(){ list:=new([]int) list=append(list,1) fmt.Println(list) }
考点:newlist:=make([]int,0)
packagemain import"fmt" funcmain(){ s1:=[]int{1,2,3} s2:=[]int{4,5} s1=append(s1,s2) fmt.Println(s1) }
考点:appendappend切片时候别漏了'...'
funcmain(){ sn1:=struct{ ageint namestring }{age:11,name:"qq"} sn2:=struct{ ageint namestring }{age:11,name:"qq"} ifsn1==sn2{ fmt.Println("sn1==sn2") } sm1:=struct{ ageint mmap[string]string }{age:11,m:map[string]string{"a":"1"}} sm2:=struct{ ageint mmap[string]string }{age:11,m:map[string]string{"a":"1"}} ifsm1==sm2{ fmt.Println("sm1==sm2") } }
考点:结构体比较进行结构体比较时候,只有相同类型的结构体才可以比较,结构体是否相同不但与属性类型个数有关,还与属性顺序相关。
sn3:=struct{ namestring ageint }{age:11,name:"qq"}
sn3与sn1就不是相同的结构体了,不能比较。 还有一点需要注意的是结构体是相同的,但是结构体属性中有不可以比较的类型,如map,slice。 如果该结构属性都是可以比较的,那么就可以使用“==”进行比较操作。
可以使用reflect.DeepEqual进行比较
ifreflect.DeepEqual(sn1,sm){ fmt.Println("sn1==sm") }else{ fmt.Println("sn1!=sm") }
所以编译不通过: invalid operation: sm1 == sm2
funcFoo(xinterface{}){ ifx==nil{ fmt.Println("emptyinterface") return } fmt.Println("non-emptyinterface") } funcmain(){ varx*int=nil Foo(x) }
考点:interface内部结构
non-emptyinterface
funcGetValue(mmap[int]string,idint)(string,bool){ if_,exist:=m[id];exist{ return"存在数据",true } returnnil,false } funcmain(){ intmap:=map[int]string{ 1:"a",2:"bb",3:"ccc",} 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
.
const( x=iota y z="zz" k p=iota ) funcmain(){ fmt.Println(x,y,z,k,p) }
考点:iota
结果:
01zzzz4
以上是大佬教程为你收集整理的Golang面试题解析(二)全部内容,希望文章能够帮你解决Golang面试题解析(二)所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。