当前位置: 首页 > news >正文

【开发规范】go项目开发中的[流程,git,代码,目录,微服务仓库管理,静态检查]

文章目录

  • 前言
  • 一、有哪些规范我们应该遵循
  • 二、项目开发流程
  • 三、git的代码分支管理
    • 1. 分支管理
    • 2. commit规范
  • 三、go的代码规范
  • 四、go项目目录规范
  • 五、微服务该采用multi-repo还是mono-repo?
    • 1. 引言
    • 2. Repos 是什么?
    • 3. 什么是 Mono-repo?
    • 4. Mono-repo 的劣势
    • 5. 什么是 Multi-repo?
    • 6. Multi-repo 的优势?
    • 7. Multi-repo 的劣势
    • 8. Mono Repo 和 Multi Repo 的区别
  • 六、微服务的项目目录规范
  • 七、代码检测
    • 1. govet进行代码检测
    • 2. golangci-lint进行代码检测
    • 3. goland配置golangci-lint实现保存时自检


前言

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


一、有哪些规范我们应该遵循

  1. 开发流程规范
    • 项目开发规范
    • go项目开发流程的规范
  1. 代码分支管理规范 - git开发(不分语言)
    • 代码分支开发规范
    • commit规范
  1. go - 代码规范
    • uber提供的代码规范
  1. go - 代码目录规范
    • 代码风格不统一
    • 目录杂乱无章 - 维护性很差
    • 错误码的处理
    • 常见的项目类型:
      1. api服务
      1. 非api服务
        1. 命令行工具
        1. deamonset服务:比如rocketmq消费者服务(一直运行但不对外提供端口服务)
      1. 框架类、组件类: 比较多样,并没有统一的规范
      1. sdk开发
    • 不同类型的服务目录规范
  1. go - 微服务代码目录规范
    • 微服务项目和单体服务的目录不同点
    • 微服务应该如何管理目录
  1. 代码发布规范
    • go项目的发布步骤
    • 静态代码扫描
    • 代码自动格式化
    • 代码自动运行单元测试
    • go vet检查 竞态
    • 自动编译
    • 镜像上传
  1. 代码结构规范
    • 代码是否便于写单元测试- 很多项目后期想加单元测试很麻烦,初始化过程太繁琐
    • code review流程是否满足
    • 设计模式是否引入了?
    • 代码分层做好了吗 - 后期想要替换gorm会不会做不到,想要替换gin能否做到?
    • ioc和aop是否能理解其作用?
    • 代码自动生成的应用场景?和java的区别在哪里?
    • 你是否理解到go自带工具的作用?为什么要这样做?

上述是基本保障,实际开发中还有很多其他更具体的工作需要注意,后面开发中逐步理解到


二、项目开发流程

在这里插入图片描述


三、git的代码分支管理

1. 分支管理

  1. git想要使用好,最好是理解git的大概原理,git的规范使用基本上可以出一门课,所以我们只给大家
    简单介绍git的规范,各个规范我会给出网上查询到的比较好的文章,请轻喷
  2. git本身学习很枯燥,所以最好的办法就是强迫自己平时遵循这些规范,养成好习惯
  3. 项目开发中最常用的是用git进行管理,git对于多人开发中有一套成熟的分支管理
  • 现在有5个人
    1. a和c突然要开发一个功能A
    1. b和d这个时候业开发一个功能D
    1. e和a也要合作开发一个功能C
    1. 微服务不适合太多人开发一个微服务 一个微服务10个人开发
  1. 绝大部分小公司都仍然会采用svn式的管理,无可厚非
  2. 多人开发的大项目都会采用标准的开发管理,减少代码冲突,大家进入以后直接遵循即可
  3. 如果一两个人开发一个项目简单化就可以了
  4. 参考这篇: https://zhuanlan.zhihu.com/p/23478654

2. commit规范

commit规范很重要,不论是多人开发还是自己开发,否则后期你自己看代码都得晕, 而且还能帮我们生成changelog, commit的log生成changelog的步骤可以参考:

https://cloud.tencent.com/developer/article/1755709

很多时候为了方式代码丢失本地会进行进行commit, 要学会merge commitlog

举个例子说明一下:

