Type "BeaconBlockBody" has both value and pointer receivers
321 panic("implement me")
322}
323
324func (b *BeaconBlockBody) Version() int {325 panic("implement me")
326}
327
Type "BeaconBlockBody" has both value and pointer receivers
317 panic("implement me")
318}
319
320func (b *BeaconBlockBody) Attestations() []*eth.Attestation {321 panic("implement me")
322}
323
Type "BeaconBlockBody" has both value and pointer receivers
313 panic("implement me")
314}
315
316func (b *BeaconBlockBody) Consolidations() ([]*eth.SignedConsolidation, error) {317 panic("implement me")
318}
319
Type "BeaconBlockBody" has both value and pointer receivers
309}
310
311// BlobKzgCommitments returns the blob kzg commitments in the block.
312func (b *BeaconBlockBody) BlobKzgCommitments() ([][]byte, error) {313 panic("implement me")
314}
315
Type "BeaconBlockBody" has both value and pointer receivers
304 panic("implement me")
305}
306
307func (b *BeaconBlockBody) SetBLSToExecutionChanges([]*eth.SignedBLSToExecutionChange) error {308 panic("implement me")
309}
310
Type "BeaconBlockBody" has both value and pointer receivers
300 panic("implement me")
301}
302
303func (b *BeaconBlockBody) SetExecution(interfaces.ExecutionData) error {304 panic("implement me")
305}
306
Type "BeaconBlockBody" has both value and pointer receivers
296 panic("implement me")
297}
298
299func (b *BeaconBlockBody) SetSyncAggregate(*eth.SyncAggregate) error {300 panic("implement me")
301}
302
Type "BeaconBlockBody" has both value and pointer receivers
292 panic("implement me")
293}
294
295func (b *BeaconBlockBody) SetVoluntaryExits([]*eth.SignedVoluntaryExit) {296 panic("implement me")
297}
298
Type "BeaconBlockBody" has both value and pointer receivers
288 panic("implement me")
289}
290
291func (b *BeaconBlockBody) SetDeposits([]*eth.Deposit) {292 panic("implement me")
293}
294
Type "BeaconBlockBody" has both value and pointer receivers
284 panic("implement me")
285}
286
287func (b *BeaconBlockBody) SetAttestations([]*eth.Attestation) {288 panic("implement me")
289}
290
Type "BeaconBlockBody" has both value and pointer receivers
280 panic("implement me")
281}
282
283func (b *BeaconBlockBody) SetAttesterSlashings([]*eth.AttesterSlashing) {284 panic("implement me")
285}
286
Type "BeaconBlockBody" has both value and pointer receivers
276 panic("implement me")
277}
278
279func (b *BeaconBlockBody) SetProposerSlashings([]*eth.ProposerSlashing) {280 panic("implement me")
281}
282
Type "BeaconBlockBody" has both value and pointer receivers
272 panic("implement me")
273}
274
275func (b *BeaconBlockBody) SetGraffiti([]byte) {276 panic("implement me")
277}
278
Type "BeaconBlockBody" has both value and pointer receivers
268 panic("implement me")
269}
270
271func (b *BeaconBlockBody) SetEth1Data(*eth.Eth1Data) {272 panic("implement me")
273}
274
Type "BeaconBlockBody" has both value and pointer receivers
264 panic("implement me")
265}
266
267func (b *BeaconBlockBody) SetRandaoReveal([]byte) {268 panic("implement me")
269}
270
Type "BeaconBlock" has both value and pointer receivers
260 panic("implement me")
261}
262
263func (b *BeaconBlock) SetStateRoot(root []byte) {264 panic("implement me")
265}
266
Type "BeaconBlockBody" has both value and pointer receivers
256 panic("implement me")
257}
258
259func (BeaconBlockBody) BLSToExecutionChanges() ([]*eth.SignedBLSToExecutionChange, error) {260 panic("implement me")
261}
262
Type "BeaconBlockBody" has both value and pointer receivers
252 panic("implement me")
253}
254
255func (BeaconBlockBody) Execution() (interfaces.ExecutionData, error) {256 panic("implement me")
257}
258
Type "BeaconBlockBody" has both value and pointer receivers
248 panic("implement me")
249}
250
251func (BeaconBlockBody) Proto() (proto.Message, error) {252 panic("implement me")
253}
254
Type "BeaconBlockBody" has both value and pointer receivers
244 return false
245}
246
247func (BeaconBlockBody) HashTreeRoot() ([field_params.RootLength]byte, error) {248 panic("implement me")
249}
250
Type "BeaconBlockBody" has both value and pointer receivers
240 panic("implement me")
241}
242
243func (BeaconBlockBody) IsNil() bool {244 return false
245}
246
Type "BeaconBlockBody" has both value and pointer receivers
236 panic("implement me")
237}
238
239func (BeaconBlockBody) SyncAggregate() (*eth.SyncAggregate, error) {240 panic("implement me")
241}
242
Type "BeaconBlockBody" has both value and pointer receivers
232 panic("implement me")
233}
234
235func (BeaconBlockBody) VoluntaryExits() []*eth.SignedVoluntaryExit {236 panic("implement me")
237}
238
Type "BeaconBlockBody" has both value and pointer receivers
228 panic("implement me")
229}
230
231func (BeaconBlockBody) Deposits() []*eth.Deposit {232 panic("implement me")
233}
234
Type "BeaconBlockBody" has both value and pointer receivers
224 panic("implement me")
225}
226
227func (BeaconBlockBody) AttesterSlashings() []*eth.AttesterSlashing {228 panic("implement me")
229}
230
Description
(Go's FAQ)[https://go.dev/doc/faq#methodsonvaluesorpointers] recommends that method receivers should be consistent. If some of the methods of the type must have pointer receivers, the rest should too, so the method set is consistent regardless of how the type is used. This is because value and pointer receivers have different method sets.
Bad practice
package main
type foo struct {
a int
}
func (f foo) a() {}
func (f *foo) b() {
f.a = 10
}
Recommended
package main
type foo struct {
a int
}
func (f *foo) a() {}
func (f *foo) b() {
f.a = 10
}