知识点积累系列(一)golang语言篇【持续更新】

云原生学习路线导航页(持续更新中)

本文是 知识点积累 系列文章的第一篇,记录golang语言相关的知识点

1.结构体的mapstructure是什么

  • mapstructure:"default"
    • mapstructure是一个Go语言的库,用于将一个map中的值映射到一个结构体对象。
    • 在下面的例子中,如果在映射过程中,map中没有包含"name"或"age"键,那么Person结构体中的NameAge字段会被设置为其类型的零值(例如""0)。而对于"gender"字段,如果map中没有"gender"键或者该键的值为空,那么Gender字段会被赋予"default"标签指定的默认值,即"unknown"。
    type Person struct {Name   string `mapstructure:"name"`Age    int    `mapstructure:"age"`Gender string `mapstructure:"gender" default:"unknown"`
    }
    

2.json key的命名规范

  • model结构体,我们一般都会指定它的json key,应该遵循哪些规范呢?
    • 属性名应该是具有定义语义的有意义的名称。
    • 属性名必须是 驼峰式(首字母小写,后面单词首字母大写) 的,ASCII码字符串。
    • 首字符必须是字母,下划线( _ )或美元符号( $ )。
    • 随后的其他字符可以是字母,数字,下划线( _ )或美元符号( $ )。
    • 应该避免使用Javascript中的保留关键字(下文附有Javascript保留字清单)
  • 参考:https://github.com/darcyliu/google-styleguide/blob/master/JSONStyleGuide.md
    • Google Style Guides 项目是Google公司发布的一系列编程规范指南,覆盖了诸如C++、Java、Python、JavaScript等多种编程语言的最佳实践、命名约定、代码格式等方面的建议,旨在帮助开发人员编写一致、易读、易维护的代码,促进团队协作和代码质量的提高。
    • google官方开源的github:https://github.com/google/styleguide ,官方文档:https://google.github.io/styleguide/
    • 国内共建的中文版github(还不全):https://github.com/zh-google-styleguide/zh-google-styleguide

3.不同版本的UUID

  • 我们在go中,可以使用 github.com/satori/go.uuid 工具,使用uuid
  • 其中,不同版本的uuid有什么区别?
    • Version 1:
      • 版本 1 UUID 基于时间戳和节点的 MAC 地址。它包括当前时间和节点的 MAC 地址,以确保全球唯一性。
      • 实现原理:使用当前时间作为 UUID 的前 64 位,然后将节点的 MAC 地址的散列(通常是 MD5 散列)作为后 64 位。
    • Version 2:
      • 版本 2 UUID 是为 DCE 安全需求设计的,包括 POSIX UID/GID 和 POSIX 分布式计算环境(DCE)的组标识符。
      • 实现原理:不常用,并且对于一般用途来说并不适用,因此我不建议使用。
    • Version 3:
      • 版本 3 UUID 基于命名空间和名称的散列值。它使用给定的命名空间和名称作为输入,生成相应的 UUID。
      • 实现原理:使用给定的命名空间和名称计算散列值(通常是 MD5 散列),然后根据特定的规则将散列值转换为 UUID。
    • Version 4:
      • 版本 4 UUID 是随机生成的 UUID,使用随机性作为生成标识符的方法。它具有非常低的碰撞概率。
      • 实现原理:通过使用随机数生成器生成128位的随机数,并根据 UUID 标准进行必要的设置,例如将版本字段设置为 4。
    • Version 5:
      • 版本 5 UUID 类似于版本 3 UUID,但使用 SHA-1 散列替代了 MD5。
      • 实现原理:使用给定的命名空间和名称计算 SHA-1 散列值,然后将散列值转换为 UUID。