我们现在开发了一个订单接口服务,但是开发中,我们commit了一个log:feature-order:增加生成订单接口,接下来我们发现了一个bug,然后继续commit:feature-order:修复了bug1,然后又发现了一个bug, 继续commit:feature-order:修复了bug2, 然后又增加了log记录,生成commit:feature-order:增加日志打印,然后就成这样了:

  1. feature-order:增加生成订单接口
  2. feature-order:修复了bug1
  3. feature-order:修复了bug2
  4. feature-order:增加日志打印

我们发布的版本是V1.2,生成changelog:

  1. feature-order:增加生成订单接口
  2. feature-order:修复了bug1
  3. feature-order:修复了bug2
  4. feature-order:增加日志打印

其实这就是一个低质量的commit log,这些都可以合并成一个commit,我们并不关心你中途的所有commit log

合并commit log可以参考:https://cloud.tencent.com/developer/article/1690638
commit规范可以参考: https://blog.csdn.net/xmcy001122/article/details/123372325

goland的插件:
在这里插入图片描述

三、go的代码规范

uber开源的代码规范: https://github.com/xxjwxc/uber_go_guide_cn

建议有事没事就到uber看看

  1. 代码规范一下全部接受不容易,经常看,养成习惯即可
  2. 规范不代表权威,某个规范自己思考一下,不一定就正确,要结合自己的需求具体情况具体分析
  3. 简单给大家介绍几个
  4. 零值 Mutex 是有效的
  5. errors比较重要,后面有专门的章节讲解
  6. 这里有一些我们后面会有专门的章节讲解,所以建议大家以后再来看一下这里的规范

四、go项目目录规范

很多目录规范是随着某个框架而确定的,并不是语言本身可以决定目录规范,比如python中的django目录, java的spring目录规范,但是go目前还没有出现spring一样一统天下的框架,所以目录规范也并不统一,但是在某种程度上还是有大家的共识的,我们以uber的目录规范来做一下说明。

参考: https://github.com/golang-standards/project-layout/blob/master/README_zh.md

五、微服务该采用multi-repo还是mono-repo?

Multi-repo 和 Mono-epo 是 Git 托管代码的两种策略,我们讨论下两者的策略以及其利弊。

1. 引言

大多数现代项目都是在 Git 上管理和托管的。Git 已经成为来自世界各地的分布式源代码管理、版本控制和协作的标准平台。Git 是快速和高效的,主要有两种方法来托管和管理 Git 代码:

  • Mono-repo
  • Multi-repo

在深入研究这些方法之前,让我们先了解一下 Repo 是如何工作的。

2. Repos 是什么?

仓库(Repo)包含项目的所有文件夹和文件。它还包含关于用户、人和计算机的信息。
Git 仓库数据受版本控制,Repo 可以由个人或团队成员拥有。
Git 仓库可以是公开的,私人的,或者是内部的。GitHubGit 仓库的一个托管服务,并且有一个用户界面。

Git 提供了版本控制和代码共享功能,Git 的特别之处在于,如果开发人员想对他们的文件做一些修改,他们可以将整个存储库复制到他们的本地系统中。因此,即使开发人员没有对特定项目的写入权限,他们也可以在本地复制内容并修改它们(我们称为 forking)。

此外,如果开发人员希望共享本地所做的更改,他们可以向项目所有者发送一个 pull request。一个项目可以只有一个服务。如果你的项目有多个工作流,你可以为每个工作流创建多个服务。大多数开发人员喜欢将较大的项目拆分为具有一个或多个功能的较小的独立服务。每个服务都可以解决各种业务问题。随着 serverless 框架的流行,用户可以将功能作为服务访问。

一旦你创建了这些函数——作为服务并部署它们,下一步就是对它们构造和版本控制——你可以将所有的服务放在一个存储库(mono-repo)中,或者为你拥有的每个服务拥有一个单独的存储库(multi-repo) !

3. 什么是 Mono-repo?

mono-repo 方法中,你可以将所有服务保存在单一(mono)存储库中。你仍然可以独立地部署和管理每个服务。这些服务可以共享公共库和代码。

像 Facebook、 Google 和 Dropbox 这样的公司都使用 Mono-repo
如果你把一个代码打包成公共的代码供大家go get

那么你会面临一个问题:
版本维护
假设A项目用了你的1.x 版本
B项目用了你的2.x的版本
c项目用了你的3.x的版本
所以随着项目的反正,你这个库会越来越大,越来越多的无用代码

