当前位置: 首页 > news >正文

【Golang 面试基础题】每日 5 题(一)

✍个人博客:Pandaconda-CSDN博客
📣专栏地址:http://t.csdnimg.cn/UWz06

📚专栏简介:在这个专栏中,我将会分享 Golang 面试中常见的面试题给大家~
❤️如果有收获的话,欢迎点赞👍收藏📁,您的支持就是我创作的最大动力💪

1. 与其他语言相比,使用 Go 有什么好处?

与其他语言相比,使用 Go 语言具有以下好处:

  • 高效性:Go 语言是一种编译型语言,能够生成高效的机器码。同时,Go 语言的垃圾回收机制和协程支持使其在处理大规模并发任务时非常高效。

  • 并发性:Go 语言内置支持协程和通道,能够方便地编写并发程序。协程可以轻松实现高并发,通道可以方便地进行通信和同步,这使得 Go 语言在网络编程、分布式系统和大数据处理等领域具有优势。

  • 简单性:Go 语言语法简洁,容易学习和理解。Go 语言没有继承和多态等复杂的语言特性,使得程序设计更加直观和简单。

  • 可读性:Go 语言具有良好的代码风格和格式,使得代码易于阅读和维护。Go 语言的代码组织方式和注释规范使得代码的可读性和可维护性得到保证。

  • 安全性:Go 语言具有内置的安全特性,如内存安全、类型安全和并发安全等。Go 语言的垃圾回收机制可以避免内存泄漏,类型安全可以防止代码中出现类型错误,而并发安全可以避免数据竞争问题。

  • 跨平台性:Go 语言的编译器可以将源代码编译为本地机器码,使得程序可以在各种操作系统上运行。同时,Go 语言标准库中提供了许多与平台无关的包,如网络、文件操作等,可以方便地编写跨平台的程序。

总之,Go 语言具有高效性、并发性、简单性、可读性、安全性和跨平台性等优势,使得它在云计算、网络编程、分布式系统、大数据处理等领域得到了广泛应用。

2. Golang 数据类型有哪些?

Go 语言支持的数据类型包括以下几种:

1. 基本数据类型

bool:布尔型,值为 true 或 false。

int、int8、int16、int32、int64:整型,分别表示不同位数的有符号整数。

uint、uint8、uint16、uint32、uint64:无符号整型,分别表示不同位数的无符号整数。

float32、float64:浮点型,分别表示 32 位和 64 位的浮点数。

complex64、complex128:复数类型,分别表示 32 位和 64 位的复数。

2. 复合数据类型

数组:固定长度的同类型元素集合。

切片:可变长度的同类型元素序列。

映射(map):键值对集合,每个键对应一个值。

结构体(struct):不同类型字段的集合。

接口(interface):定义了一组方法的抽象类型,可以被任何类型实现。

3. 其他数据类型

字符串(string):表示一个字符串序列,由单个字节字符组成。

指针(pointer):表示变量的内存地址。

函数(function):可以被调用的可执行代码块。

通道(channel):用于在协程之间进行通信和同步。

总之,Go 语言支持的数据类型较为丰富,包括基本数据类型、复合数据类型、字符串、指针、函数和通道等。这些数据类型可以满足不同的编程需求,并且在处理高并发、大数据等场景中具有优势。

3. Golang 中的包如何使用?

在 Go 语言中,包(package)是代码的组织单元,用于将相关的代码组织在一起。每个 Go 源文件都属于一个包,并且必须在文件的开头声明它所属的包名。在这个包中定义的函数、变量、类型等都可以被其他文件或包引用和使用。

使用 Go 语言的包可以分为以下几个步骤:

1. 导入包

在 Go 语言中,使用 import 语句导入需要使用的包。例如:

import fmt

这个语句将导入标准库中的 fmt 包,用于打印输出等功能。

2. 使用包中的函数或变量

一旦导入了一个包,就可以在代码中使用该包中定义的函数或变量。例如,使用 fmt 包中的 Println 函数:

fmt.Println("Hello, world!")

这个语句将在控制台输出 Hello, world!

3. 自定义包

如果需要将自己的代码组织为包,可以按照以下步骤:

  • 在代码文件的开头声明包名,例如:

