知识点积累系列(一)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.hqwc.cn/news/441456.html

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

相关文章

[嵌入式系统-6]:龙芯1B 开发学习套件 -3-软件层次架构

目录 一、龙芯软件架构 1.1 通用软件架构 1.2 龙芯软件架构 1.3 龙芯各种应用程序 1.4 龙芯SOC芯片硬件:龙芯1B 1.5 PMON软件 1.6 龙芯IDE管辖的软件 (1)CPU Core驱动程序 (2)SOC芯片外设驱动程序 &#xff…

螺旋遍历二维数组【leetcode】

给定一个二维数组 array,请返回「螺旋遍历」该数组的结果。 螺旋遍历:从左上角开始,按照 向右、向下、向左、向上 的顺序 依次 提取元素,然后再进入内部一层重复相同的步骤,直到提取完所有元素。 示例 1: …

[docker] Docker容器服务更新与发现之consul

一、consul的相关知识 1.1 什么是注册与发现 服务注册与发现是微服务架构中不可或缺的重要组件。起初服务都是单节点的,不保障高可用性,也不考虑服务的压力承载,服务之间调用单纯的通过接口访问。直到后来出现了多个节点的分布式架构&#…

走迷宫-bfs

package Test;import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader;public class Main {static int N 110,hh 0,tt -1,n,m;static int[][] g new int[N][N]; //用来存储迷宫static int[][] d new int[N][N]; //用来存储d[i…

【送书福利-第三十期】《Java面试八股文:高频面试题与求职攻略一本通》

内容简介 本书将碎片化的Java面试八股文知识点系统化、结构化,精选了近200道经典高频的八股文面试题,整理了近20个经典高频的实战场景解决方案,准备了10多个面试简历实操技巧。每道面试题都标注了难度指数、考查频率、开发年限和匹配岗位等&…

c++之说_9_6|自定义类型 struct operator 重载运算符关键字

c中 struct 和 class 特性几乎一模一样 所以很多都是共有的特性 篇幅就很多了 c中 我觉得最牛皮的概念之一 就是 重载运算符 operator 关键字 这个东西 能将 我们的 运算符 (-*/) new delete 类型转换 写在类里面当成员函数 并制定 该类型变…

手机屏幕生产厂污废水处理需要哪些工艺设备

随着手机行业的快速发展,手机屏幕生产厂的规模也越来越大,但同时也带来了大量的污废水排放问题。为了保护环境和人类的健康,手机屏幕生产厂需要采取适当的工艺设备来处理污废水。本文将介绍手机屏幕生产厂污废水处理所需的工艺设备。 首先&am…

数据据库八之 视图、触发器、事务

【零】准备数据 【1】创建表 (1)部门表 d_id是部门的编号d_name是部门的名字 # 确保表不存在 drop table if exists department; # 创建表 create table department( d_id int auto_increment primary key, d_name varchar(6) )auto_increment 501 …

CSS之webkit内核中的属性text-stroke

让我为大家介绍一下text-stroke 大家是否想过要弄一个描边过的文字&#xff0c;接下来&#xff0c;text-stroke就可以为你解决 text-stroke是一个复合属性&#xff0c;里面有两个参数&#xff1a;描边的尺寸 描边的颜色 <!DOCTYPE html> <html lang"en">…

【服务端性能测试】性能测试策略如何做

一、需求收集 先需要确认本次测试目的是什么&#xff0c;然后再看我们需要用什么参数来判断这个目的是否能够达成。 1.1 业务性能指标参考&#xff1a; TPS、QPS、RT、请求成功率&#xff08;一般请求成功率>99.99%&#xff09; 1.2 硬件性能指标参考&#xff1a; 即服…

【React】前端项目引入阿里图标

【React】前端项目引入阿里图标 1、登录自己的iconfont-阿里巴巴矢量图标库&#xff0c;把需要的图标加入到自己的项目中去&#xff1b;2、加入并进入到项目中去选择Symbol点击复制代码3、安装ant-design/icons4. 新建一个MyIcon.js文件内容如下5、在项目中使用 1、登录自己的i…

【PyTorch实战演练】Fast R-CNN中的RoI(Region of Interest)池化详解

文章目录 0. 前言1. ROI池化的提出背景2. RoI池化的结构与工作原理3. RoI池化的作用及意义4. RoI使用示例 0. 前言 按照国际惯例&#xff0c;首先声明&#xff1a;本文只是我自己学习的理解&#xff0c;虽然参考了他人的宝贵见解及成果&#xff0c;但是内容可能存在不准确的地方…