最好的基本办法是什么:强制升级,有个问题 你很难知道谁用了你的代码, 别人不愿意升级
Mono-repo 的优势
Mon-repo 方式有许多优点:

  • 存储所有项目代码的单独位置,团队中的每个人都可以访问。
  • 易于重用和共享代码,与团队合作。
    • 就意味着基本上没有版本管理,只有最新版,我升级了版本,引用的地方就会报错
  • 很容易理解你的变更对整个项目的影响。
  • 代码重构和代码大变更的最佳选择。
  • 团队成员可以获得整个项目的总体视图。
  • 易于管理依赖关系。

4. Mono-repo 的劣势

当然,Mono-repo 也有一些缺点,主要表现在性能上。如果你的项目增长,每隔一天都会添加更多的文
件,那么 git checkout、pull 和其他操作可能变得缓慢,以及文件搜索可能需要更长的时间。
此外,如果你为你的项目雇佣了许多独立的承包商,那么让他们访问整个代码库可能不那么安全。
此外,实现持续部署(Continuous deployation,CD)也很困难,因为许多人可以合入他们的更改,而持续
集成(Continuous Integration,CI)系统可能需要进行多次重构。
使用 Mono-repo 的大公司都有自定义工具来处理扩展问题。例如,Facebook 使用自定义文件系统和源
代码控制。

5. 什么是 Multi-repo?

在 Multi-repo 方法中,存在多个存储库,它们承载一个项目的多个库和服务。如果服务发生更改,开发
人员只需重新构建该服务,而不需要构建整个项目。个人和团队可以从事他们特定的服务,他们只能访问
他们有权限的服务。
像 Netflix 和 Amazon 这样的公司使用 Multi-repo。

6. Multi-repo 的优势?

采用 Multi-repo 的公司数量远远多于采用 Mono-repo 的公司,原因如下:

  1. 每个服务和库都有自己的版本控制。
  2. 代码 checkout 和 pull 是小型且独立的,因此即使项目规模增大,也不存在性能问题。
  3. 团队可以独立工作,不需要访问整个代码库。
  4. 更快的开发和灵活性。
  5. 每个服务都可以单独发版,并有自己的部署周期,从而使 CI 和 CD 更易于实现。
  6. 更好的权限访问控制——所有的团队不需要完全访问所有的库——需要的时候,再获得读访问权限。

7. Multi-repo 的劣势

跨服务和项目使用的公共依赖和库必须定期同步以获得最新版本。
某种程度上鼓励孤立文化,导致重复代码和各个团队试图解决相同问题。
每个团队可能遵循不同的一组最佳实践来编写代码,从而导致难以遵循通用的最佳实践。

8. Mono Repo 和 Multi Repo 的区别

让我们来概括 Mono RepoMulti Repo 的区别:

Mono-repoMulti-repo
一个组织的所有项目的所有代码都驻留在中央存储库中每个服务和项目都有一个单独的存储库
团队可以一起协作和工作; 他们可以看到彼此的变化团队可以自主工作; 个人的变更不会影响其他团队或项目的变更
每个人都可以访问整个项目结构管理员可以将访问控制限制到开发人员需要访问的项目或服务
如果项目规模不断增长,则可能会出现并放大问题良好的性能,因为有限的代码和较小的服务单元
难以实现持续部署(CD)和持续集成(CI)开发人员可以很容易地实现 CD 和 CI,因为他们可以独立地构建服务
开发人员可以轻松地共享库、 api 和其他在中央存储库中更新的公共代码对库和其他常见代码的任何更改都应该定同步,以避免以后出现问题

注: 技术栈统一的话建议采用mono-repo, 不同服务技术栈不统一就采用multirepo, 目前采用mono-repo的知名公司: google、bilibili

总结

Mono-repoMulti-repo 同样流行,哪一个更好取决于你的项目大小、项目需求以及你需要的版本控制和访问控制级别。

Mono-repo 侧重一致性,而 Multi-repo 侧重于解耦。在 Mono-repo 中,整个团队可以看到某一个人完成的更改,而 multi-repo 为每个团队创建一个单独的 repo,这些团队只能访问所需的仓库。

如果你想为你的项目使用 mono-repomulti-repo 的组合,你可以使用 meta,一个管理多个项目和库的工具。

