GoLand 2019.2.2 bug-fix
版本已发布,此版本主要修复了一些性能和可用性、重构功能和代码格式化相关的问题。具体如下:

一个月前 GoLand 发布了 2019.3 的 Roadmap,据当时的介绍,此版本将会修复
bug、解决小故障、修复可用性以及性能方面的问题。不过目前看来,GoLand
2019.3 似乎还增加了不少新特性。

前言

之前工作中整理的一篇编码规范。

性能和 UI:

  • GO-8031 — GoLand
    会更快地显示方法的 ‘implemented’
    icon,因为它在分析过程中处理的元素更少。
  • GO-8034 —
    当点击实现界面的类型的 gutter 图标并且有很多方法时,UI 不再冻结。
  • GO-7952 — 当我们将现有变量用作字段值时,填充字段(Fill
    Fields)更有用。

图片 1

代码注释

重构

  • GO-8065, GO-8068 — Extract
    Interface 会遵循现有的声明,如果未在新创建的界面中使用,也不会废弃未导出的接收器类型。
  • GO-7982 — Change
    Signature 会在测试中处理包前缀。

支持使用 Mozilla rr 进行远程调试

在 2019.3 版本中,我们可以使用 Mozilla rr
远程调试应用程序。大致步骤如下:

  1. 在远程机器上获取 rr 跟踪
  2. 在远程机器上启动调试器,如下所示:
    dlv --headless --api-version 2 -l localhost:2345 replay /path/to/trace/dir /path/to/binary
  3. 从 IDE 连接到此机器

注释约定

只在需要的地方加注释,不要为显而易见的代码加注释
使用 /// 生成的xml标签格式的文档注释

代码格式化

代码格式功能获得了许多修复和改进:

  • GO-7431 — Reformat
    Code 与 go fmt 的工作方式更相似。

GoLand 现在会正确地对齐字段声明、参数列表、块语句、case 子句、const
块和多行复合字面量后面的注释等。另外,GoLand
会在多值返回中的结构初始值设定项中放置适当的缩进、在 switch-case
语句中划分特定的块、在注释后的 var/const
值、多行表达式内的注释以及具有多行条件语句的 if 之后等等。

有关代码格式化功能的错误修复完整列表,请点此参阅。

性能

此版本修复了一些问题,使得 GoLand 的运行速度更快,CPU 消耗更少。

方法注释

所有的方法都应该以描述这段代码的功能的一段简明注释开始。这种描述不应该包括执行过程细节

/// <summary>/// 把对象类型转化为指定类型/// </summary>/// <typeparam name="T">动态类型 </typeparam>/// <param name="value">要转化的源对象 </param>/// <returns> 转化后的指定类型的对象,转化失败引发异常。</returns>public static T CastTo<T>(this object value)

调试器

调试器也修复了一些错误:

  • GO-7770 — 函数调用可在
    Evaluate Expression 窗口和 log breakpoint 属性中工作。
  • GO-7060 —
    调试器会在代码编辑器中显示变量的正确位置。

重构

“Change Signature”功能会在“Parameters”和“Result
parameters”选项卡中显示参数类型。我们还可以通过勾选新的“Reuse
types”选择框以折叠“Signature Preview”中的结果类型。

图片 2

此外,还增加了一个新的意图动作 —— Reuse signature
types(复用签名类型),它可将参数定义合并到一个声明中(Alt + Enter)。

最后,提取变量(Extract
Variable)和重命名(Rename)功能在名字方面会提供更好的建议。例如输入err会建议使用用于表达式类型的
error,输入ctx则会建议使用context.Context

图片 3

代码行注释

如果某一功能需要多行代码,并有多个逻辑结构,应在此代码前添加注释,说明此块代码的处理思路及注意事项等
注释从新行增加,与代码开始处左对齐
注释双斜线与注释之间以空格分开,示例如下:

