Go面试必会基础题

2023-11-18

1.请指出下面代码的错误?

package main

 var gvar int 

 func main() {  
     var one int   
     two := 2      
     var three int 
     three = 3

    func(unused string) {
        fmt.Println("Unused arg. No compile error")
    }("what?")
}

参考答案及解析:变量 one、two 和 three 声明未使用。知识点:未使用变量。如果有未使用的变量代码将编译失败。但也有例外,函数中声明的变量必须要使用,但可以有未使用的全局变量。函数的参数未使用也是可以的。

如果你给未使用的变量分配了一个新值,代码也还是会编译失败。你需要在某个地方使用这个变量,才能让编译器愉快的编译。

修复代码:

func main() {
     var one int
     _ = one

     two := 2
     fmt.Println(two)

     var three int
     three = 3
     one = three

     var four int
     four = four
}

另一个选择是注释掉或者移除未使用的变量 。

2.下面代码输出什么?

type ConfigOne struct {
     Daemon string
 }

 func (c *ConfigOne) String() string {
     return fmt.Sprintf("print: %v", c)
 }

 func main() {
    c := &ConfigOne{}
    c.String()
}

参考答案及解析:运行时错误。如果类型实现 String() 方法,当格式化输出时会自动使用 String() 方法。上面这段代码是在该类型的 String() 方法内使用格式化输出,导致递归调用,最后抛错。

runtime: goroutine stack exceeds 1000000000-byte limit
fatal error: stack overflow

3.下面代码输出什么?

func main() {
     var a = []int{1, 2, 3, 4, 5}
     var r = make([]int, 0)

     for i, v := range a {
         if i == 0 {
             a = append(a, 6, 7)
         }

        r = append(r, v)
    }

    fmt.Println(r)
}

参考答案及解析:[1 2 3 4 5]。a 在 for range 过程中增加了两个元素 ,len 由 5 增加到 7,但 for range 时会使用 a 的副本 a’ 参与循环,副本的 len 依旧是 5,因此 for range 只会循环 5 次,也就只获取 a 对应的底层数组的前 5 个元素。

4.下面的代码有什么问题?

import (  
    "fmt"
    "log"
    "time"
)
func main() {  
}

参考答案及解析:导入的包没有被使用。如果引入一个包,但是未使用其中如何函数、接口、结构体或变量的话,代码将编译失败。

如果你真的需要引入包,可以使用下划线操作符,_,来作为这个包的名字,从而避免失败。下划线操作符用于引入,但不使用。

我们还可以注释或者移除未使用的包。

修复代码:

import (  
    _ "fmt"
    "log"
    "time"
)
var _ = log.Println
func main() {  
    _ = time.Now
}

5.下面代码输出什么?

func main() {
    x := interface{}(nil)
    y := (*int)(nil)
    a := y == x
    b := y == nil
    _, c := x.(interface{})
    println(a, b, c)
}

A. true true false

B. false true true

C. true true true

D. false true false

参考答案及解析:D。知识点:类型断言。类型断言语法:i.(Type),其中 i 是接口,Type 是类型或接口。编译时会自动检测 i 的动态类型与 Type 是否一致。但是,如果动态类型不存在,则断言总是失败

6.下面代码有几处错误的地方?请说明原因。

func main() {

    var s []int
    s = append(s,1)

    var m map[string]int
    m["one"] = 1 
}

参考答案及解析:有 1 出错误,不能对 nil 的 map 直接赋值,需要使用 make() 初始化。但可以使用 append() 函数对为 nil 的 slice 增加元素。

修复代码:

