Golang基础问题

在这里插入图片描述

Go基础

文章目录

  • Go基础
    • ● Go有那些关键字?
    • ● Go方法与函数的区别?
    • ● Go函数返回局部变量的指针是否安全?
    • ● Go函数参数传递是值传递还是引用传递?
    • ● defer关键字的实现原理?
    • ● 内置函数make和new的区别?
    • ● for range 的时候它的地址会发生变化吗?
    • ● 简单说一下defer的底层实现原理?defer recover的问题?
    • ● uint类型溢出?
    • ● 介绍rune类型
    • ● golang中解析tag是怎么实现的?反射原理是什么?
    • ● 调用函数传入结构体时,应该传值还是指针?
    • ● Slice遇到过什么坑?
    • ● 两个切片要如何比较?
    • ● Go闭包是什么?
    • ● 深拷贝和浅拷贝?
    • ● init函数的执行时机?
    • ● Go 语言中的数组?

欢迎大家观看,如果遇到不合适的答案可以打在评论区,我们一起探讨。

● Go有那些关键字?

package、import、func、return、defer、var、const、interface、struct、chan、map、type、break、case、continue、for、fallthrough、else、if、switch、goto、default、range、go、select。

● Go方法与函数的区别?

函数是指不属于任何结构体的方法。但方法是属于某个结构体的。

● Go函数返回局部变量的指针是否安全?

是安全的。 Go编译器将会对每个局部变量进行逃逸分析。如果发现有局部变量的作用域超出该函数,则不会将内存分配在栈上,而是在堆上,因为他们不在栈区,即使释放函数,其内容也不会受影响。

● Go函数参数传递是值传递还是引用传递?

值传递。 Go中都是值传递,没有引用传递。 如果参数是引用类型,可以修改原内容数据,否则不可以。

● defer关键字的实现原理?

defer可以推迟当前函数返回前才实际执行。 defer和recover结合,形成了Go语言风格的异常与捕获机制。

● 内置函数make和new的区别?

1、作用变量类型不同,new可以对任何类型使用,make只能对切片、字典、通道使用。 2、返回类型不一样,new返回指针,make返回变量本身。 3、new分配的空间被清零,make分配的会初始化。

● for range 的时候它的地址会发生变化吗?

不会。在for range循环中,循环变量的地址在每次迭代时是复用的,直接传递循环变量的地址可能导致所有协程共享同一个地址,出现数据竞争和不期望的行为。

● 简单说一下defer的底层实现原理?defer recover的问题?

先进后出,类似于栈。defer延迟函数,释放资源,收尾工作;如释放锁,关闭文件,关闭链接;捕获panic; 每个 defer 语句都对应一个_defer 实例,多个实例使用指针连接起来形成一个单链表,保存在 gotoutine 数据结构中,每次插入_defer 实例,均插入到链表的头部,函数结束再一次从头部取出,从而形成后进先出的效果。 recover结合defer可以捕获异常,从而防止程序崩溃。recover只有在defer函数中有效。

● uint类型溢出?

无符号整型。2^32-1,如果超出了所能表示的范围,就会发生溢出。溢出不会引发错误或panic,而是导致结果按照模运算。

● 介绍rune类型

相当int32。 golang中的字符串底层实现是通过byte数组的,中文字符在unicode下占2个字节,在utf-8编码下占3个字节,而golang默认编码正好是utf-8。byte 等同于int8,常用来处理ascii字符rune 等同于int32,常用来处理unicode或utf-8字符

● golang中解析tag是怎么实现的?反射原理是什么?

Go 中解析的 tag 是通过反射实现的,反射是指计算机程序在运行时可以访问、检测和修改它本身状态或行为的一种能力或动态知道给定数据对象的类型和结构,并有机会修改它。反射将接口变量转换成反射对象 Type 和 Value;反射可以通过反射对象 Value 还原成原先的接口变量;反射可以用来修改一个变量的值,前提是这个值可以被修改;tag是啥:结构体支持标记,name string json:name-field 就是 json:name-field 这部分

● 调用函数传入结构体时,应该传值还是指针?

传值时,函数会获得给结构体的一个副本,对该副本修改不会影响原来的结构体。 传指针时,引用类型,对指针指向的结构体进行任何的修改都会修改原来的结构体。

● Slice遇到过什么坑?

1、切片容量 切片容量自动增长,当容量不足时,Go会分配一个新的底层数组,并将旧的数组的内容复制到新的数组中。如果频繁增加元素可能导致意外。 应对策略:预先分配足够的容量。 2、切片是对底层数组的引用,多个切片可以共享同一个底层数组。修改一个切片的元素可能会影响其他共享同一底层数组的切片。 如果需要独立的副本,可以使用copy函数创建一个新的切片。 3、切片越界。 4、切片的零值是nil。