package mypackage
  • 编写需要公开的函数或变量,并在它们的名称前面加上大写字母,以便其他包可以访问它们。例如:

func MyFunction() {// ...
}var MyVariable = 123
  • 在代码文件中定义 init 函数(如果需要),该函数将在包被导入时自动调用。例如:

func init() {// ...
}
  • 将所有的代码文件放在同一个目录下,并使用 go build 命令编译为一个包。例如:

$ go build mypackage

这个命令将在当前目录下生成 mypackage.a 文件,可以使用 import 语句导入该包并使用其中的函数或变量。

总之,使用 Go 语言的包需要导入包、使用包中的函数或变量,并且可以自定义包以组织自己的代码。

4. Go 支持什么形式的类型转换?

1. 数值类型之间的转换

Go 语言支持整型和浮点型之间的转换,但需要注意转换的精度问题。通常,将高精度的数据类型转换为低精度的数据类型会丢失精度。例如,将 float64 类型的浮点数转换为 float32 类型的浮点数,可能会导致数据精度的损失。

2. 字符串和数值类型之间的转换

Go 语言支持字符串和数值类型之间的相互转换。可以使用 strconv 包中的函数将字符串转换为数值类型,或将数值类型转换为字符串。例如,将字符串转换为整型:

str := "123"
i, err := strconv.Atoi(str)
if err != nil {// 转换失败
} else {// 转换成功,i为123
}

3. 指针类型之间的转换

Go 语言中的指针类型可以互相转换,但需要注意指针指向的数据类型必须一致。例如,将一个 *int 类型的指针转换为 *uintptr 类型的指针:

var i int = 123
p := &i
uintptrPtr := (*uintptr)(unsafe.Pointer(p))

需要注意的是,指针类型之间的转换需要使用 unsafe 包中的函数,因此不太安全,应该尽量避免使用。

4. 自定义类型之间的转换

Go 语言中支持自定义类型之间的相互转换,但需要注意自定义类型的底层类型必须相同。例如,定义两个自定义类型:

type Celsius float64
type Fahrenheit float64

可以通过定义函数实现自定义类型之间的转换:

func CToF(c Celsius) Fahrenheit {return Fahrenheit(c*9/5 + 32)
}

总之,Go 语言支持数值类型、字符串、指针类型和自定义类型之间的转换,但需要注意转换的精度和安全性问题。

5. 什么是 Goroutine?你如何停止它?

Goroutine 是 Go 语言中的一种轻量级线程,由 Go 运行时环境调度。与传统的线程相比,Goroutine 的创建和销毁代价非常低,可以创建成千上万个 Goroutine,而不会导致系统负担过重。Goroutine 可以通过 go 关键字启动,它会在一个独立的栈空间中执行相应的函数,可以在函数中执行阻塞和非阻塞操作。

要停止 Goroutine,需要使用 Go 语言提供的通道(channel)机制。可以在 Goroutine 中使用一个通道来接收停止信号,当主线程需要停止 Goroutine 时,向该通道发送一个信号即可。Goroutine 在执行任务的同时需要不断检测该通道是否有信号,如果有,则立即退出任务。

下面是一个简单的示例代码,演示了如何使用通道停止 Goroutine:

package mainimport ("fmt""time"
)func worker(stopCh chan bool) {for {select {case <-stopCh:fmt.Println("worker stopped")returndefault:fmt.Println("working...")time.Sleep(1 * time.Second)}}
}func main() {stopCh := make(chan bool)go worker(stopCh)time.Sleep(5 * time.Second)stopCh <- truetime.Sleep(1 * time.Second)fmt.Println("main stopped")
}

在上面的示例代码中,我们创建了一个名为 worker 的 Goroutine,它会在循环中不断执行任务。主线程会在启动 worker 后等待 5 秒钟,然后向 stopCh 通道发送一个停止信号,worker 接收到该信号后会立即退出任务。最后,主线程等待 1 秒钟后结束执行。

相关文章:

【Golang 面试基础题】每日 5 题(一)

✍个人博客&#xff1a;Pandaconda-CSDN博客 &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/UWz06 &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞&#x1f44d;收藏…...

ETCD介绍以及Go语言中使用ETCD详解

