pointers - reflect如何获取返回的结构体指针

标签 pointers go struct reflection

package main

import (
    "fmt"
    "reflect"
)

type Blog struct {
    Name string
}

func (blog *Blog) Test() (*Blog){
    fmt.Println("this is Test method")
    blog.Name = "robin"
    return blog
}

func main() {
    var o interface{} = &Blog{}
    v := reflect.ValueOf(o)
    m := v.MethodByName("Test")
    rets := m.Call([]reflect.Value{})
    fmt.Println(rets)
}

我得到了以下输出:

  • 这是测试方法
  • []

为什么没有 Blog 结构体,如何获取 Blog Name 的值?

最佳答案

package main

import (
    "fmt"
    "reflect"
)

type Blog struct {
    Name string
}

func (blog *Blog) Test() *Blog {
    fmt.Println("this is Test method")
    blog.Name = "robin"
    return blog
}

func main() {
    rv := reflect.ValueOf(&Blog{})
    rm := rv.MethodByName("Test")

    results := rm.Call(nil)
    fmt.Printf("%#v\n", results)

    blogPointer := results[0]
    fmt.Printf("%#v\n", blogPointer)

    blogValue := blogPointer.Elem()
    fmt.Printf("%#v\n", blogValue)

    nameFieldValue := blogValue.FieldByName("Name")
    fmt.Printf("%#v\n", nameFieldValue)

    name := nameFieldValue.String()
    fmt.Println(name)
}

https://play.golang.org/p/iyUw-Sp97-

关于pointers - reflect如何获取返回的结构体指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47609731/

相关文章:

c - 合并两个 (uint8_t*) 指针并转换为十进制

java - 指向一个hashSet java

c - 如何评估c中的双指针?

testing - 如何去测试 Go 例程?

arrays - 如何将结构加载到数组中?

c - 将指针常量初始化为另一个指针常量内的字段?

regex - Golang 编译正则表达式以删除 "以及字符串中 @ 之后和包括的任何内容

go - 字符串 slice 到字符串?

c++ - C/C++结构问题

go - 使用来自不同文件的golang中的接口(interface)方法