为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用此功能

如何使用此功能

Go
暮色呼如 2022-04-26 15:57:46
type TestContent struct {  x string}//CalculateHash hashes the values of a TestContentfunc (t TestContent) CalculateHash() ([]byte, error) {  h := sha256.New()  if _, err := h.Write([]byte(t.x)); err != nil {    return nil, err  }  return h.Sum(nil), nil}在声明的函数CalculateHash()中,为什么要t TestContent在函数名之前写一个数据类型?返回类型不应该写在函数名之后吗?
查看完整描述

2 回答

?
MMMHUHU

TA贡献1834条经验 获得超8个赞

(t TestContent)不是返回类型。(t TestContent)表示这CalculateHash是TestContent结构体的一个方法。这个函数的返回类型是([]byte, error)。


它用于 的实例TestContent,即:


  var t TestContent

  bytes, err := t.CalculateHash()


查看完整回答
反对 回复 2022-04-26
?
慕工程0101907

TA贡献1887条经验 获得超5个赞

实际上,它是一个方法声明。来自文档:


方法是带有接收器的函数。方法声明将标识符(方法名称)绑定到方法,并将方法与接收者的基类型相关联。


MethodDecl = "func" [Receiver][1] MethodName Signature [ FunctionBody ] .

Receiver   = Parameters .

然而:


Go 没有课程。但是,您可以在类型上定义方法。方法是具有特殊接收器参数的函数。接收者出现在 func 关键字和方法名称之间的自己的参数列表中。


因此,在您的示例中,(t TestContent)是方法声明的接收者。

以下 python 片段大致是 Golang 版本:


#!/usr/bin/env python3

class TestContent:

    def __init__(self):

        self.x: str = ""


def CalculateHash():

    pass


testContent = TestContent()

testContent.CalculateHash = CalculateHash


查看完整回答
反对 回复 2022-04-26
  • 2 回答
  • 0 关注
  • 138 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信