ETCD介绍以及Go语言中使用ETCD详解 什么是etcd ETCD是一个分布式、可靠的key-value存储的分布式系统,用于存储分布式系统中的关键数据;当然,它不仅仅用于存储,还提供配置共享及服务发现;基于Go语言实现 。 etcd的特点 完全复制:集群中的每个节点都可以使用完整的存档高…...

03-用户画像+Elasticsearch

优点 es支持海量数据的写入和更新es可以和hadoop&#xff0c;hive及spark进行集成es支持hivesql的操作&#xff0c;可以通过hivesql将数据导入eses的在进行数据检索查询是速度比较快es是分布式存储 应用 全文检索 全文检索流程: 1-对文档数据(文本数据)进行分词 2-将分词…...

初学Mybatis之搭建项目环境

在连接 mysql 数据库时&#xff0c;遇到了个 bug&#xff0c;之前都能连上&#xff0c;但报错说换了个 OS 操作系统什么的 然后搜索怎么连接&#xff0c;找到了解决方法 MySQL MYSQL – 无法连接到本地MYSQL服务器 (10061)|极客教程 (geek-docs.com) 命令行输入 services.msc…...

JMeter使用小功能-(持续更新)

1、jmeter在同一个线程组内&#xff0c;uuid的复用 方式一&#xff1a; 方式二&#xff1a; 2、获得jMeter使用的线程总数 ctx.getThreadGroup().getNumberOfThreads()来表示活动线程总数 int threadNumctx.getThreadGroup().getNumThreads(); String threads Integer…...

科研绘图系列:R语言火山图(volcano plot)

介绍 火山图(Volcano Plot),也称为火山图分析,是一种在生物信息学和基因组学中常用的图形表示方法,主要用于展示基因表达数据的差异。它通常用于基因表达微阵列或RNA测序数据的可视化,帮助研究人员识别在不同条件下表达差异显著的基因。 火山图的基本构成 X轴:通常表示…...

docker firewalld 防火墙设置

1、环境 centos 7 firewalld docker-ce docker 默认会更改防护墙配置 导致添加的防火墙策略不生效&#xff0c;可以启用firewalld 重新设置策略 2、启用防火墙 systemctl start firewalld systemctl enable firewalld3、配置文件禁用docker 的iptables /etc/docker/daemon.js…...

《问题004:报错-JS问题-unknown: Invalid shorthand property initializer.》

问题描述&#xff1a; unknown: Invalid shorthand property initializer. (25:13) unknown:无效的简写属性初始化项 解决方法&#xff1a; “”应该写为“&#xff1a;”&#xff08;globalData 改成 globalData: &#xff09;...

什么是 MLPerf?

什么是 MLPerf&#xff1f; MLPerf 是一个用于衡量机器学习硬件、软件和服务性能的标准化基准测试平台。它由 MLCommons 组织开发&#xff0c;该组织是由多家领先的科技公司和学术机构组成的。MLPerf 的目标是通过一系列标准化的基准测试任务和数据集&#xff0c;提供一个统一…...

【SpringBoot】第3章 SpringBoot的系统配置

3.1 系统配置文件 3.1.1 application.properties SpringBoot支持两种不同格式的配置文件&#xff0c;一种是Properties&#xff0c;一种是YML。 SpringBoot默认使用application.properties作为系统配置文件&#xff0c;项目创建成功后会默认在resources目录下生成applicatio…...

ELK日志分析系统部署文档

一、ELK说明 ELK是Elasticsearch&#xff08;ES&#xff09; Logstash Kibana 这三个开源工具组成&#xff0c;官方网站: The Elastic Search AI Platform — Drive real-time insights | Elastic 简单的ELK架构 ES: 是一个分布式、高扩展、高实时的搜索与数据分析引擎。它…...

ue5笔记

1 点光源 聚光源 矩形光源 参数比较好理解 &#xff08;窗口里面&#xff09;环境光混合器&#xff1a;快速创造关于环境光的组件 大气光源&#xff1a;太阳光&#xff0c;定向光源 天空大气&#xff1a;蓝色的天空和大气 高度雾&#xff1a;大气下面的高度感的雾气 体积…...

TCP重传机制详解

