首页 > 解决方案 > 创建切片类型的方法

问题描述

我是golang的新手。我正在尝试向切片添加方法。该方法只是 append 的一个包装器,它不起作用。

package main

import (
    "fmt"
)

type SliceStr []string

func (ss *SliceStr) Add(s string) {
    ss = append(ss, s)
}

func main() {
    var s SliceStr

    s.Add("hello")
    fmt.Println(s)
}

prog.go:10:12: append 的第一个参数必须是 slice;有 *SliceStr

标签: go

解决方案


您得到一个指向SliceStr( *SliceStr) 的指针,SliceStr而不是切片类型,因此也不是切片类型。只需取消引用指针

func (ss *SliceStr) Add(s string) {
    *ss = append(*ss, s)
}

它工作得很好。*ss = ...设置值ss所指向的值,并且*ss在调用中append传递值ss所指向的值,而不是指针。


推荐阅读