前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Go 语言笔试面试题

Go 语言笔试面试题

作者头像
mousemin
发布2023-06-10 17:45:29
3690
发布2023-06-10 17:45:29
举报
文章被收录于专栏:mouseminmousemin

Go 语言笔试面试题

日常收集的题

一. 基础语法

1 =:= 的区别?

答案

:= 声明+赋值

= 仅赋值

代码语言:javascript
复制
1var a int
2a = 10
3// 等价于
4a := 10

2 Go 有异常类型吗?

答案

Go 没有异常类型,只有错误类型(Error),通常使用返回值来表示异常状态。

代码语言:javascript
复制
1f, err := os.Open("/tmp/a.txt")
2if err != nil {
3    log.Fatal(err)
4}

二. 代码输出

常量与变量

  1. 下面代码输出
代码语言:javascript
复制
1func main() {
2	const (
3		a, b = "golang", 100
4		d, e
5		f bool = true
6		g
7	)
8	fmt.Println(d, e, g)
9}

答案

golang 100 true

在同一个 const group 中,如果常量定义与前一行的定义一致,则可以省略类型和值。编译时,会按照前一行的定义自动补全。即等价于

代码语言:javascript
复制
1func main() {
2	const (
3		a, b = "golang", 100
4		d, e = "golang", 100
5		f bool = true
6		g bool = true
7	)
8	fmt.Println(d, e, g)
9}
  1. 下面代码输出
代码语言:javascript
复制
1func main() {
2	const N = 100
3	var x int = N
4
5	const M int32 = 100
6	var y int = M
7	fmt.Println(x, y)
8}

答案

编译失败:cannot use M (type int32) as type int in assignment

Go 语言中,常量分为无类型常量和有类型常量两种,const N = 100,属于无类型常量,赋值给其他变量时,如果字面量能够转换为对应类型的变量,则赋值成功,例如,var x int = N。但是对于有类型的常量 const M int32 = 100,赋值给其他变量时,需要类型匹配才能成功,所以显示地类型转换

代码语言:javascript
复制
1var y int = int(M)
  1. 下面代码输出
代码语言:javascript
复制
1func main() {
2	var a int8 = -1
3	var b int8 = -128 / a
4	fmt.Println(b)
5}

答案

-128

nt8 能表示的数字的范围是 [-2^7, 2^7-1],即 [-128, 127]。-128 是无类型常量,转换为 int8,再除以变量 -1,结果为 128,常量除以变量,结果是一个变量。变量转换时允许溢出,符号位变为1,转为补码后恰好等于 -128。

对于有符号整型,最高位是是符号位,计算机用补码表示负数。补码 = 原码取反加一。

例如:

代码语言:javascript
复制
1-1 :  11111111
200000001(原码)    11111110(取反)    11111111(加一)
3-128:    
410000000(原码)    01111111(取反)    10000000(加一)
5
6-1 + 1 = 0
711111111 + 00000001 = 00000000(最高位溢出省略)
8-128 + 127 = -1
910000000 + 01111111 = 11111111
  1. 下面代码输出
代码语言:javascript
复制
1func main() {
2	const a int8 = -1
3	var b int8 = -128 / a
4	fmt.Println(b)
5}

答案

编译失败:constant 128 overflows int8

-128 和 a 都是常量,在编译时求值,-128 / a = 128,两个常量相除,结果也是一个常量,常量类型转换时不允许溢出,因而编译失败。

切片

  1. 下面代码输出
代码语言:javascript
复制
 1package main
 2
 3import "fmt"
 4
 5func main() {
 6	a := []int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
 7	b := a[2:5]
 8	c := a[9:10]
 9	b = append(b, 1)
10	c = append(c, 1)
11	fmt.Println(a)
12}

答案

[0 1 2 3 4 1 6 7 8 9]

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021年12月15日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Go 语言笔试面试题
    • 一. 基础语法
      • 1 = 和 := 的区别?
      • 2 Go 有异常类型吗?
    • 二. 代码输出
      • 常量与变量
      • 切片
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档