1.什么是TCP重传机制 在 TCP 中&#xff0c;当发送端的数据到达接收主机时&#xff0c;接收端主机会返回⼀个确认应答消息&#xff0c;表示已收到消息。 但是如果传输的过程中&#xff0c;数据包丢失了&#xff0c;就会使⽤重传机制来解决。TCP的重传机制是为了保证数据传输的…...

如何使用javascript将商品添加到购物车?

使用JavaScript将商品添加到购物车可以通过以下步骤实现&#xff1a; 创建一个购物车对象&#xff0c;可以是一个数组或者对象&#xff0c;用于存储添加的商品信息。在网页中的商品列表或详情页面&#xff0c;为每个商品添加一个“添加到购物车”的按钮&#xff0c;并为按钮绑…...

【MySQL】:想学好数据库,不知道这些还想咋学

客户端—服务器 客户端是一个“客户端—服务器”结构的程序 C&#xff08;client&#xff09;—S&#xff08;server&#xff09; 客户端和服务器是两个独立的程序&#xff0c;这两个程序之间通过“网络”进行通信&#xff08;相当于是两种角色&#xff09; 客户端 主动发起网…...

1.关于linux的命令

1.关于文件安装的问题 镜像站点服务器&#xff1a;cat /etc/apt/sources.list 索引文件&#xff1a;cd /var/lib/apt/lists 下载文件包存在的路径&#xff1a;cd /etc/cache/apt/archives/2.关于dpkg文件安装管理器的应用: 安装文件:sudo dpkg -i 文件名; 查找文件目录:sudo …...

【人工智能】机器学习 -- 决策树(乳腺肿瘤数)

目录 一、使用Python开发工具&#xff0c;运行对iris数据进行分类的例子程序dtree.py&#xff0c;熟悉sklearn机器实习开源库。 二、登录https://archive-beta.ics.uci.edu/ 三、使用sklearn机器学习开源库&#xff0c;使用决策树对breast-cancer-wisconsin.data进行分类。 …...

【proteus经典实战】LCD滚动显示汉字

一、简介 Proteus是一款功能丰富的电子设计和仿真软件&#xff0c;它允许用户设计电路图、进行PCB布局&#xff0c;并在虚拟环境中测试电路功能。这款软件广泛应用于教育和产品原型设计&#xff0c;特别适合于快速原型制作和电路设计教育。Proteus的3D可视化功能使得设计更加直…...

数据结构复习1

1、什么是集合&#xff1f; 就是一组数据的集合体&#xff0c;就像篮子装着苹果、香蕉等等&#xff0c;这些“水果”就代表数据&#xff0c;“篮子”就是这个集合。 集合的特点&#xff1a; 集合用于存储对象。 对象是确定的个数可以用数组&#xff0c;如果不确定可以用集合…...

订单管理系统需求规范

1. 引言 1.1 目的 本文档旨在明确描述订单管理系统的功能、非功能性需求以及约束条件&#xff0c;以指导系统的分析、设计、开发、测试和部署。 1.2 范围 本系统将支持在线订单处理&#xff0c;从客户下单到完成配送的全过程管理&#xff0c;包括库存管理、支付处理、订单跟…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

Ubuntu系统下交叉编译openssl

一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机&#xff1a;Ubuntu 20.04.6 LTSHost&#xff1a;ARM32位交叉编译器&#xff1a;arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出&#xff1a;JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中&#xff0c;随机数的生成看似简单&#xff0c;却隐藏着许多玄机。无论是生成密码、加密密钥&#xff0c;还是创建安全令牌&#xff0c;随机数的质量直接关系到系统的安全性。Jav…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】

1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件&#xff08;System Property Definition File&#xff09;&#xff0c;用于声明和管理 Bluetooth 模块相…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

LINUX 69 FTP 客服管理系统 man 5 /etc/vsftpd/vsftpd.conf

FTP 客服管理系统 实现kefu123登录&#xff0c;不允许匿名访问&#xff0c;kefu只能访问/data/kefu目录&#xff0c;不能查看其他目录 创建账号密码 useradd kefu echo 123|passwd -stdin kefu [rootcode caozx26420]# echo 123|passwd --stdin kefu 更改用户 kefu 的密码…...