Golang OOP架构,将切片传递给构造函数,创建切片对象

时间:2016-09-09 02:07:38

标签: oop go

我刚开始使用go语言,一切看起来都很酷,我编写了我需要的所有内容,但我有两个问题,实际上是将一个切片传递给Struct或者所谓的object ,以及如何创建一个我可以添加的方法,例如另一个矩阵,但这是我认为的小问题。

代码:

package main

import (
    "fmt"
    "math/rand"
    "time"
)

func main() {
    a := Matrix(nonsingularRandomMatrix())
    fmt.Println(a)
}

type Matrix struct {

    inputMatrix [][]int
}

func NewThing(inMatrix [][]int) *Matrix {
    p := new(Matrix)
    p.inputMatrix = inMatrix
    return p
}

func nonsingularRandomMatrix() [][]int {
    rand.Seed(time.Now().UTC().UnixNano())
    var matrixDeterminant int = 0
    nm := make([][]int, 4)
    for i := 0; i < 4; i++ {
        nm[i] = make([]int, 4)
        for j := 0; j < 4; j++ {
            nm[i][j] = rand.Intn(100)
    }
}
matrixDeterminant =
    nm[0][0]*nm[1][1]*nm[2][2]*nm[3][3] - nm[0][0]*nm[1][1]*nm[2][3]*nm[3][2] -
        nm[0][0]*nm[1][2]*nm[2][1]*nm[3][3] + nm[0][0]*nm[1][2]*nm[2][3]*nm[3][1] +
        nm[0][0]*nm[1][3]*nm[2][1]*nm[3][2] - nm[0][0]*nm[1][3]*nm[2][2]*nm[3][1] -
        nm[0][1]*nm[1][0]*nm[2][2]*nm[3][3] + nm[0][1]*nm[1][0]*nm[2][3]*nm[3][2] +
        nm[0][1]*nm[1][2]*nm[2][0]*nm[3][3] - nm[0][1]*nm[1][2]*nm[2][3]*nm[3][0] -
        nm[0][1]*nm[1][3]*nm[2][0]*nm[3][2] + nm[0][1]*nm[1][3]*nm[2][2]*nm[3][0] +
        nm[0][2]*nm[1][0]*nm[2][1]*nm[3][3] - nm[0][2]*nm[1][0]*nm[2][3]*nm[3][1] -
        nm[0][2]*nm[1][1]*nm[2][0]*nm[3][3] + nm[0][2]*nm[1][1]*nm[2][3]*nm[3][0] +
        nm[0][2]*nm[1][3]*nm[2][0]*nm[3][1] - nm[0][2]*nm[1][3]*nm[2][1]*nm[3][0] -
        nm[0][3]*nm[1][0]*nm[2][1]*nm[3][2] + nm[0][3]*nm[1][0]*nm[2][2]*nm[3][1] +
        nm[0][3]*nm[1][1]*nm[2][0]*nm[3][2] - nm[0][3]*nm[1][1]*nm[2][2]*nm[3][0] -
        nm[0][3]*nm[1][2]*nm[2][0]*nm[3][1] + nm[0][3]*nm[1][2]*nm[2][1]*nm[3][0]
if matrixDeterminant == 0 {
    nonsingularRandomMatrix()
}
return nm
}

我的控制台输出:

  

go run oop.go

     

命令行-参数

     

。\ oop.go:10:无法将nonsingularRandomMatrix()(类型[] [] int)转换为Matrix

有任何线索吗?

电贺!

1 个答案:

答案 0 :(得分:3)

您的编译器所说的是[][]intMatrix是两种完全不相关的类型。您无法从一个转换为另一个。那是因为Matrixstruct包含 [][]int,但Matrix 不是 {{1} }。要创建[][]int,您需要创建新的Matrix并将Matrix设置为唯一的成员:

[][]int

如果a := Matrix{nonsingularRandomMatrix()} <{1}},则更简单的方法。

Matrix

这只会为[][]int创建一个新名称(type Matrix [][]int ),在这种情况下,简单(显式)转换可以正常工作

Matrix