public void Dispose(){    // 如果连接已打开,则关闭连接并释放资源    if(this.connection.State == ConnectionState.Open ){        this.connection.Close();        this.connection.Dispose();    }}

常规功能

  • GO-7708 — 从 IDE
    安装 Go SDK 会按预期运行,并没有任何异常

此次更新的错误修复完整列表请查看这里。

(文/开源中国)    

其他改进

  • 在该版本中,我们可以在 Hierarchy
    工具窗口分析被调用者方法的调用树。在此前的版本中,只支持分析调用者方法的调用树。现在新增了两个专用按钮,可方便地在调用者和被调用者之间切换。此外,还可以通过点击菜单中的特殊按钮对调用树中的元素进行排序。

图片 4

  • 检查 Bool 条件代码(声明冗余检查的一部分)不会再警告使用 const
    booleans。
  • Go Module 包的名称在 Project View 中以更清晰、更简单的方式呈现。

图片 5

对了,参与使用 EAP 并进行积极反馈还有机会获得 GoLand
的一年免费订阅和品牌T恤。

>>>EAP
版本下载地址:https://www.jetbrains.com/go/nextversion

图片 6

(文/开源中国)    

变量注释

变量需添加注释,说明变量的用途
Class级变量使用 /// 生成的Xml标签格式的文档注释

/// <summary>/// 文档名称/// </summary>public static string docName = "";

方法级的变量注释可以放在变量声明语句后,与上下行的注释左对齐,注释与代码间以
Tab 键分隔

public void CreateDoc() {    string docType = "";                   //文档类型    string author = "";                    //作者    DateTime createDate = DateTime.Now;    //创建世界}

命名规范

命名基本约定

PascalCasing:

包含一个或多个单词,每个单词首字母大写,其余小写
使用范围:命名空间、类、接口、方法、属性、事件、非私有字段、枚举值

namespace System.IO         public static class Consolepublic enum FileAccess

camelCasing:

包含一个或多个单词,第一个单词首字母小写,其余单词首字母大写
使用范围:方法参数、局部变量

public string GetName(int productId){    string productName = null;}

**_camelCasing:**

“_”+camelCasing的方式
使用范围:私有字段

private string _productName;

UPPER_CAPS:

包含多个单词,每个单词的所有字母大写,单词之间使用”_”连接
使用范围:const常量

public const string DEFAULT_NAME = "default";

示例:

namespace ConsoleApp {    public delegate void SalesOutEventHandler();        public class Product {        public event SalesOutEventHandler OnSalesOut;                public Product GetProductById(int productId) {            return null;        }                private enum ProductType {        }    }}

标识符命名约定

类和接口

类的名字使用名词
避免使用单词缩写,除非是广为人知的,比如: HTTP , IO
接口以 I 字母开头
同一项目不同命名空间中的类,命名避免重复

方法

第一个单词为动词
返回值为 bool 类型,则加 Is , Can , Try前缀

变量

尽量使用短而有意义的单词
单字符变量名一般用于生命周期非常短的变量,如 for , foreach
中递增变量可以被命名为 i
如果变量表示集合,则变量名使用复数,如 RowsCount
命名控件使用匈牙利命名法,前缀遵循同一个缩写表
在带单位的值变量后加“_camelCasing”格式的单位,如:
public void CreateCache(int cacheSize_mb)

类型成员排列顺序

类型成员的排列顺序自上而下依次为:

字段: 私有字段、受保护字段
属性: 私有属性、受保护属性、公有属性
事件: 私有事件、受保护事件、公有事件
构造函数:
参数数量最少的构造函数,参数数量中等的构造函数,参数数量最多的构造函数
方法:
重载方法的排列顺序与构造函数相同,从参数数量最少往下至参数最多

其他规范

代码长度

每行代码不宜过长,应在屏幕宽度之内,约为80-120个字符左右。换行规则如下:

在逗号后换行
在操作符后换行
在高层换行而不是在低层换行
换行后与上一行语句对齐

推荐写法:

var n = a * b / (c - g + f) +        4 * z;

不推荐写法:

var n = a * b / (c - g +     f) + 4 * z;

方法行数

每个方法的有效代码行数应保持在50行以内

空白

空行是为了将逻辑相关的代码分块,以便提高阅读性
在以下情况使用两个空行:

类声明和接口声明之间
两个类声明之间
枚举与类声明之间

在以下情况使用一个空行:

方法与方法、属性与属性之间
方法中变量声明与语句之间
方法与方法之间
方法不同逻辑块之间
类中属性与方法、属性与字段、方法与字段之间
注释与它注释的语句之间不空行,与其他语句之间空一行

在以下情况使用空格:
在VS编辑器中可以使用快捷键格式化代码

参数列表的逗号后,void UpdateDate(int a, int b)
二元操作符,a += b - c;
强制类型转换后,c = a;

代码缩进

代码缩进使用Tab键,不要使用空格,Tab键的宽度为4个字符,VS中设置如下:

–,选中

代码半展开

把花括号放在前一条语句的末尾,VS中设置如下:

—-,取消右侧所有勾选

附录

注释内容

项目 注释内容
类的目的,开发历史
接口 接口的目的,如何使用
字段/属性 字段描述
方法注释 方法作用,返回值,抛出的异常,调用的前提和后置条件
方法内部注释 控制结构,复杂的代码,处理顺序
参数 用来做什么,约束,前提条件
局部变量 用处,目的

XML文档注释

MSDN文档注释标签

标记 说明
<c> 提供了一种将说明中的文本标记为代码的方法
<code> 提供了一种将多行指示为代码的方法
<example> 可以指定使用方法或其他库成员的示例。一般情况下,这将涉及到<code>标记的使用。
<exception> 对可从当前编译环境中获取的异常的引用。
<include> 引用描述源代码中类型和成员的另一文件中的注释。
<list> 用于定义表或定义列表中的标题行。
<para> 用于诸如<summary>、<remarks> 或 <returns> 等标记内,使您将结构添加到文本中。
<param> 应当用于方法声明的注释中,以描述方法的一个参数。
<paramref> 提供了一种指示词为参数的方法。
<permission> 将成员的访问记入文档。
<remarks> 用于添加有关某个类型的信息,从而补充由 <summary> 所指定的信息。
<returns> 应当用于方法声明的注释,以描述返回值。
<see> 从文本内指定链接。
<seealso> 对可以通过当前编译环境进行调用的成员或字段的引用。
<summary> 应当用于描述类型或类型成员。
<value> 描述属性。

VS常用快捷键

功能 VS2010 VS2013 说明
文档格式化 Ctrl+E, Ctrl+D Ctrl+K, Ctrl+D 格式化当前文档
选定内容格式化 Ctrl+E, Ctrl+F Ctrl+K, Ctrl+F 格式化选中内容
注释 Ctrl+E, Ctrl+C Ctrl+K, Ctrl+C 注释当前行
取消注释 Ctrl+E, Ctrl+U Ctrl+K, Ctrl+U 取消注释当前行
复制 Ctrl+C 复制光标所在行,不需要选中
剪切 Ctrl+X 剪切光标所在行,不需要选中
删除 Ctrl+L 删除光标所在行,不需要选中
折叠 Ctrl+M, Ctrl+O 折叠当前文档
展开折叠 Ctrl+M, Ctrl+L 展开当前文档

参考

MSDN开发语言和工具

C#语言规范 C:Program Files Microsoft Visual Studio
12.0VC#Specifications2052CSharp Language Specification.docx