知识点积累系列(一)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 main
    
    import (
            "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 main
    
    import (
            "log"
    )
    
    func main() {
            defer func() {
                    if r := recover(); r != nil {
                            log.Printf("Recovered from panic: %v", r)
                            // 在这里可以记录日志或者做一些其他的处理
                    }
            }()
    
            // 模拟发生 panic
            panic("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 加了 omitempty
        Address  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"
    }
    

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

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

相关文章

“量子+半导体”!罗姆半导体与量子公司Quanmatic进行应用探索

​内容来源:量子前哨(ID:Qforepost) 编辑丨慕一 编译/排版丨琳梦 卉可 深度好文:1500字丨10分钟阅读 2023年,日本半导体制造商Rohm(罗姆)与量子算法解决方案公司Quanmatic达成合作…

StarRocks -- 基础概念(数据模型及分区分桶)

1. 数据模型 StarRocks提供四种数据模型: Duplicate Key, Aggregate Key, Unique Key, Primary Key 1.1 Duplicate Key 适用场景: 分析原始数据,如原始日志和原始操作记录。可以使用多种方法查询数据,不受预聚合方法的限制。加…

【Linux】信号量

信号量 一、POSIX信号量1、信号量的原理2、信号量的概念(1)PV操作必须是原子操作(2)申请信号量失败被挂起等待 3、信号量函数4、销毁信号量5、等待信号量(申请信号量)6、发布信号量(释放信号量&…

高校教学方法论简述

简述。 背景 高校教师的任务:教学、科研、服务、辅导等;高校教师通常缺乏课程与教学的专业基础;应用型高校的课程教学、科研不同于学术型高校;民办应用型高校教师如何安身立命?应用型高校的专业课程与教学特色 教完--…

02-opencv简单实例效果和基本介绍-上

机器视觉概述 机器视觉是人工智能正在快速发展的一个分支。简单说来,机器视觉就是用机器代替人眼来做测量和判断。机器视觉系统是通过机器视觉产品(即图像摄取装置,分CMOS和CCD两种)将被摄取目标转换成图像信号,传送给专用的图像处理系统,得到被摄目标的形态信息,根据像素…

Linux Archcraft结合内网穿透实现SSH远程连接

文章目录 1. 本地SSH连接测试2. Archcraft安装Cpolar3. 配置 SSH公网地址4. 公网远程SSH连接5. 固定SSH公网地址6. SSH固定地址连接7. 结语 Archcraft是一个基于Arch Linux的Linux发行版,它使用最简主义的窗口管理器而不是功能齐全的桌面环境来提供图形化用户界面。…

电加热热水器上架亚马逊美国站需要的UL174报告

电加热热水器上架亚马逊美国站需要的UL174报告 家用热水器出口美国需要办理UL174测试报告。 热水器就是指通过各种物理原理,在一定时间内使冷水温度升高变成热水的一种装置。分为制造冷气部分和制造热水部分。其实这两个部分又是紧密地联系在一起,密不可…

flask+django基于python的网上美食订餐系统_3lyq1

设计旨在提高顾客就餐效率、优化餐厅管理、提高订单准确性和客户的满意度。本系统采用 Python 语言作为开发语言,采用Django框架及其第三方库和第三方工具来进行开发。该方案分为管理员功能模块,商家功能模块以及用户前后功能模块三部分。开发前期根据用…

管理的四种风格

前言 管理的四种风格,一般的领导大概就是这几种管理模式,告知,辅导,参与,授权,还有就是乱搞式(神经病模式)。 一、告知式 告知式是指组织通过正式、明确的渠道,将信息传达给员工。这种方式通常用于传递基本的规章制度、工作流程、政策文件等。告知式的作用在于确保员…

SRC实战 | 信息泄露挖掘

本文由掌控安全学院 - 叴龙 投稿 1. 信息搜集 首先老语法先搜集一波,毕竟没有钓鱼和sg的能力,只能找注册站去挖挖了。 web.title”XX大学”&&web.body”忘记密码”&&web.body”注册” 2. 漏洞挖掘 这里找到一个可以注册网站接口&…

增量式PID和PWM输出控制比例阀开度

SMART PLC增量式PID算法公式和梯形图代码,请参考下面链接文章: https://rxxw-control.blog.csdn.net/article/details/125767636https://rxxw-control.blog.csdn.net/article/details/125767636PWM输出详细介绍 https://rxxw-control.blog.csdn.net/article/details/124083…

Linux下如何编译C/C++代码?从.c到.exe经历了什么?

🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻强烈推荐优质专栏: 🍔🍟🌯C的世界(持续更新中) 🐻推荐专栏1: 🍔🍟🌯C语言初阶 🐻推荐专栏2: 🍔…

【深度学习每日小知识】Model Accuracy 模型准确率

Model Accuracy 模型准确率 模型准确性是衡量机器学习 (ML) 模型基于数据做出预测或决策的能力的指标。它是用于评估 ML 模型性能的常用指标,可用于比较不同模型的性能或评估特定模型对于给定任务的有效性。 有多种不同的方法来衡量模型的准确性,具体取…

C++入门学习(二十)与或非

逻辑运算符的符号表示: 与:&&或:||非:! a && b如果a和b都为真,则结果为真,否则为假a || b如果a和b有一个为真,则结果为真,二者都为假时,结…

奔驰源代码意外泄露,暴露内部敏感数据

近日,RedHunt 实验室的研究人员发现,梅赛德斯-奔驰无意中留下了可在线访问的私钥,暴露了内部数据,包括公司的源代码。目前尚不清楚数据泄露是否暴露了客户数据。 梅赛德斯-奔驰(Mercedes-Benz)是德国著名的…

Github 上传项目(个人令牌token)

1.点击 github头像 : setting -> Developer Settings -> Personal access tokens 2.在要上传的文件夹下运行以下命令: git init git commit -m "first commit" git branch -M main 利用以下命令模…

2023年全国职业院校技能大赛(高职组)“云计算应用”赛项赛卷10

某企业根据自身业务需求,实施数字化转型,规划和建设数字化平台,平台聚焦“DevOps开发运维一体化”和“数据驱动产品开发”,拟采用开源OpenStack搭建企业内部私有云平台,开源Kubernetes搭建云原生服务平台,选…

机器学习复习(4)——CNN算法

目录 数据增强方法 CNN图像分类数据集构建 导入数据集 定义trainer 超参数设置 数据增强 构建CNN网络 开始训练 模型测试 数据增强方法 # 一般情况下,我们不会在验证集和测试集上做数据扩增 # 我们只需要将图片裁剪成同样的大小并装换成Tensor就行 test_t…

上位机在工业控制系统中的重要作用及其与PLC的互补关系

上位机在工业控制系统中的重要作用及其与PLC的互补关系 在现代工业自动化领域,上位机与可编程逻辑控制器(PLC)都是不可或缺的重要组成部分。它们各自发挥着独特的优势,在实现生产过程控制、监控和数据管理中扮演了关键角色。然而&…

postgresql 查询缓慢原因分析

pg_stat_activity 最近发现系统运行缓慢,查询数据老是超时,于是排查下pg_stat_activity 系统表,看看有没有耗时的查询sql SELECT pid, state, query, query_start, backend_type FROM pg_stat_activity WHERE state active AND query LIK…