4.go的sql.NullInt64是什么类型

  • sql.NullInt64 是 database/sql 包提供的一种类型,是一个结构体,包含两个字段
    • Int64:表示整数值的字段,类型为 int64
    • Valid:表示整数值是否有效的布尔字段,类型为 bool
  • sql.NullInt64 可以在处理数据库查询结果时,同时获取到整数值以及该值是否为 NULL 的信息
  • 使用示例
    package mainimport ("database/sql""fmt"
    )func main() {// 模拟从数据库中查询到的结果result := sql.NullInt64{Int64:  123, // 整数值Valid: true, // 值有效}// 检查整数值是否有效if result.Valid {// 使用 Int64 字段获取整数值fmt.Println("Value:", result.Int64)} else {fmt.Println("Value is NULL")}
    }
    

5.recover中间件是什么

  • 在 Go 语言中,“recovery” 通常指的是在程序发生 panic(宕机)时进行恢复的机制。在处理 panic 的过程中,日志记录是非常重要的,因为它可以帮助我们了解程序在出现问题时的上下文信息,从而更好地排查和解决 bug。

  • 在 Go 中,你可以使用内置的 defer 和 recover 来捕获 panic,并记录相应的日志信息。一般来说,我们会在程序的入口处或者一些关键的处理函数中设置一个 defer 函数,用来捕获 panic,并记录日志。

  • 下面是一个简单的示例代码,演示了如何在发生 panic 时进行日志记录和恢复:

    package mainimport ("log"
    )func main() {defer func() {if r := recover(); r != nil {log.Printf("Recovered from panic: %v", r)// 在这里可以记录日志或者做一些其他的处理}}()// 模拟发生 panicpanic("oops, something went wrong!")
    }
    
  • 此外,一些框架和库也提供了自带的 panic 恢复和日志记录机制,比如 go-zero 框架就提供了对 panic 的恢复和日志记录支持

6.golang.org/x/…目录是什么,和golang标准库的区别?

  • golang承诺除极少数情况,API是可以向前兼容(forward-compatible)的。这是非常大的承诺了,所以golang标准库的代码,要求非常高,不能随便加入
  • x包下的代码,具有实验性质,对兼容性的要求没有那么高,一般会向前兼容两个版本,也由官方维护,并且一般不会引用第三方依赖(除 golang.org/x/tools/gopls, golang.org/x/vscode-go, and golang.org/x/pkgsite.之外)
  • golang官方也给出了解释
    • https://github.com/golang/go/wiki/X-Repositories

7.go的plugin是什么

  • Go语言自1.8版本开始引入了对插件(Plugin)的支持。

    • 如果不在程序中明确指定,插件是不会被加载的。
    • 通过插件,允许程序在运行时动态加载已经编译好的插件模块。因此,如果我们更新了已有的某个插件,想要不停机的情况下直接更新上去,就更换编译后的可执行文件就可以
    • 在Go语言中,使用插件的主要步骤包括:
      • 创建一个插件模块(被编译为 .so文件):编写一个独立的Go程序,使用plugin包提供的API进行构建。这个程序需要实现 导出函数,以便主程序可以调用这些函数。
      • 主程序加载插件:主程序通过plugin包中的 plugin.Open("./plugin_doctor.so") 函数加载插件模块,并使用插件模块中导出的函数进行交互。
  • 学习博客可参考:https://cloud.tencent.com/developer/article/1914954

8.go的包导入相关知识点

在这里插入图片描述

https://www.cnblogs.com/wongbingming/p/12950888.html

9.go结构体字段后面的 json:",inline" 什么意思

  • json:“,inline” 用于 Go 语言中结构体字段的一个标记,用于表示将该字段的所有子字段展开到当前结构体中
  • 使用场景:有时候希望将嵌套结构体的字段,直接展开到当前结构体中,而不是创建一个嵌套的对象。这时就可以使用 json:“,inline” 标记。
  • 这样,在 JSON 序列化和反序列化时,被标记的字段及其子字段就会被展开到当前结构体中,并与其它字段平级地处理。
  • 举例:
    • Person 结构体嵌套了 Address 结构体,并使用了 json:",inline" 标记
      type Address struct {City  string `json:"city"`State string `json:"state"`
      }type Person struct {Name    string  `json:"name"`Age     int     `json:"age"`Address `json:",inline"`
      }
      
    • 那么,在将一个 Person 对象序列化为 JSON 字符串时,结果如下所示。
      {"name": "John Doe","age": 30,"city": "New York","state": "NY"
      }
      

10.go结构体字段后面的 json:",omitempty" 什么意思

  • omitempty 是 Go 语言中 JSON 标记的一个选项,用于指示在将结构体字段序列化为 JSON 字符串时,如果该字段的值为空(例如零值、空字符串、空数组、空切片、空映射等),则忽略该字段,不将其包含在生成的 JSON 中
  • 举例:
    type Person struct {Name     string `json:"name"`Age      int    `json:"age"`// Address 加了 omitemptyAddress  string `json:"address,omitempty"`Phone    string `json:"phone,omitempty"`
    }// 加入当前我创建了一个对象,Address为空
    person := Person{Name:    "Alice",Age:     25,Address: "",Phone:   "123-456-7890",
    }// 则序列化为json后,结果为:
    {"name": "Alice","age": 25,"phone": "123-456-7890"
    }
    

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

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

相关文章

C语言王道第八周一题

Description 初始化顺序表(顺序表中元素为整型),里边的元素是 1,2,3,然后通过 scanf 读取一个元素(假如插入的是 6),插入到第 2 个位置,打印输出顺序表,每个 元素占 3 个…

添加了gateway之后远程调用失败

前端提示500,后端提示[400 ] during [GET] to [http://userservice/user/1] 原因是这个,因为在请求地址写了两个参数,实际上只传了一个参数 解决方案:加上(required false)并重启所有相关服务

华为HI模式与华为智选模式的左右互博

从去年开始,华为的智驾成果便不断释放出来,一边是号称遥遥领先的问界系列的大卖,对外展示了华为强悍的科技实力;另一边是华为汽车BU的分拆融资,在业界引发了广泛关注,再次让外界看到了华为在“造车”上的立…

【程序员英语】【美语从头学】初级篇(入门)(笔记)Lesson13(买东西)(餐厅点餐事宜;询问有无座位;食物如何调理:牛排、咖啡等;菜单等相关)

《美语从头学初级入门篇》 注意:被 删除线 划掉的不一定不正确,只是不是标准答案。 文章目录 Lesson 13 At the Restaurant 在餐厅会话A会话B笔记餐厅询问有无座位;餐厅电话订座其他餐厅询问有无座位的问法 吸烟区与非吸烟区(smo…

《Python 简易速速上手小册》第3章:Python 的函数和模块(基于最新版 Python3.12 编写)

注意&#xff1a;本《Python 简易速速上手小册》 核心目的在于让零基础新手「快速构建 Python 知识体系」 文章目录 <mark >注意&#xff1a;本《Python 简易速速上手小册》<mark >核心目的在于让零基础新手「快速构建 Python 知识体系」 3.1 函数&#xff1a;编写…

订婚支出及共同生活消费是否属于彩礼?应否返还?

恋爱期间&#xff0c;男女双方为增进情感而互赠财物的现象十分普遍。而当双方关系结束时&#xff0c;赠送财物的一方要求对方返还时&#xff0c;法院能否支持其主张&#xff1f; 一起男方向女方及女方母亲索要彩礼及恋爱期间花销钱款引发的婚约财产纠纷案&#xff0c;法院综合双…

[力扣 Hot100]Day18 矩阵置零

题目描述 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 出处 思路 在原数组上直接操作势必会出现“冗余”的0&#xff0c;即原本[i,j]处不是0&#xff0c;例如由于i行的其他位置有0导致[i,j]…

Shell中的AWK

1.awk的工作原理 逐行读取文本&#xff0c;默认以空格或tab键为分隔符进行分隔&#xff0c;将分隔所得的各个字段保存到内建变量中&#xff0c;并按模式或者条件执行编辑命令。awk倾向于将一行分成多个"字段"然后再进行处理。awk信息的读入也是逐行读取的&#xff0…

【WPF.NET开发】优化性能:数据绑定

本文内容 如何解析数据绑定引用绑定到大型 CLR 对象绑定到 ItemsSource将 IList 绑定到 ItemsControl 而非 IEnumerable请勿仅为数据绑定而将 CLR 对象转换为 XML Windows Presentation Foundation (WPF) 数据绑定功能提供了一种简单一致的方法来呈现应用程序和与数据交互。 …

day38_MySQL

今日内容 0 复习昨日 1 引言 2 数据库 3 数据库管理系统 4 MySQL 5 SQL语言 0 复习昨日 1 引言 1.1 现有的数据存储方式有哪些&#xff1f; Java程序存储数据&#xff08;变量、对象、数组、集合&#xff09;&#xff0c;数据保存在内存中&#xff0c;属于瞬时状态存储。文件&…

删除有序数组中的重复项[简单]

优质博文&#xff1a;IT-BLOG-CN 一、题目 给你一个非严格递增排列的数组nums&#xff0c;请你原地删除重复出现的元素&#xff0c;使每个元素只出现一次&#xff0c;返回删除后数组的新长度。元素的相对顺序应该保持一致。然后返回nums中唯一元素的个数。 考虑nums的唯一元素…

Source Insight 4的使用经验

问题1 函数结束提示符<<end tagDebugData>> 在source insight里的options→preference→syntax decorations→auto annotations→annotate closing braceswith end-comments关闭或启动显示. 但是有的有有的没有&#xff0c;奇怪! 参照网络答案&#xff1a; Sou…

DataX介绍

一、介绍 DataX 是一个异构数据源离线同步工具&#xff0c;致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。 github地址 详细文档 操作手册 支持数据框架如下&#xff1a; 架构 Reader&#xff1…

IPV4 转 IPV6 解决方案大全

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通Golang》…

App全测试扫描漏洞工具

APP 有漏洞被测要下架&#xff0c;怎么处理&#xff1f; 如题&#xff0c;今天被问到&#xff1a;市面上有什么好的 APP 漏洞扫描工具推荐&#xff1f;我们的 APP 有漏洞&#xff0c;需要下架 APP&#xff1f; 前言 事情的经过是这样的&#xff1a; 1&#xff1a;学员公司测试…

UnityShader(九)Unity中的基础光照(下)

标准光照模型 光照模型有许多种&#xff0c;但在早期游戏引擎中&#xff0c;往往只使用一个光照模型&#xff0c;被称为标准光照模型。 标准光照模型只关心直接光照&#xff0c;也就是那些直接从光源发射出来照射到物体表面后&#xff0c;经过物体表面的一次反射直接进入摄像…

在Meteor Lake上测试基于Stable Diffusion的AI应用

上个月刚刚推出的英特尔新一代Meteor Lake CPU&#xff0c;预示着AI PC的新时代到来。AI PC可以不依赖服务器直接在PC端处理AI推理工作负载&#xff0c;例如生成图像或转录音频。这些芯片的正式名称为Intel Core Ultra处理器&#xff0c;是首款配备专门用于处理人工智能任务的 …

Backtrader 文档学习- Broker - Slippage

Backtrader 文档学习- Broker - Slippage 1.概述 回测无法保证真实的市场条件。无论市场模拟有多好&#xff0c;在真实市场条件下都可能发生滑点。这意味着&#xff1a; 请求的价格可能无法与真实市场的价格匹配 集成的回测broker支持滑点。以下参数可以传递给broker &#…

Android 在WebView中加载H5传递图片

最近h5开发一个编译器&#xff0c;要在手机上显示&#xff0c;需要获取手机上的图片&#xff0c;使用webview不能直接到文件管理拿取&#xff0c;还需要对webview做处理&#xff0c;做个记录&#xff0c;方便以后使用&#xff1b; public ValueCallback<Uri[]> mUploadMe…

【安装记录】在pve中创建debian12虚拟机

1、官网下载debian12:https://www.debian.org/ 2、安装虚拟机 &#xff08;1&#xff09;上传 iso 文件到pve服务器&#xff1a; 等待上传中。。。 上传完毕结果如下&#xff1a; &#xff08;2&#xff09;创建虚拟机 类别我也不清楚有什么区别&#xff1f;我看推荐使用host…