Golang基础问题

news2024/10/6 20:36:20

在这里插入图片描述

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 语言中数组的长度是数组类型的一部分,定义数组时必须指定存放元素的类型和容量

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux内网端口转公网端口映射

由于服务商做安全演练,把原先服务器内网的端口映射到外网端口全都关闭了,每次维护服务器特别麻烦,像数据库查询如果用原生的mysql 去连接,查询返回的结果乱了,非常不方便。 查了服务还是可以正常访问部分外网的&#x…

数据脱敏方案(doc)

数据脱敏工作不仅要确保敏感信息被去除,还需要尽可能的平衡脱敏所花费的代价、使用方的业务需求等多个因素。因此,为了确保数据脱敏的过程、代价可控,得到的结果正确且满足业务需要,在实施数据脱敏时,应从技术和管理两…

JAVA 实现拍卖框架及拍卖详情流程介绍(包含代码示咧)

本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(注明:作者:王文峰…

宏景eHR sduty/getSdutyTree SQL注入漏洞复现

0x01 产品简介 宏景eHR人力资源管理软件是一款人力资源管理与数字化应用相融合,满足动态化、协同化、流程化、战略化需求的软件。 0x02 漏洞概述 宏景eHR /servlet/sduty/getSdutyTree 接口处存在SQL注入漏洞,,未经身份验证的远程攻击者通过利用SQL注入漏洞配合数据库xp_c…

Mybatis-01 原理

一. JDBC式编程 在 jdbc 编程中,我们最常用的是 PreparedStatement 式的编程,我们看下面这个例子; Connection conn null; PreparedStatement ps null; ResultSet rs null;try {// 1. 注册驱动Class.forName("com.mysql.jdbc.Drive…

【MySQL】数据类型{tinyint/bit/float/decimal/char/varchar/date/enum/set}

文章目录 1.数据类型分类2.数值类型2.1tinyint 1字节2.2bit 0-64位2.3浮点类型float 4个字节decimal 3.字符串类型char开多少空间为多大varchar开多少是上限 存多少占多大空间日期和时间类型enum和setenum:枚举,“单选”类型;set:…

从一次 SQL 查询的全过程了解 DolphinDB 线程模型

1. 前言 DolphinDB 的线程模型较为复杂,写入与查询分布式表都可能需要多个类型的线程。通过了解 SQL 查询的全过程,可以帮助我们了解 DolphinDB 的线程模型,掌握 DolpinDB 的配置,以及优化系统性能的方法。 本教程以一个分布式 …

Python基于卷积神经网络分类模型(CNN分类算法)实现时装类别识别项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 在深度学习领域,卷积神经网络(Convolutional Neural Networks, CNNs&#xff0…

python拉取gitlab项目以及拉取报错处理

问题解决 问题1、unable to access https://gitlab.dome.com/web-dome/dome.git/: SSL certificate problem: self signed certificate 解决:打开本地git bash输入下面代码 git config --global http.sslVerify false; 问题2、Authentication failed for https:…

G1 垃圾收集器

从 JDK1.9 开始默认 G1,应用在多处理器和大容量内存环境中。 基础概念 Region G1 给整一块Heap内存区域均匀等分了N个 Region,N 默认情况下是 2048。 Region的大小只能是1M、2M、4M、8M、16M或32M (1-32M,并且为2的指数),比如-Xmx16g -Xms…

JAVA 发送短信信息工具类(腾讯云)

发送短信信息工具类 import cn.hutool.core.collection.CollUtil; import com.tencentcloudapi.common.Credential; import com.tencentcloudapi.common.exception.TencentCloudSDKException; import com.tencentcloudapi.sms.v20210111.SmsClient; import com.tencentcloudapi…

Maven:下载配置教学(2024版 最简)

文章目录 一、Maven下载1.1 下载官网1.2 下载压缩包1.3 解压1.4 创建repo文件夹 二、Maven配置2.1 环境变量2.1.1 新建系统变量2.1.2 添加Path 2.2 阿里云镜像2.3 JDK2.4 本地仓库2.5 conf文件的全部内容2.6 测试安装配置是否成功 三、IDEA中配置Maven3.1 新配置3.2 推荐配置 四…

ACE Studio的成功经验:从国内到全球的市场拓展

在AI技术飞速发展的今天,音乐创作也正经历着一场前所未有的变革。作为这一变革的前沿代表,ACE Studio无疑引起了广泛关注。本文将通过对时域科技创始人Joe与曲凯的对话,深入探讨ACE Studio的创新理念、市场定位、技术优势以及未来发展方向。 …

20240704 每日AI必读资讯

Runway Gen-3 Alpha 详细使用教程 - 以及提示词指南大全,包括摄像机风格、灯光效果、运动状态类型以及风格美学、文本风格等。 - Gen-3 Alpha是Runway推出的新—代视频生成模型,它在保真度、一致性、运动和速度方面都比以前的模型有所改进,…

HTML总结2

什么是HTML HTML(Hypertext Markup Language),超文本标记语言,(是一套标记标签,一般用来描述网页)。 HTML标签 HTML标记标签,通常被称为HTML标签,或者HTML标记。 标签…

Qt篇——QLabel固定尺寸的情况下让字体大小自适应并自动换行以完整显示

当文字较少时,默认字体大小为16;当文字内容较多时,自动换行并缩小字体。 举例: 字体较少时 字体较多时 思路: 设置自动换行属性 setWordWrap;通过QFontMetrics计算文字字体要多大、显示多少行才不会超过…

是霍尼韦尔还是柏曼啊??书客、霍尼、柏曼三款护眼大路灯横向PK!

是霍尼韦尔还是柏曼啊??近年来市面上的劣质护眼大路灯越来越多,很容易使我们选到劣质产品。为了解决这一问题,我自费购买了多个品牌的护眼大路灯进行测评。经过深入研究,我发现市面上确实存在一些光线不稳定、选材做工…

【postgresql初级使用】用户与角色的关系,搭建数据库安全体系中的分权管理

用户角色管理 ​专栏内容: postgresql使用入门基础手写数据库toadb并发编程 个人主页:我的主页 管理社区:开源数据库 座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物. 文章目录 用户角色管…

使用 Smart-doc 记录 Spring REST API

如果您正在使用 Spring Boot 开发 RESTful API,您希望让其他开发人员尽可能容易地理解和使用您的 API。文档是必不可少的,因为它为将来的更新提供了参考,并帮助其他开发人员与您的 API 集成。很长一段时间以来,记录 REST API 的方…

Toshiba东芝TB67S109AFNAG:步进电机控制的强大解决方案

与我司合作的工程师客户不断寻求稳健、高效且精确的元件来提升他们的产品设计。东芝的TB67S109AFNAG步进电机驱动IC具备这些优点,是从工业机械到消费电子等广泛应用的理想选择。本文将深入探讨TB67S109AFNAG的特性、优势和应用。 主要特性 TB67S109AFNAG是一款采用…