使用反射(reflect)在golang中访问一个包(package)的私有字段(private fields)。

huangapple go评论91阅读模式
英文:

Access private fields of a package in golang using reflect

问题

我正在为golang中的一个包编写单元测试。我需要创建一个私有字段类型的变量,该变量位于不同的包中,以便将其作为参数传递给我正在测试的函数。

包:go/abc/a.go

type newType int

包:go/edf/b.go

import "go/abc"

func init(abc newType){
  // 省略部分代码
}

现在我正在为b.go编写单元测试

包:go/edf/b_test.go

func TestInit(){
// 现在我需要在abc包中创建一个私有字段类型newType的变量
// 以便将其作为参数传递给init函数
}

在golang中,可以使用reflectpackages包来实现这一点吗?

英文:

I am writing a unit test for a package in golang. I need to create a variable of private field type which resides in a different package to pass it as a parameter to the function that I am testing.

package : go/abc/a.go

type newType int

package : go/edf/b.go

import "go/abc"

func init(abc newType){
  // ommitted for brevity 
}

Now I am writing unit test for b.go say

package : go/edf/b_test.go

func TestInit(){
// Now I need to create a variable of private field type newType in abc package
// for passing as parameter to the init function....   
}

Is it possible to achieve this using reflect or packages package in golang

答案1

得分: 2

你无法这样做。未导出(即你所称的私有)的唯一目的是无法从外部访问。

英文:

> I need to access a private field in a package

You cannot do this. The sole purpose of being unexported (what you call private) is to be inaccessable from outside.

huangapple
  • 本文由 发表于 2021年7月29日 16:52:19
  • 转载请务必保留本文链接:https://go.coder-hub.com/68572933.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定