● 两个切片要如何比较?

切片不能使用==进行比较,要使用reflect.DeepEqual()进行比较。

● Go闭包是什么?

闭包就是一个可以引用自身作用域之外的变量的函数。即使外部函数完成执行并且作用域被破坏,依然可以访问。

● 深拷贝和浅拷贝?

切片、字典、通道都是引用拷贝,也就是浅拷贝。其余的都是值拷贝,也就是深拷贝。 深拷贝拷贝的是数据本身,创造一个新的对象,并在内存中开辟一个新的内存地址,与原对象是完全独立的,不共享内存,修改新对象时不会影响原对象的值。释放内存时,也没有任何关联。 浅拷贝拷贝的是数据地址,只复制指向的对象的指针,新旧对象的内存地址是一样的,修改一个另一个也会变。释放内存时,同时释放。

● init函数的执行时机?

一个包下可以有多个 init 函数,每个文件也可以有多个 init 函数。多个 init 函数按照它们的文件名顺序逐个初始化。应用初始化时初始化工作的顺序是,从被导入的最深层包开始进行初始化,层层递出最后到 main 包。不管包被导入多少次,包内的 init 函数只会执行一次。应用初始化时初始化工作的顺序是,从被导入的最深层包开始进行初始化,层层递出最后到 main 包。但包级别变量的初始化先于包内 init 函数的执行。

● Go 语言中的数组?

数组是存放元素的容器,Go 语言中数组的长度是数组类型的一部分,定义数组时必须指定存放元素的类型和容量

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/761021.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ollama+Dify大模型本地化部署打造个人知识库 (2)

ollama大模型部署-CSDN博客文章浏览阅读26次。Ollama 是一个能在本地机器上轻松构建和运行大型语言模型的轻量级、可扩展框架,适用于多种场景,具有易于使用、资源占用少、可扩展性强等特点。https://blog.csdn.net/weixin_72819498/article/details/1400…

LED裸眼3D显示屏:开启视觉新体验

随着科技的不断进步,LED显示屏作为一种新型的显示技术,已经被广泛应用于各个领域。而其中,LED裸眼3D显示屏更是因其独特的技术原理和令人震撼的视觉效果,成为了业界关注的焦点。 裸眼3D显示屏是一种前沿的显示技术,它…

NLP特征提取的惊人历史演变

NLP特征提取的惊人演变 1.理解特征提取2. 文本表示的演变2.1.词袋的简单性2.2. N-Gram 模型的进步2.3. TF-IDF 的崛起 3. 深入研究词嵌入3.1.探索 Word2Vec3.2.深入了解 GloVe3.3.深入研究 FastText 4. 上下文嵌入的影响4.1 ELMo 的突破4.2 理解 BERT 的机制4.3 Transformer的出…

ctfshow-web入门-命令执行(web71-web74)

目录 1、web71 2、web72 3、web73 4、web74 1、web71 像上一题那样扫描但是输出全是问号 查看提示:我们可以结合 exit() 函数执行php代码让后面的匹配缓冲区不执行直接退出。 payload: cvar_export(scandir(/));exit(); 同理读取 flag.txt cinclud…

[数据集][目标检测]电缆钢丝绳线缆缺陷检测数据集VOC+YOLO格式1800张3类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):1800 标注数量(xml文件个数):1800 标注数量(txt文件个数):1800 标注…

uniapp H5端使用百度地图

1、登录百度地图开放平台 https://lbsyun.baidu.com/(没有账号则先去创建一个百度账号) 2、进入百度地图开放平台控制台(导航栏“控制台”),点击“应用管理”-“我的应用” 3、选择“创建应用”,应用模块选…

[图解]企业应用架构模式2024新译本讲解19-数据映射器1

1 00:00:01,720 --> 00:00:03,950 下一个我们要讲的就是 2 00:00:04,660 --> 00:00:07,420 数据映射器这个模式 3 00:00:09,760 --> 00:00:13,420 这个也是在数据源模式里面 4 00:00:13,430 --> 00:00:14,820 用得最广泛的 5 00:00:16,250 --> 00:00:19,170…

一、Redis简介

一、Redis介绍与一般应用 1.1 基本了解 Redis全称Remote Dictionary Server(远程字典服务), 是一个开源的高性能键值存储系统,通常用作数据库、缓存和消息代理。使用ANSI C语言编写遵守BSD协议,是一个高性能的Key-Value数据库提供了丰富的数…