六、微服务的项目目录规范

至于multi-repo直接采用前面的layout即可,但是对于mono-repo确可以有两种选择

  1. 将共同部分抽取到根目录下, 不同的代码放在internal
  2. 将公共代码比如pkg代码放在根目录下,cmd等都放在不同的服务中

两种都可以,看个人喜好,我采用的是第一种

/api 存放proto文件和生成的代码
/app 存放各个微服务,包括grpc服务和http服务 : 大量逻辑在这里,这里是重点目录,后期各个服务单独重构的时候讲解具体的原因
/goods 存放商品服务
/srv service服务
/mxshop
/admin 后台管理系统的服务
/apiserver 整个电商项目的服务
/configs 保存各个服务的yaml配置文件
/cmd 保存各个服务的启动main启动源码
/build 保存docker部署文件和shell启动脚本
/logs 保存各个服务的日志文件
/pkg 保存所有微服务的公共代码
/third_party 第三方源码,可以存放第三方的proto源码,克隆下来的第三方源码等
/tools 存放一些工具源码

七、代码检测

1. govet进行代码检测

在 Go 项目发布阶段中,go vet 是一个非常有用的工具,它用于静态分析 Go 代码并查找潜在的错误或问题。

具体而言,go vet 会检查代码中的常见错误,例如未使用的变量、格式化字符串与参数不匹配、导入了但未使用的包等。它还可以检查常见的代码约定,例如命名规范、函数签名等。

除了这些常见的错误和约定之外,go vet 还可以检查一些特定的错误。例如,它可以检查使用 sync.WaitGroup 时是否正确地使用了 Add、Done 和 Wait 方法,以及是否存在可能导致竞争条件的代码。

在发布 Go 项目之前,运行 go vet 可以帮助开发人员及时发现和修复代码中的问题,提高代码质量和稳定性。

示例:

假设我们有以下的 Go 代码,其中包含了一个错误:

package mainimport "fmt"func main() {fmt.Printf("Hello, world!", 123) // 错误:格式化字符串与参数不匹配
}

在这个例子中,我们使用 fmt.Printf 函数输出字符串 “Hello, world!”,但是在格式化字符串中并没有包含 %s 等占位符,却传递了一个整数 123 作为参数,这样会导致输出不符合预期。

为了发现这个错误,我们可以使用 go vet 工具,命令如下:

go vet main.go

运行上述命令后,go vet 会分析 main.go 文件,并检查其中的潜在问题。在这个例子中,它会输出以下信息:

# command-line-arguments
./main.go:6: printf call has arguments but no formatting directives

这个输出告诉我们,在第 6 行的 fmt.Printf 调用中,传递了参数但是却没有相应的格式化指令。这个错误很明显,因此很容易修复。我们只需要将格式化字符串修改为 “Hello, world!\n”,然后再次运行 go vet,即可确保代码中不再存在这个问题。

2. golangci-lint进行代码检测

golangci-lint 是一个集成工具,它集成了很多静态代码分析工具(静态代码分析是不会运行代码的),我们通过配置这个工具,便可灵活启用需要的代码规范检查。

官方文档:https://golangci-lint.run/usage/install/

安装:
golangci-lint 是 Go 语言编写的,可以从源代码安装它,在终端输入命令:

go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest

有可能会找不到命令, 可以参考一下官方文档:https://golangci-lint.run/usage/install/

查看支持的linter

golangci-lint help linters

支持的命令和flag

golangci-lint -h

完整的golangci.yml配置

具体配置可以参考:https://golangci-lint.run/usage/linters

3. goland配置golangci-lint实现保存时自检

安装后添加golangci-lint
在这里插入图片描述

在这里插入图片描述
添加到save
在这里插入图片描述
自定义组件:

官方文档:https://golangci-lint.run/usage/linters

示例:
在项目根目录添加新文件:.golangci.yml

run:timeout: 5mmodules-download-mode: readonlygovet:disable-all: true# Enable analyzers by name (in addition to default).# Run `go tool vet help` to see all analyzers.# Default: []enable:- printflinters:disable-all: trueenable:- errcheck- goimports- gofmt- govet- staticcheckissues:exclude-use-default: falsemax-issues-per-linter: 0max-same-issues: 0

相关文章:

