如何在Golang中为结构体创建对象

4

File1.go

Package abc

type ECA struct {
    *CA
    obcKey          []byte
    obcPriv, obcPub []byte
    gRPCServer      *grpc.Server
}


type ECAP struct {
    eca *ECA
}


func (ecap *ECAP) ReadCACertificate(ctx context.Context, in *pb.Empty) (*pb.Cert, error) {
    Trace.Println("gRPC ECAP:ReadCACertificate")

    return &pb.Cert{Cert: ecap.eca.raw}, nil
}

File2.go

package main

import "abc"

var ecap abc.ECAP //creating instance

func main() {
    err = ecap.ReadCACertificate(floo,floo)
}

我是一名新手。我想创建ECAP结构的实例并调用ReadCACertificate方法。目前我是这样创建的“var ecap abc.ECAP //创建实例”,但是出现了“nil”和空指针错误。

有人能帮忙提高调用ReadCACertificate方法的效率吗?

先行致谢。

2个回答

1
你的示例不完整,但基本上你需要初始化你的结构体,因为它有指针,而默认指针值是空。
var ecap := ECAP{new(ECA)}

我正在将包“abc”导入到另一个包“main”中。 如果您看到结构体“ECAP”具有一个未在包“abc”中导出的字段“eca”。如果我尝试创建ECAP结构的实例,我会收到错误“在abc.ECAP文字中隐式分配了未导出的字段'eca'”。 - balakrishna
如果您坚持使用包,则还应使用abc.ECA。 - Alexey Soshin
ecap := abc.ECAP{new(abc.ECA)} 正在报错,错误信息为“在 abc.ECAP 字面量中隐式分配了未公开的字段 'eca'”,因为 ECA 结构体中的 eca 字段是未公开的。 - balakrishna

0

你需要从你的 $GOPATH 导入第二个文件。而且你的函数返回两个值,不仅仅是一个错误。

package main


import (
     "$RELATIVE_PATH_FROM_GOPATH/abc"
)


var ecap := ECAP{new(ECA)} //initialize your struct, since it has pointers

func main() {
    cert, err = ecap.ReadCACertificate(floo,floo)
}

文件 1

type ECAP struct {
    Eca *ECA //uppercase make field be exported
}

1
两个文件在两个不同的包中。 - balakrishna
@balakrishna 现在怎么样了? 同时添加了 Alexey Soshin 的提示。 - CESCO
谢谢回复 @CESCO。ecap := abc.ECAP{new(abc.ECA)} 出现错误 "在 abc.ECAP 字面量中隐式分配了未导出的字段 'eca'",因为 ECA 结构体中的 eca 是未导出的字段。 - balakrishna
很遗憾,我不应该接触“abc”包。是否有任何方法可以避免更改导出字段? - balakrishna

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接