func main() {
    var m map[string]int
    m = make(map[string]int)
    m["one"] = 1
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Go面试必会基础题 的相关文章

随机推荐

  • 解决 logback不打印 Mybatis SQL等相关日志 日志

    我使用的是 logback 1 2 3版本 其 maven 依赖如下
  • xd插件ui face

    简介 方便使用随机头像 使用 1 安装 略 2 在画布上画多个个圆圈 SHIFT CLICK画正圆 ALT CLICK复制 3 使用alt 框选全部的圆圈 4 对齐排列 5 如图点选 6 如图点选2 然后按 Apply 按钮
  • 【华为OD机试真题2023 JS】通信误码

    华为OD机试真题 2023年度机试题库全覆盖 刷题指南点这里 通信误码 时间限制 1s 空间限制 32MB 限定语言 不限 题目描述 信号传播过程中会出现一些误码 不同的数字表示不同的误码ID 取值范围为1 65535 用一个数组记录误码出
  • 使用Jenkins自动部署vue项目

    1 Jenkins简介 Jenkins是开源CI CD软件领导者 提供超过1000个插件来支持构建 部署 自动化 满足任何项目的需要 2 Jenkins安装 这里是使用docker compose安装Jenkins 所以需要先安装docke
  • 2018-10-22心得

    gtest 今天学习使用了gtest gtest 主要使用方法就是在一个 TEST TEST F 里写测试用例 然后通过在main函数使用 RUN ALL TEST 即可运行 gtest 对于TEST F 实际跟TEST 基本一样 但是它多
  • 随机信号分析实验(matlab仿真实验)

    一 实验内容 1 产生均匀分布的随机数 高斯分布的随机数和其他分布 瑞利 卡方 的随机数及画图 对生成的随机数进行分析 2 检验 1 中产生的均匀分布 高斯分布的数学期望和方差 并画出各种分布的随机变量的概率密度直方图 3 两组及多组独立的
  • redis缓存的预热、降级、雪崩、穿透、击穿

    一 预热 指将一些可能经常使用数据在系统启动的时候预先设置到缓存中 这样可以避免在使用到的时候先去数据库中查询 还有一种方式就是添加一个缓存刷新页 这样通过人工干预的方式将一些可能为热点的key添加到缓存中 二 降级 当访问量突然剧增 服务
  • JS中定时器的用法以及窗口的滚动条函数

    在JS中定时器由setInterval函数设置 第一个参数为定时器的回调函数 第二个参数为间隔 单位为毫秒 窗口的滚动由window对象的scrollBy函数和scrollTo函数完成 例子如下
  • 通过安装cpolar内网穿透在Kali上实现SSH远程连接的步骤指南

    文章目录 1 启动kali ssh 服务 2 kali 安装cpolar 内网穿透 3 配置kali ssh公网地址 4 远程连接 5 固定连接SSH公网地址 6 SSH固定地址连接测试 简单几步通过cpolar 内网穿透软件实现ssh 远
  • jsonp跨域

    由于浏览器的同源策略 前端请求存在跨域问题 jsonp解决跨域是利用了html的有些标签 例如script link img iframe等的天生具有跨域请求的特点 例子如下 a href 测试 a
  • 逃跑吧少年辅助快乐羊儿吧

    逃跑吧少年是4399刚刚推出的一款小游戏 收到热烈欢迎 绝对的高热度2d刺激小游戏 同时我还发过一个帖子不过被CSDN删掉了 所以我来这里我自己的博客重新发一遍 下载地址 点我下载 点击后会跳转到诚通网盘 有三个按钮 大家点击普通下载按钮
  • 渗透测试——cookie注入

    1 cookie注入原理 Cookie最先是由Netscape 网景 公司提出的 Netscape官方文档中对Cookie的定义是这样的 Cookie是在HTTP协议下 服务器或脚本可以维护客户工作站上信息的一种方式 Cookie的用途非常
  • CTFHUB-时间注入

    时间盲注 页面回显的结果只有一种 原理和布尔盲注盲注类似 用 if exp sleep N 1 为例 true 页面执行了sleep N 就会等待N秒再执行 false 页面秒刷新 常用函数 sleep N 暂停或睡眠或等待脚本执行N秒 查
  • Android常见SWT/ANR原因

    文章目录 一 为什么需要SWT 二 常见问题类型 三 常见SWT ANR原因有如下几种 1 等锁 2 SurfaceFlinger卡住 3 Native方法执行时间过长 4 Binder Server卡住 5 Zygote fork进程时卡
  • error: #29: expected an expression,error: #140: too many arguments in function call

    新手学习stm32遇到的小问题分享 小白有时候头脑发热就会出现低级错误 以此自戒 函数调用出现错误 函数只有在定义或声明时需要定义参数才需要用到数据类型 如果调用时再使用数据类型就会出现一下问题 只需把RCC Config void 改为R
  • 前端面试题:一个200*200的div在不同分辨率屏幕上下左右居中,用css实现。

  • Bootstrap页面内容——边框、颜色、显示、嵌入

    Bootstrap 一 边框 1 添加边 2 删除边框 3 边框颜色 4 边框圆角 4 大小 二 颜色 1 文字颜色 2 背景颜色 3 背景渐变 三 显示Display 1 常用显示属性 2 none 3 设备 4 嵌入 1 长宽比例处理
  • Jupyter 的安装及使用,超详细懂中文就会

    这里是本文的目录 Jupyter 是什么 Jupyter Notebook 的安装 命令行安装 Jupyter Notebook VsCode 安装Jupyter Notebook Anaconda 安装Jupyter Notebook V
  • 华为od机考题目-HJ68-成绩排序(比较难)

    while 1 try count int input reverse True if input 0 else False temp lt
  • Go面试必会基础题

    文章目录 1 请指出下面代码的错误 2 下面代码输出什么 3 下面代码输出什么 4 下面的代码有什么问题 5 下面代码输出什么 6 下面代码有几处错误的地方 请说明原因 1 请指出下面代码的错误 package main var gvar