1.定义一个包内全局字符串变量,下面语法正确的是 ( AD ) A. var str string B. str := “” C. str = “” D. var str = “”
2.通过指针变量 p 访问其成员变量 name,下面语法正确的是( AB ) A. p.name B. (*p).name C. (&p).name D. p->name
3.关于init函数,下面说法正确的是( AB ) A. 一个包中,可以包含多个init函数 B. 程序编译时,先执行导入包的init函数,再执行本包内的init函数 C. main包中,不能有init函数 D. init函数可以被其他函数调用
4.golang中没有隐藏的this指针,这句话的含义是( ACD ) A. 方法施加的对象显式传递,没有被隐藏起来 B. golang沿袭了传统面向对象编程中的诸多概念,比如继承、虚函数和构造函数 C. golang的面向对象表达更直观,对于面向过程只是换了一种语法形式来表达 D. 方法施加的对象不需要非得是指针,也不用非得叫this
5.golang中的指针运算包括( BC ) A. 可以对指针进行自增或自减运算 B. 可以通过“&”取指针的地址 C. 可以通过“*”取指针指向的数据 D. 可以对指针进行下标运算
6.关于main函数(可执行程序的执行起点),下面说法正确的是( ABCD ) A. main函数不能带参数 B. main函数不能定义返回值 C. main函数所在的包必须为main包 D. main函数中可以使用flag包来获取和解析命令行参数
7.关于整型切片的初始化,下面正确的是( BCD ) A. s := make([]int) // 不满足条件,必须什么切片的长度,不是nil切片,也不是空切片 B. s := make([]int, 0) C. s := make([]int, 5, 10) D. s := []int{1, 2, 3, 4, 5}
8.关于函数声明,下面语法错误的是( CD ) A. func f(a, b int) (value int, err error) B. func f(a int, b int) (value int, err error) C. func f(a, b int) (value int, error) D. func f(a int, b int) (int, int, error)
9.关于接口,下面说法正确的是( B ) A. 只要两个接口拥有相同的方法列表(次序不同不要紧),那么它们就是等价的,可以相互赋值 B. 如果接口A的方法列表是接口B的方法列表的子集,那么接口B可以赋值给接口A C. 接口查询是否成功,要在运行期才能够确定 D. 接口赋值是否可行,要在运行期才能够确定
10.关于channel,下面语法正确的是( ABCD ) A. var ch chan int B. ch := make(chan int) C. <- ch D. ch <-
1.2判断题:
1.给一个 nil channel 发送数据,造成永远阻塞 T
2.从一个 nil channel 接收数据,造成永远阻塞 T
3.给一个已经关闭的 channel 发送数据,引起 panic T
4.从一个已经关闭的 channel 接收数据,如果缓冲区中为空,则返回一个零值 T
5.一个类只需要实现了接口要求的所有函数,我们就说这个类实现了该接口 T
6.一个类实现接口时,需要导入接口所在的包 F
7.接口由使用方按自身需求来定义,使用方无需关心是否有其他模块定义过类似的接口 T
8.同级文件的包名不允许有多个 T
9.interface{}是可以指向任意对象的Any类型 T
10.内置函数delete可以删除数组切片内的元素 T
1.3 程序输出题:
1.请写出以下代码具体输出内容: package main import ( “fmt” ) func main() { defer_call() } func defer_call() { defer func() { fmt.Println(“A”) }() defer func() { fmt.Println(“B”) }() defer func() { fmt.Println(“C”) }() panic(“触发异常”) } 答案: C B A
2.请写出以下代码具体输出内容: func main() { s := make([]int, 5) s = append(s, 1, 2, 3) fmt.Println(s) } 答案: [1,2,3]
package main
import"fmt"// 单链表的结构type list struct{
Value string
Next *list
}funcmain(){// 第一题// 1.初始化一个单链表
list1 :=new(list)
list2 :=new(list)
list3 :=new(list)
list1.Value ="A"
list2.Value ="B"
list3.Value ="C"
list1.Next=list2
list2.Next=list3
list3.Next =nil// 2.反转操作,采用头插法进行反转
head :=new(list)
head.Next =nil
tail := head
for(list1!=nil){
tep:= list1
list1 = list1.Next
tep.Next=head.Next
head.Next=tep
tail=tep
}
list1 = head.Next
for(list1!=nil){
fmt.Println(list1.Value)
list1 = list1.Next
}
fmt.Println(tail)}
2.查找字符串中的第一个唯一字符 给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1 。 案例: s = “leetcode” 返回 0. s = “loveleetcode”, 返回 2. 注意事项: 您可以假定该字符串只包含小写字母。
package main
import"fmt"funcmain(){// 第二题
s :="leetcode"//用nums[]统计小写字符出现的次数
nums :=[26]int{}for i:=0;i<len(s); i++{
nums[s[i]-97]++}var flag =truefor i:=0; i<26;i++{if(nums[s[i]-97]==1){
flag =false
fmt.Println(i)break}}if flag{
fmt.Println(-1)}}