当前位置: 首页 > 网络应用技术

有效的GO -Interfaces和其他类型

时间:2023-03-09 00:11:22 网络应用技术

  GO中的接口为指定对象的行为提供了一种方法:如果某个对象可以实现此方法,则可以用作接口。我们已经看到了许多简单的示例;通过实现方法,我们可以自定义打印功能,通过该方法,我们可以输出任何对象。在GO代码中,只有一种或两种接口方法是常见的,并且其名称通常来自实现它的方法,作为实现的一种对象。

  一种类型可以实现多个接口。例如,可以通过袋子中的例程对接口的集合进行排序。接口包括,此外,该集合仍然可以具有自定义的形成器。以下示例序列符合这两种情况。同时。

  重新实现切片功能的方法。

  此方法是通过类型转换技术进行安全调用的另一个示例。如果我们忽略了类型名称,这两种类型(和)实际上是相同的,因此两者之间的转换是合法的。转换过程不会创建一个新值,它只是使现有的时间看起来像一种新类型。(某些法律转换将创建新值,例如从整数转换为浮动 - 点号等)

  在GO程序中,要访问不同方法的类型转换类型非常普遍。例如,我们可以使用现有类型简化整个示例:

  如今,无需允许序列实现多个接口(排序和打印)。我们可以通过将对象转换为多种类型(序列,sort.intslice和[] int)来使用相应的功能。每次转换都完成。尽管这在实践中是不寻常的,但通常是有效的。

  类型选择是一种类型转换的形式:它接受接口,根据其判断(开关)选择相应情况(情况),并在某种意义上将其转换为此类型。以下代码是fmt.printf的简化版本通过类型选择将值转换为字符串。如果已经是字符串,我们需要接口中的实际字符串值;如果它具有字符串方法,我们需要调用该方法的结果。

  在第一种情况下获取特定值,然后将接口转换为另一个接口。此方法非常适合混合类型。

  如果我们只关心一种类型?如果我们知道该值有一个字符串并要提取它怎么办?它仅需要类型的类型,但是它需要类型的断言。Type断言接受接口值并提取指定类型的指定的清晰类型值。rammar在第一个子句中绘制以选择开始的第一个子句,但是它需要一个清晰的类型,而不是类型关键字:

  结果是静态类型的新值。此类型必须是接口的特定类型,或可以转换为值的第二个接口类型。要在此值中提取字符串,您可以执行此操作

  如果类型断言失败,则Str将继续存在并成为字符串类型,但它的值将为零,即空字符串。

  作为对能量的解释,有一个IF-ART语句,等同于本节开头的类型选择。

  如果某种现有类型仅实现一个接口并且没有导出方法,则不需要导出该类型本身。仅导出此接口使我们可以更多地关注其行为而不是实现,而其他具有不同属性的属性可以镜像原始类型的行为。这也可以避免反复为每个常规接口的实例编写文档。

  面向对象的黄金规则,接口面向的编程,而不是实现。在这种情况下,构造函数应返回接口值,而不是实现。例如,在哈希库中,crc32.newieee和adler3222222.新返回接口类型哈希。

  同样,包装中的各种链接的代码算法与块密码算法分开。袋中的界面指定了密码算法的行为,该行为为单独的数据块提供了加密。实现该接口可用于构造以接口表示的流密码,而无需知道加密的详细信息。

  接口看起来像这样:

  这是计数器模式的CTR流的定义。它将块加密更改为流量加密。请注意,块加密的细节已被抽象。

  NEWCTR的应用不限于特定的加密算法和数据源。它适用于任何实现块接口和流的实现。由于它们返回接口值,因此他们使用其他加密模式仅替换CTR来进行本地更改。必须修改构造函数的呼叫过程,但是因为周围的代码可以可以仅被视为流,他们不会注意到它的差异。

  因为几乎可以添加任何类型,所以几乎任何类型都可以满足接口。一个非常直观的示例是软件包中定义的接口。对象的任何实现都可以处理HTTP请求。

  ResponseWriter接口提供对该方法的访问,该方法需要响应客户端的请求。由于这些方法包括标准写入方法,可以在任何IO.Writer的适用方案中使用http.ResponseWriter。请求结构包含解析的客户端请求。

  为简单起见,我们假设所有HTTP请求都是获取方法,而忽略了帖子方法,此简化不会影响处理程序的建立。此外,是一个简短但完整的处理程序实施,用于记录次数的数量通过页面访问。

  在本节中,我们通过结构,整数,通道和功能建立HTTP服务器。这全是因为接口只是方法集合,几乎可以定义任何类型。