• Go语言面试题


    关于go vendor,下面说法正确的是()

    A. 基本思路是将引用的外部包的源代码放在当前工程的vendor目录下面
    B. 编译go代码会优先从vendor目录先寻找依赖包
    C. 可以指定引用某个特定版本的外部包
    D. 有了vendor目录后,打包当前的工程代码到其他机器的$GOPATH/src下都可以通过编译
    
    参考答案:ABD
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    1.使用了go-mod模式,项目可以放在gopath的src下吗?和gopath的区别?

    使用go-mod以后,项目可以放在任何非中文路径下,gopath必须放在gopath的src下
    
    • 1

    2.go vendor的作用?

    将依赖包下载到项目根目录下的vendor文件夹,这样在写代码的时候可以有提示
    
    • 1

    1.下面属于关键字的是

    A.def B.Class C.func D.struct E.var
    
    答案:C、D、E
    
    • 1
    • 2
    • 3

    2.定义全局变量,正确的做法是?

    A.var Name string B.Name := "hallen" C.var Name string = "hallen"
    D.var Name = "hallen" E.var Name string := "hallen"
    
    答案:A、C、D
    
    • 1
    • 2
    • 3
    • 4

    3.关于局部变量的初始化,下面正确的使用方式是?

    A. var i int = 10
    B. var i = 10
    C. i := 10
    D. i = 10
    
    参考答案:ABC
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    4.对于以下的代码,获取成员变量正确的做法是?

    type Student struct {
    Name string
    }
    
    func main() {
    var student *Student
    student = new(Student)
    *student = Student{Name:"hallen"}
    }
    
    A.student.Name B.(*student).Name C.(&student.Name) D.*student.Name
    
    答案:A、B
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    5.字符串拼接正确的是?

    A."hello"+"hallen" B."hello"+'h' C."hello'+"hallen"
    D.fmt.Printf("%s%s","hello","hallen") E.fmt.Sprintf("%s%s","hello","hallen")
    
    答案:A、E
    
    • 1
    • 2
    • 3
    • 4

    6.已申明的bool类型变量ok,关于其赋值,下面说法错误的是()

    var ok bool
    A. ok = true
    B. ok = 1
    C. ok = bool(1)
    D. ok = (1 == 2)
    
    参考答案:BC
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    8.关于switch语句,下面说法正确的是()

    A. 条件表达式必须为常量或者整数
    B. 单个case中,可以出现多个结果选项
    C. 需要用break来明确退出一个case
    D. 只有在case中明确添加fallthrough关键字,才会继续执行紧跟的下一个case
    
    参考答案:BD
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    9.golang中的引用类型包括()

    A. 数组
    B. map
    C. channel
    D. interface
    E.数组切片
    
    参考答案:BCDE
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    10.golang中的指针运算包括()

    A. 可以对指针进行自增或自减运算
    B. 可以通过“&”取指针的地址
    C. 可以通过“*”取指针指向的数据
    D. 可以对指针进行下标运算
    
    参考答案:BC
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    11.关于整型切片的初始化,下面正确的是()

    A. s := make([]int)
    B. s := make([]int, 0)
    C. s := make([]int, 5, 10)
    D. s := []int{1, 2, 3, 4, 5}
    参考答案:BCD
    
    • 1
    • 2
    • 3
    • 4
    • 5

    12.ok是bool型变量,下面if表达式符合编码规范的是()

    A. if ok == 1{}
    B. if ok{}
    C. if ok == false{}
    D. if !ok{}
    参考答案:BD
    
    • 1
    • 2
    • 3
    • 4
    • 5

    13.value是整型变量,下面if表达式符合编码规范的是()

    A. if value == 0 {}
    B. if value {}
    C. if value != 0{}
    D. if !value{}
    
    参考答案:AC
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    14.关于map,下面说法正确的是()

    A. map反序列化时json.marshal的入参必须为map的地址
    B. 在函数调用中传递map,则子函数中对map元素的增加不会导致父函数中map的修改
    C. 在函数调用中传递map,则子函数中对map元素的修改不会导致父函数中map的修改
    D. 不能使用内置函数delete删除map的元素
    
    参考答案:A
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    15.下面赋值正确的是()

    A. var x = nil
    B. var x interface{} = nil
    C. var x string = nil
    D. var x error = nil
    
    答案:BD,nil 只能赋值给指针
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    16.下面代码的结果为?

    str := "hallen"
    str[0] = 'z'
    fmt.Println(str)
    
    A.hallen B.zallen c.compilation error
    
    答案:c,Go 语言中的字符串是只读的,不能进行修改
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    二、简答题
    1.简述数组和切片的区别;程序中什么场景使用数组,什么场景使用切片?

    类型区分:数组是值类型,切片是引用
    可变性:数组长度不可变,切片长度可变,
    
    数组:已知的长度
    切片:一般在参长度可变,未知的长度
    
    • 1
    • 2
    • 3
    • 4
    • 5

    2.Go语言局部变量分配在栈还是堆?

    Go语言编译器会自动决定把一个变量放在栈还是放在堆,
    当发现变量的作用域没有跑出函数范围,就可以在栈上,反之则必须分配在堆。
    
    • 1
    • 2

    3.int和uint的区别?两个uint值能不能直接相减?

    int是正数和负数都可以
    uint不能是负数
    
    uint不能直接相减,如果结果是负数会变成一个很大的uint
    
    • 1
    • 2
    • 3
    • 4

    4.提示:slice底层是数组,保存了len,capacity和对数组的引用

    5.下面代码输出结果为?

    func main() {
    slice := make([]int, 3)
    slice = append(slice , 9, 8, 7)
    fmt.Println(slice )
    }
    
    答案:[0 0 0 9 8 7]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    6.下面代码的区别?那个为nil?

    var slice1 []int
    var slice2 = []int{} // var slice2 []int = []int{}
    
    答案:s1为nil切片,和nil相等,s2为空切片,和nil不相等
    
    • 1
    • 2
    • 3
    • 4

    7.分别写出下面代码的执行结果

    func Get() (int,int){
    return 3,4
    }
    
    func main() {
    var a int
    a,_ = Get() // 结果为a=3
    a,_ := Get() // 报错,a已申明,不需要自动推导
    a,b := Get() // a=3,b=4
    a,b = Get() // 报错,b没有申明
    fmt.Println(a)
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    8.go语言中指针运算有哪些?

    可以通过“&”取指针的地址
    
    可以通过“*”取指针指向的数据
    
    • 1
    • 2
    • 3

    9.说说各种类型的缺省值?

    指针的缺省值是nil,其他的都是对应类型的零值,bool类型的缺省值是false
    
    • 1

    10.map如何顺序读取?

    map不能顺序读取,是因为他是无序的,
    想要有序读取,
    首先的解决的问题就是,把key变为有序,所以可以把key放入切片,对切片进行排序,遍历切片,通过key取值。
    
    
    map_data1 := map[string]interface{}{
    "name":"hallen",
    "age":18,
    }
    
    keys := []string{}
    for k,_ := range map_data1 {
    keys = append(keys,k)
    }
    
    
    sort.Strings(keys)
    
    for _,v := range keys {
    fmt.Println(map_data1[v])
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    11.字符串打印时,%v 和 %+v 的区别

    “%+v”会以字段键值对的形式key-value格式打印,“%v”只会打印字段值value信息
    
    • 1
  • 相关阅读:
    【计算机组成原理】数据的存储和排列
    Offsets 获取该行的起始索引 start=offsets (x)
    威联通NAS用Docker搭建Minecraft(MC)服务器
    uniapp 底部导航 点击刷新当前页
    气膜建筑凭借自身优势,提供多功能室内体育馆
    asp毕业设计——基于asp+access的在线人才招聘网设计与实现(毕业论文+程序源码)——人才招聘网
    简单聊一聊一种很新的DCDC电源-BOB电源
    Spring Boot 实现万能文件在线预览-开源学习一
    关于 Lucene 搜索语法与分词的浅显研究
    2.4 GHZ室内信道测量数据集
  • 原文地址:https://blog.csdn.net/ZN175623/article/details/128089564