dongqucheng3851 2019-05-11 19:35
浏览 91
已采纳

切片方法

Although I think the problem I have is not correctly described in the heading it is the only way I am able to describe it now.

I have a struct Mini which is defined in another file. A set of Minis should be described as a slice. As I want to change some fields of the Mini struct when it is appended to the slice custom functions for append are needed.

Until now I got the following code:

import (
    "fmt"
    "reflect"
)

//Minis is a slice of all Minis
type Minis struct {
    AllMinis []*Mini
}

//Append adds a new Mini to the Minis slice
func (m *Minis) Append(n *Mini) {
    m.AllMinis = append(m.AllMinis, n)
}

This code works totally fine. But in my opinion a struct with just one field is kind of witless.

Is there any way to make a method on a struct or a more elegant solution in general?

Thanks!

  • 写回答

1条回答 默认 最新

  • doudu5029 2019-05-11 19:50
    关注

    Declare the type as a slice:

    //Minis is a slice of all Minis
    type Minis []*Mini
    
    //Append adds a new Mini to the Minis slice
    func (m *Minis) Append(n *Mini) {
        *m = append(*m, n)
    }
    

    Run it on the playground.

    concat panics because QForename passes a nil slice pointer as the receiver to concat. Fix by using a non-nil pointer:

    func (m *Minis) QForename(q string) *Minis {
        var matches Minis
        for _, n := range *m {
            if n.Forename == q {
                matches.concat(n)
            }
        }
        return &matches
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题