当前位置: 首页 > 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;包括库存管理、支付处理、订单跟…...

swiftui使用ScrollView实现左右滑动和上下滑动的效果,仿小红书页面

实现的效果如果所示&#xff0c;顶部的关注用户列表可以左右滑动&#xff0c;中间的内容区域是可以上下滚动的效果&#xff0c;点击顶部的toolbar也可以切换关注/发现/附近不同页面&#xff0c;实现翻页效果。 首页布局 这里使用了NavigationStack组件和tabViewStyle样式配置…...

深入理解并使用 MySQL 的 SUBSTRING_INDEX 函数

引言 在处理字符串数据时&#xff0c;经常需要根据特定的分隔符来分割字符串或提取字符串的特定部分。MySQL 提供了一个非常有用的函数 SUBSTRING_INDEX 来简化这类操作。本文将详细介绍 SUBSTRING_INDEX 的使用方法、语法&#xff0c;以及通过实际案例来展示其在数据库查询中…...

elementUI在手机端使用遇到的问题总结

之前的博客有写过用vue2elementUI封装手机端选择器picker组件&#xff0c;支持单选、多选、远程搜索多选&#xff0c;最终真机调试的时候发现有很多细节样式需要调整。此篇博客记录下我调试过程中遇到的问题和解决方法。 一、手机真机怎么连电脑本地代码调试&#xff1f; 1.确…...

【初阶数据结构】5.栈和队列

文章目录 1.栈1.1 概念与结构1.2 栈的实现2.队列2.1 概念与结构2.2 队列的实现3.栈和队列算法题3.1 有效的括号3.2 用队列实现栈3.3 用栈实现队列3.4 设计循环队列 1.栈 1.1 概念与结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操…...

高通Android 12 设置Global属性为null问题

1、最近在做app调用framework.jar需求&#xff0c;尝试在frameworks/base/packages/SettingsProvider/res/values/defaults.xml增加属性 <integer name"def_xxxxx">1</integer> 2、在frameworks\base\packages\SettingsProvider\src\com\android\provide…...

Xcode代码静态分析:构建无缺陷代码的秘诀

Xcode代码静态分析&#xff1a;构建无缺陷代码的秘诀 在软件开发过程中&#xff0c;代码质量是至关重要的。Xcode作为Apple的官方集成开发环境&#xff08;IDE&#xff09;&#xff0c;提供了强大的代码静态分析工具&#xff0c;帮助开发者在编写代码时发现潜在的错误和问题。…...

Qt各个版本安装的保姆级教程

文章目录 前言Qt简介下载Qt安装包安装Qt找到Qt的快捷方式总结 前言 Qt是一款跨平台的C图形用户界面应用程序开发框架&#xff0c;广泛应用于桌面软件、嵌入式软件、移动应用等领域。Qt的强大之处在于其高度的模块化和丰富的工具集&#xff0c;可以帮助开发者快速、高效地构建出…...

数学建模--优劣解距离法TOPSIS

目录 简介 TOPSIS法的基本步骤 延伸 优劣解距离法&#xff08;TOPSIS&#xff09;的历史发展和应用领域有哪些&#xff1f; 历史发展 应用领域 如何准确计算TOPSIS中的理想解&#xff08;PIS&#xff09;和负理想解&#xff08;NIS&#xff09;&#xff1f; TOPSIS方法在…...

Springboot开发之 Excel 处理工具(三) -- EasyPoi 简介

引言 Springboot开发之 Excel 处理工具&#xff08;一&#xff09; – Apache POISpringboot开发之 Excel 处理工具&#xff08;二&#xff09;-- Easyexcel EasyPoi是一款基于 Apache POI 的高效 Java 工具库&#xff0c;专为简化 Excel 和 Word 文档的操作而设计。以下是对…...

【BUG】已解决:python setup.py bdist_wheel did not run successfully.

已解决&#xff1a;python setup.py bdist_wheel did not run successfully. 目录 已解决&#xff1a;python setup.py bdist_wheel did not run successfully. 【常见模块错误】 解决办法&#xff1a; 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主…...

用ps做租房网站里的图标大小/营销软件app

AirTight C-65 AP双频&#xff0c;双并发2x2:2 802.11ac千兆无线访问7*24无线***防御 (WIPS)关键特性高达866 Mbps的5G频段高达300Mbps的2.4G频段完美支持交流电源和802.3af的供电方式WIPS模式下的双频段的365天和 7*24的全天候无线***防御 , AP 模式下的全天候无线***扫描功能…...

做图素材网站哪个好/怎么样才可以在百度上打广告

0 Homebrew简介linux系统有个让人蛋疼的通病&#xff0c;软件包依赖&#xff0c;好在当前主流的两大发行版本都自带了解决方案&#xff0c;Red hat有yum&#xff0c;Ubuntu有apt-get而用mac os有一个类似的工具名为Homebrew&#xff0c;Homebrew简称brew&#xff0c;是Mac OSX上…...

如何自己做个简单网站/浙江网络推广

原因&#xff1a;遇到三个swiper互相嵌套&#xff0c;大swiper包含一个水平一个垂直方向的小swiper 两个swiper互相影响&#xff0c;水平swiper向下滚动变成垂直swiper中间出现很大空白页的 1.第一是想设定水平swiper高度&#xff0c;但我大swiper没设置自动高度&#xff0c;也…...

平面设计接单的网站/友情链接英语

QVector与QList 数据量比较小时(小于1000项)&#xff0c;没什么区别。 如果你需要开辟连续的内存空间存储&#xff0c;或者你的元素远比一个指针大&#xff0c;可以用QVector 按照索引获取元素时&#xff0c;QList比较快 追加插入元素时QVector大概快个百分之5 查找元素时QLis…...

公司开发个网站/盘多多网盘搜索

www.163.com转载于:https://blog.51cto.com/testice/259978...

网易企业邮箱客户端下载/重庆seo推广运营

父类 xx new 子类(); xx.method(); 1 普通方法由编译时决定&#xff08;左边&#xff09; --- 提高效率 2 虚方法&#xff08;virtual&#xff09; 由运行时决定-- -多态&#xff0c;灵活 3 抽象方法由运行时决定的 -- 多态灵活 封装&#xff1a;隔离&#xff0c;外部不用…...