【开发规范】go项目开发中的[流程,git,代码,目录,微服务仓库管理,静态检查]

文章目录前言一、有哪些规范我们应该遵循二、项目开发流程三、git的代码分支管理1. 分支管理2. commit规范三、go的代码规范四、go项目目录规范五、微服务该采用multi-repo还是mono-repo?1. 引言2. Repos 是什么?3. 什么是 Mono-repo?4. Mono-repo 的劣势5. 什么是…...

数组初始化方式与decimal.InvalidOperation

数组初始化方式与decimal.InvalidOperation调用函数主函数: 数组声明不同带来的报错与否1. 报错decimal.InvalidOperation的数组初始化版本2. 可行的初始化版本输出结果1. 报错时的内容2. 正常的输出计算结果原因(是否是数组与列表不同引起(?…...

【Opencv-python】之入门安装

目录 一、安装Python 1. 登录官网https://www.python.org/downloads/ 2. 任选一个版本,下载Python 3. 安装Python 记得勾选下图的Add Python 3.6 PATH, 添加python到环境变量的路径,然后选择Install now​编辑 4. 验证是否安装成功 5.退出 二、安装…...

MySQL进阶(二)

目录 1、视图 1、检查选项 2、视图的更新 3、视图作用 2、存储过程 1、语法 2、变量 1、系统变量 2、用户定义变量 3、局部变量 3、if 4、参数 5、case 6、循环 1、while 2、repeat 3、loop 7、游标、条件处理程序 8、存储函数 3、触发器 4、锁 1、全局锁 2、表级锁 …...

热爱所有热爱

想成为这样的一个人,在工作中是一名充满极客精神的Programmer,处理遇到的问题能够游刃有余,能够做出优雅的设计,写出一手优秀的代码,还有着充分的学习能力和业务能力,做一名职场中的佼佼者。 在工作之余还能…...

Redis学习之数据删除与淘汰策略(七)

这里写目录标题一、Redis数据特征二、过期数据三、过期数据删除策略3.1 数据删除策略的目标3.2 定时删除3.3 惰性删除3.4 定期删除3.5 删除策略对比3.6 实际应用四、数据淘汰策略4.1 淘汰策略概述4.2 策略配置一、Redis数据特征 Redis是一种内存级数据库,所有的数据…...

HashMap 面试专题

1、HashMap 的底层结构 ①JDK1.8 以前 JDK1.8 之前 HashMap 底层是 数组和链表 结合在一起使用也就是 链表散列。HashMap 通过 key 的hashCode 函数处理过后得到 hash 值,然后通过 (n - 1) & hash 判断当前元素存放的位置(这里的 n 指的是数组的长度…...

域组策略自动更新实验报告

域组策略自动更新实验报告 域组策略自动更新实验报告 作者: 高兴源 1要求、我公司为了完善员工的安全性和系统正常漏洞的维护,所以采用域组策略自动更新的方法来提高账户安全性,减少了用户的错误。 1.实验环境如下1台2008r2一台创建域,一台wi…...

Java自定义生成二维码(兼容你所有的需求)

1、概述作为Java开发人员,说到生成二维码就会想到zxing开源二维码图像处理库,不可否认的是zxing确实很强大,但是实际需求中会遇到各种各样的需求是zxing满足不了的,于是就有了想法自己扩展zxing满足历史遇到的各种需求&#xff0c…...

Spring事务的隔离级别

事务隔离级别解决的是多个事务同时调⽤⼀个数据库的问题 事务传播机制解决的是⼀个事务在多个节点(⽅法)中传递的问题 事务的特性: 隔离性:多个事务在并发执行的时候,多个事务执行的一个行为模式,当一个事务执行的时候,另一个事务执行的一个行…...

JVM系统优化实践(4):以支付系统为例

您好,我是湘王,这是我的CSDN博客,欢迎您来,欢迎您再来~前面说过,JVM会将堆内存划分为年轻代、老年代两个区域。年轻代会将创建和使用完之后马上就要回收的对象放在里面,而老年代则将创建之后需要…...

16- TensorFlow实现线性回归和逻辑回归 (TensorFlow系列) (深度学习)

知识要点 线性回归要点: 生成线性数据: x np.linspace(0, 10, 20) np.random.rand(20)画点图: plt.scatter(x, y)TensorFlow定义变量: w tf.Variable(np.random.randn() * 0.02)tensor 转换为 numpy数组: b.numpy()定义优化器: optimizer tf.optimizers.SGD()定义损失: …...

无自动化测试系统设计方法论

灵活 敏捷 迭代。 自动化测试 辩思 测试必不可少 想想看没有充分测试的代码, 哪一次是一次过的? 哪一次不需要经历下测试的鞭挞? 不要以为软件代码容易改, 就对于质量不切实际的自信—那是自大! 不适用自动化测试的case 遗留系统。太多的依赖方, 不想用过多的mock > …...

架构初探-学习笔记

1 什么是架构 有关软件整体结构与组件的抽象描述,用于指导软件系统各个方面的设计。 1.1 单机架构 所有功能都实现在一个进程里,并部署在一台机器上。 1.2 单体架构 分布式部署单机架构 1.3 垂直应用架构 按应用垂直切分的单体架构 1.4 SOA架构 将…...

在成都想转行IT,选择什么专业比较好?

很多创新型的互联网服务公司的核心其实都是软件,创新的基础、运行的支撑都是软件。例如,软件应用到了出租车行业,就形成了巅覆行业的滴滴;软件应用到了金融领域,就形成互联网金融;软件运用到餐饮行业,就形成美团;软件运…...

【Spark分布式内存计算框架——Spark Streaming】4.入门案例(下)Streaming 工作原理

2.3 Streaming 工作原理 SparkStreaming处理流式数据时,按照时间间隔划分数据为微批次(Micro-Batch),每批次数据当做RDD,再进行处理分析。 以上述词频统计WordCount程序为例,讲解Streaming工作原理。 创…...

2、算法先导---思维能力与工具

题目 碎纸片的拼接复原(2013B) 内容 破碎文件的拼接在司法物证复原、历史文献修复以及军事情报获取等领域都有着重要的应用。传统上,拼接复原工作需由人工完成,准确率较高,但效率很低。特别是当碎片数量巨大,人工拼接很难在短时…...

WordPress 函数:add_theme_support() 开启主题自定义功能(全面)

add_theme_support() 用于在我们的当前使用的主题添加一些特殊的功能,函数一般写在主题的functions.php文件中,当然也可以再插件中使用钩子来调用该函数,如果是挂在钩子上,那他必须挂在after_setup_theme钩子上,因为 i…...

Winform控件开发(16)——Timer(史上最全)

前言: Timer控件的作用是按用户定义的时间间隔引发事件的计时器,说的直白点就是,他就像一个定时炸弹一样到了一定时间就爆炸一次,区别在于定时炸弹炸完了就不会再次爆炸了,但是Timer这个计时器到了下一个固定时间还会触发一次,上面那张图片就是一个典型的计时器,该定时器…...

游戏高度可配置化:通用数据引擎(data-e)及其在模块化游戏开发中的应用构想图解

游戏高度可配置化:通数据引擎在模块化游戏开发中的应用构想图解 ygluu 码客 卢益贵 目录 一、前言 二、模块化与插件 1、常规模块化 2、插件式模块化(插件开发) 三、通用数据引擎理论与构成 1、名字系统(数据类型&#xf…...

CountDownLatch与CyclicBarrier原理剖析

1.CountDownLatch 1.1 什么是CountDownLatch CountDownLatch是一个同步工具类,用来协调多个线程之间的同步,或者说起到线程之间的通信(而不是用作互斥的作用)。 CountDownLatch能够使一个线程在等待另外一些线程完成各自工作之…...

NLP中的对话机器人——预训练基准模型

引言 本文是七月在线《NLP中的对话机器人》的视频笔记,主要介绍FAQ问答型聊天机器人的实现。 场景二 上篇文章中我们解决了给定一个问题和一些回答,从中找到最佳回答的任务。 在场景二中,我们来实现: 给定新问题,从…...

C语言学习及复习笔记-【14】C文件读写

14 C文件读写 14.1打开文件 您可以使用 fopen( ) 函数来创建一个新的文件或者打开一个已有的文件,这个调用会初始化类型 FILE 的一个对象,类型 FILE包含了所有用来控制流的必要的信息。下面是这个函数调用的原型: FILE *fopen( const char…...

模拟退火算法优化灰色

clc; clear; close all; warning off; %% tic T01000; % 初始温度 Tend1e-3; % 终止温度 L200; % 各温度下的迭代次数(链长) q0.9; %降温速率 X[16.4700 96.1000 16.4700 94.4400 20.0900 92.5400 22.3900 93.3700 25.…...

Pandas怎么添加数据列删除列

Pandas怎么添加数据列 1、直接赋值 # 1、直接赋值df.loc[:, "最高气温"] df["最高气温"].str.replace("℃", "").astype("int32")df.loc[:, "最低气温"] df["最低气温"].str.replace("℃"…...

C++类和对象:构造函数和析构函数

目录 一. 类的六个默认成员函数 二. 构造函数 2.1 什么是构造函数 2.2 编译器自动生成的默认构造函数 2.3 构造函数的特性总结 三. 析构函数 3.1 什么是析构函数 3.2 编译器自动生成的析构函数 3.3 析构函数的特性总结 一. 类的六个默认成员函数 对于任意一个C类&…...

【Stata】从入门到精通.零基础小白必学的教程,一学就fei

视频教程移步:https://www.bilibili.com/video/BV1hK4y1d714/?p4&spm_id_frompageDriver&vd_sourcecc8074e9c81a225f214226065db53d32P3 第二讲 Stata处理数据全流程(上) P3 - 01:37内置数据 file example datasets使用…...

【RuoYi优化】调整JVM启动内存

📔 笔记介绍 大家好,千寻简笔记是一套全部开源的企业开发问题记录,毫无保留给个人及企业免费使用,我是作者星辰,笔记内容整理并发布,内容有误请指出,笔记源码已开源,前往Gitee搜索《chihiro-notes》,感谢您的阅读和关注。 作者各大平台直链: GitHub | Gitee | CSD…...

[架构模型]MVC模型详细介绍,并应用到unity中

简介: MVC模式是一种软件架构模式,它将应用程序分为三个主要部分:模型(Model)、视图(View)和控制器(Controller)。MVC模式的目标是实现应用程序的松耦合,以便…...

?? JavaScript 双问号(空值合并运算符)

?? JavaScript 双问号(空值合并运算符) 一、简述 在网上浏览 JavaScript 代码时或者学习其他代码时,可能会发现有的表达式用了两个问号(??)如下所示: let username; console.log(username ?? "Guest"…...

和平网站建设优化seo/百度seo网站在线诊断

在对read的使用过程中,发现对其返回值的处理比较重要,这里做一下总结。read函数原型:ssize_t read(int fd,void *buf,size_t count)函数返回值分为下面几种情况:1、如果读取成功,则返回实际读到的字节数。这里又有两种…...

网站推广全过程/下载谷歌浏览器并安装

第章计算机基础与Win操作系统 (15页)本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!14.9 积分第1章 计算机基础与Win7操作系统本章实验目的是使学生掌握计算机程序运行异常或死机的处理方…...

网站制作的流程包括哪些/互联网营销推广渠道

开发环境(蓝色粗体字为特别注意内容) 1、软件环境: Win7 Ultimate sp1、jdk7u45 2、参考文献:https://www.cnblogs.com/jack1208-rose0203/p/5713210.html private static final byte[] ARRAY_CIRCLE { 0x3c, 0x7e, 0xff, 0xff, 0xff, 0xff…...

WordPress pwa/西安seo外包行者seo06

Spark原理及应用Spark的原理Spark的使用Apache Spark是通用的分布式大数据计算引擎。Spark是UC BerkeleyAMPLab(美国加州大学伯克利分校的AMP实验室)开源的通用并行框架。Spark拥有Hadoop MapReduce所具有的优点,但不同于HadoopMapReduce的是…...

南通网站维护/长沙网站公司品牌

CHENYILONG BlogIOS详解TableView——内置刷新,EGO,以及搜索显示控制器 Fullscreen技术博客http://www.cnblogs.com/ChenYilong/新浪微博http://weibo.com/luohanchenyilong内置刷新内置刷新是苹果IOS6以后才推出的一个API,主要是针对TableVi…...

电子商务网站建设及推广方案论文/怎样查询百度收录和排名情况

1(癌症)0(非癌症)1(预测为癌症)True Positive False Positive0(预测为非癌症)False Nagative True Negative判断癌症病人的分类器好坏标准: 1.准确率(Precision) 预测…...