2024.07使用gradle上传maven组件到central.sonatype,非常简单

本文基于sonatypeUploader2.0版本 在1.0版本我们还需要手动去添加maven-publish和signing插件,在2.0版本他已经内置了,如果你仍然需要手动配置,你可以手动添加这两个插件及逻辑。 具体信息参考开源仓库: 插件仓库:h…

【Linux】部署NFS服务实现数据共享

👨‍🎓博主简介 🏅CSDN博客专家   🏅云计算领域优质创作者   🏅华为云开发者社区专家博主   🏅阿里云开发者社区专家博主 💊交流社区:运维交流社区 欢迎大家的加入&#xff01…

(四)Appdesigner-文件存在判断及对话框设计

目录 前言 一、文件存在判断 (一)基础知识 (二)实际操作 二、对话框设计 (一)基础知识 1.提示对话框 2.询问对话框 3.文件选择对话框 (二)实际操作 1.提示对话框 2.询问…

台灯哪个牌子好?学生专用台灯第一品牌推荐

台灯,作为人们生活中不可或缺的存在,每当夜幕缓缓降临,华灯初上,总预示着一个浪漫的夜晚即将揭幕。而灯的意义,远不止于驱散黑夜的阴影,它更擅长为我们的空间带来温暖与慰藉。在众多种类的灯具中&#xff0…

零基础STM32单片机编程入门(五)FreeRTOS实时操作系统详解及实战含源码视频

文章目录 一.概要二.什么是实时操作系统三.FreeRTOS的特性四.FreeRTOS的任务详解1.任务函数定义2.任务的创建3.任务的调度原理 五.CubeMX配置一个FreeRTOS例程1.硬件准备2.创建工程3.调试FreeRTOS任务调度 六.CubeMX工程源代码下载七.讲解视频链接地址八.小结 一.概要 FreeRTO…

Python | 计算位涡平流项

写在前面 最近忙着复习、考试…都没怎么空敲代码,还得再准备一周考试。。。等考完试再慢慢更新了,今天先来浅更一个简单但是使用的python code 在做动力机制分析时,我们常常需要借助收支方程来诊断不同过程的贡献,其中最常见的一…

使用Python绘制极坐标图

使用Python绘制极坐标图 极坐标图极坐标图的优点使用场景 效果代码 极坐标图 极坐标图(Polar Chart)是一种图表类型,用于显示在极坐标系中的数据。极坐标图使用圆形坐标系,角度表示一个变量的值,半径表示另一个变量的…

【Python】利用代理IP爬取当当网数据做数据分析

前言 在数字化浪潮的推动下,电商平台已经彻底改变了我们的购物方式。从简单的在线交易到复杂的用户交互,电商平台积累了海量的用户数据。这些数据,如同隐藏在深海中的宝藏,等待着被发掘和利用。通过分析用户的浏览、搜索、购买等行…

基于人脸68特征点识别的美颜算法(一) 大眼算法 C++

1、加载一张原图&#xff0c;并识别人脸的68个特征点 cv::Mat img cv::imread("5.jpg");// 人脸68特征点的识别函数vector<Point2f> points_vec dectectFace68(img);// 大眼效果函数Mat dst0 on_BigEye(800, img, points_vec);2、函数 vector<Point2f&g…

使用Perplexity打造产品的27种方式

ChatGPT和Perplexity等聊天机器人正迅速成为产品经理的首选助手。以下是一份全面的指南&#xff0c;介绍PM如何在日常工作中使用Perplexity&#xff0c;该指南基于300多份回复和30次电话后的总结。 理解并制定增长战略&#xff1a;例如&#xff0c;解释增长会计的基本原理&…

Docker的理解

Docker的理解 Docker为什么用Docker&#xff1f;1.提升系统资源利用率2.更快速的交付和部署3.高效的部署和扩容4.更简单的管理 Docker核心技术Docker镜像Docker容器Docker仓库 Docker实现原理Linux NamespaceCgroupUnion FS Docker的应用场景1.微服务架构2.持续集成3.快速部署和…

四.iOS核心动画 - 图层的视觉效果

引言 在前几篇博客中我们讨论了图层的frame,bounds,position以及让图层加载图片。但是图层事实上不仅可以显示图片&#xff0c;或者规则的矩形块&#xff0c;它还有一系列内建的特性来创建美丽优雅的页面元素。在这篇博客中我们就来探索一下CALayer的视觉效果。 视觉效果 图…