go 反射:由StructOf创建的具有匿名字段的类型的字符串表示,看起来这些字段不是匿名的,

i2byvkas  于 5个月前  发布在  Go
关注(0)|答案(4)|浏览(67)

请在提交问题之前回答以下问题。谢谢!

您正在使用的Go版本是什么(go version)?

go版本 go1.10.2 linux/amd64

这个问题在最新版本中是否重现?

是的

您做了什么?

package main

import "fmt"
import "reflect"

type MyInt int

func main() {
	type T = struct {
		MyInt
	}
	fmt.Println(reflect.TypeOf(T{})) // struct { main.MyInt }
	
	var n MyInt
	tn := reflect.TypeOf(n)
	// panic: reflect.StructOf: too many methods
	tt := reflect.StructOf([]reflect.StructField{
		{Name: "MyInt", Type: tn, Anonymous: true},
	})
	fmt.Println(tt) // struct { MyInt main.MyInt }
}

您期望看到什么?

struct { main.MyInt }
struct { main.MyInt }

您实际看到了什么?

struct { main.MyInt }
struct { MyInt main.MyInt }
j2cgzkjk

j2cgzkjk1#

顺便说一下,gccgo print:

struct { main.MyInt }
struct { ? main.MyInt }
epggiuax

epggiuax2#

/cc @crawshaw@josharian

u4vypkhs

u4vypkhs3#

可能这个问题是由两个事实共同引起的:

  1. 我们现在无法通过反射来声明类型。
  2. 使用gc编译的程序在运行时不会追踪别名类型的名称。

相关问题