登录
首页 >  Golang >  Go问答

在其他包中调用结构体初始化时,是否可以只返回一个字段?

来源:stackoverflow

时间:2024-02-20 10:54:22 379浏览 收藏

怎么入门Golang编程?需要学习哪些知识点?这是新手们刚接触编程时常见的问题;下面golang学习网就来给大家整理分享一些知识点,希望能够给初学者一些帮助。本篇文章就来介绍《在其他包中调用结构体初始化时,是否可以只返回一个字段?》,涉及到,有需要的可以收藏一下

问题内容

假设我在矩阵包中有一个类似这样的结构

package matrix

type matrix struct {
  rows     int
  cols     int
  issquare bool
  element  [][]float64
}

我们知道,当我们在其他包中初始化matrix时,我们只能给element字段赋值,因为rowscolsissquare没有导出,仅供包matrixzqben内部使用dczqb。

当我们在主包中初始化时,它将如下所示:

package main

import (
    "fmt"
    "github.com/example/blabla/matrix"
)

func main() {
    m := matrix.matrix{
            element: [][]float64{{1, 2}, {3, 4}}
         }

    fmt.println(m) // the output : {0 0 false [[1 2] [3 4]]}
}

上面的示例返回 element 和其他字段(使用默认值)。

我想要的是:

当在其他包中调用matrix.matrix时,如何使结构体只返回一个字段并显式引用matrix.matrix.element,可能吗?

func main() {
    m := matrix.Matrix{Element: [][]float64{{1, 2}, {3, 4}}}

    fmt.Println(m) // i want this to just return [[1 2] [3 4]] (as Element field)
                   // and explicitly refer to a matrix.Matrix.Element field, without other fields involved
}

解决方案


您可以将 string() 方法添加到 matrix 结构中。例如

type Matrix struct {
    rows     int
    cols     int
    isSquare bool
    Element  [][]float64
}

func (m Matrix) String() string {
    return fmt.Sprintf("%v", m.Element)
}

您可以找到一个工作示例 here

理论要掌握,实操不能落!以上关于《在其他包中调用结构体初始化时,是否可以只返回一个字段?》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>