- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
这段代码工作正常:
feedService := postgres.FeedService{}
feeds, err := feedService.GetAllRssFeeds()
但是这段代码给我错误:
feeds, err = postgres.FeedService{}.GetAllRssFeeds()
controllers\feed_controller.go:35: cannot call pointer method on postgres.FeedService literal controllers\feed_controller.go:35: cannot take the address of postgres.FeedService literal
为什么这两段代码不相等?
这是一个结构声明:
type FeedService struct {
}
func (s *FeedService) GetAllRssFeeds() ([]*quzx.RssFeed, error) {
最佳答案
您的 FeedService.GetAllRssFeeds()
方法具有指针接收器,因此需要一个指向 FeedService
的指针来调用此方法。
在您的第一个示例中,您使用了 short variable declaration将 FeedService
结构值存储在局部变量中。局部变量是 addressable ,所以当你在那之后编写 feedService.GetAllRssFeeds()
时,编译器会自动获取 feedService
的地址并将其用作接收值。它是以下内容的简写:
feeds, err := (&feedService).GetAllRssFeeds()
它在 Spec: Calls: 中
If
x
is addressable and&x
's method set containsm
,x.m()
is shorthand for(&x).m()
.
在你的第二个例子中你没有创建一个局部变量,你只是使用一个结构 composite literal ,但它本身不是(自动)可寻址的,因此编译器无法获得指向要用作接收器的 FeedService
值的指针,因此无法调用该方法。
请注意,允许显式获取复合文字的地址,因此以下内容也有效:
feeds, err := (&postgres.FeedService{}).GetAllRssFeeds()
Taking the address of a composite literal generates a pointer to a unique variable initialized with the literal's value.
查看相关问题:
What is the method set of `sync.WaitGroup`?
Calling a method with a pointer receiver by an object instead of a pointer to it?
关于go - 调用 struct literal 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42643765/
这是我在试验 JS 时的最新发现: (function() { return this; }).call('string literal'); // => [String: 'string liter
在 C 中有没有一种方法可以使用宏从字 rune 字创建字符串文字? 比如我有 'a' 我想创建字符串文字 "a" 澄清问题: #define A 'a' write(fd, "x=" CHAR2ST
令我困扰的是为什么术语“literal”被用来指代NSString和NSArray等类的实例。我只看到了用于引用 NSString 的术语,并且天真地认为它与“字面上”是一个字符串(位于引号之间)有关
我有以下使用 smarty 模板引擎的代码 在 php 文件中: $smarty->assign('SITE_URL', 'http://localhost/mis/'); 在 tpl 文件中:
我正在使用 regex101 tool 制作正则表达式并在解释字段中阅读 [.] - 文字字符 .[\.] - 匹配字符 .字面上地 我在“字面字符”和“字面字符”之间迷失了方向。 这两者有什么区别?
这个问题在这里已经有了答案: Single quotes vs. double quotes in C or C++ (15 个答案) 关闭 4 年前。 我正在阅读一本讨论“字 rune 字”与“字
浮点文字 float x = 3.2f; 的直接赋值和隐式转换为 float 的 double 之间的位表示是否存在差异 float x2 = 3.2;? 即是 #define EQUAL(FLOAT
这个极其简单的 Rust 程序: fn main() { let c = "hello"; println!(c); } 抛出以下编译时错误: error: expected a li
这个极其简单的 Rust 程序: fn main() { let c = "hello"; println!(c); } 抛出以下编译时错误: error: expected a li
是否有单行,类型 mapfilter ... es5+ higherfunction 或 ...?希望解决方案描述如何以及为什么和引用。如果有人知道为什么曾经不起作用。 timeTableKeys:是
我有包含这些声明的代码: class IRealNetDll; extern "C"__declspec(dllexport) IRealNetDll * CreateRealInstance(int
我有一个用于我们的一些服务的 SOAP 服务器 API,其中一位客户说他们不会与不提供至少 WS-I 基本配置文件合规性绑定(bind)的服务集成。 那么,问题是任何版本的 Delphi 都支持 Do
我已经尝试使用这两个循环以及列表理解。即使我正在尝试将数字转换为列表中的整型,两者都无法解析整数。
在代码中隐藏文字值的主要现有方法是什么,以便仅使用 hexdumper 或反编译器不容易跟踪它们? 例如,而不是编码: static final int MY_VALUE = 100; 我们可
我正在尝试使用文字来匹配 Empty Guid,但我不知道这里发生了什么: let [] EmptyGuid = System.Guid () let someFunction () = System
我正在尝试搜索 [Panels] like "*,*" 在工作表中,不幸的是,它没有准确检索该字符串,而是检索如下内容: [Panels] like "*blah,*" [Panels] like "
我看不出自然语言编程和文学编程之间的区别。如果有人解释,我将不胜感激。 最佳答案 Natural language programming是一种以近似于人类书写或说话的语言的形式向计算机表达指令的
我想从字符串数组中初始化一个 pydantic 文字 from typing import Literal from pydantic import BaseModel CLASS_NAME_VALU
我正在尝试在代码后面编写我的js代码。我定义了一个名为“contentPie”的文字,然后将 javascript 代码放入其文本中。但这不起作用。 contentPie.Text = "window
我有一个简单的数据集,可以使用如下行进行解析: R1 (a/30) to R2 (b/30), metric 30 我需要从上面得到的唯一数据如下: R1, a, 30, R2, 192.168.0.
我是一名优秀的程序员,十分优秀!