Pointers 在结构指针方法中操作矩阵数据成员

Pointers 在结构指针方法中操作矩阵数据成员,pointers,matrix,struct,go,Pointers,Matrix,Struct,Go,我正在创建一个结构,该结构表示一个矩阵,其中包含操作类型中数据的方法。我使用两种方法作为示例,将单行或列设置为特定值。以下是我的代码片段: type Matrix struct { Height, Width int data [][]int } func NewMatrix(nrows, ncols int) (mat *Matrix) { mat = new(Matrix) mat.Height = nrows mat.Width = ncols

我正在创建一个结构,该结构表示一个矩阵,其中包含操作类型中数据的方法。我使用两种方法作为示例,将单行或列设置为特定值。以下是我的代码片段:

type Matrix struct {
    Height, Width int
    data [][]int
}

func NewMatrix(nrows, ncols int) (mat *Matrix) {
    mat = new(Matrix)
    mat.Height = nrows
    mat.Width = ncols
    mat.data = make([][]int, nrows)
    for i := range mat.data {
        mat.data[i] = make([]int, ncols)
        for j := range mat.data[i]{
            mat.data[i][j] = 0
        }
    }
    return
}

func (mat *Matrix) SetCol(col, val int) {
    for i := 0; i < mat.Height; i++ {
        mat.data[i][col] = val
    }
}


func (mat *Matrix) SetRow(row, val int) {
    for i := 0; i < mat.Width; i++ {
        mat.data[row][i] = val
    }
}
我发现
Matrix
实例的
data
属性正在方法
SetCol
中设置,但一旦它从此方法返回,
data
似乎就是我初始化它的空矩阵

为什么我在方法中操作的
data
属性在方法调用的生命周期后不会持久化?我怎样才能解决这个问题

编辑


我发现问题在于,我在循环中的每次迭代中都实例化了一个新的
矩阵实例,这就是为什么在我使用
SetCol
SetRow
操作后,矩阵总是显示为空的原因。所以这个问题不是真的有效。

效果很好,您如何检查值?顺便说一句,您不需要循环将其设置为0,默认为0。非常感谢@OneOfOne。我没有意识到我不需要将值初始化为0。我通过对行的值求和来检查我的值。但我发现了这个问题,结果是一个相当愚蠢的错误。我在矩阵上执行的命令在一个循环中,我在循环中实例化矩阵的一个新实例,因此我在每次迭代中清除矩阵,因此我从未看到矩阵总是空的。每个人都会这样:)Go好运!
mat := NewMatrix(33,33)
mat.SetCol(2, 3)
mat.SetRow(2, 3)