设为首页 加入收藏

TOP

Go学习笔记5(三)
2023-09-23 15:43:56 】 浏览:318
Tags:习笔记
ntln(num) }

image-20230912223655856

操作结构体的属性和方法

【1】代码:(熟知API)

package main
import(
        "fmt"
        "reflect"
)
//定义一个结构体:
type Student struct{
        Name string
        Age int
}
//给结构体绑定方法:
func (s Student) CPrint(){
        fmt.Println("调用了Print()方法")
        fmt.Println("学生的名字是:",s.Name)
}
func (s Student) AGetSum(n1,n2 int) int{
        fmt.Println("调用了AGetSum方法")
        return n1 + n2
}
func (s Student) BSet(name string,age int){
        s.Name = name
        s.Age = age
}
//定义函数操作结构体进行反射操作:
func TestStudentStruct(a interface{}){
        //a转成reflect.Value类型:
        val := reflect.ValueOf(a)
        fmt.Println(val)
        //通过reflect.Value类型操作结构体内部的字段:
        n1 := val.NumField()
        fmt.Println(n1)
        //遍历-获取具体的字段:
        for i := 0; i < n1;i++{
                fmt.Printf("第%d个字段的值是:%v",i,val.Field(i))
        }
        fmt.Println()
        //通过reflect.Value类型操作结构体内部的方法:
        n2 := val.NumMethod()
        fmt.Println(n2)
        //调用CPrint()方法:
        //调用方法,方法的首字母必须大写才能有对应的反射的访问权限
        //方法的顺序按照ASCII的顺序排列的,a,b,c,,,,,,索引:0,1,2,,,,,
        val.Method(2).Call(nil)
        //调用AGetSum方法:
        //定义Value的切片:
        var params []reflect.Value
        params = append(params,reflect.ValueOf(10))
        params = append(params,reflect.ValueOf(20))
        result := val.Method(0).Call(params)
        fmt.Println("AGetSum方法的返回值为:",result[0].Int())
}
func main(){
        //定义结构体具体的实例:
        s := Student{
                Name : "丽丽",
                Age : 18,
        }
        //调用TestStudentStruct:
        TestStudentStruct(s)
}

修改结构的变量

【1】代码:

package main
import(
        "fmt"
        "reflect"
)
//定义一个结构体:
type Student struct{
        Name string
        Age int
}
//给结构体绑定方法:
func (s Student) CPrint(){
        fmt.Println("调用了Print()方法")
        fmt.Println("学生的名字是:",s.Name)
}
func (s Student) AGetSum(n1,n2 int) int{
        fmt.Println("调用了AGetSum方法")
        return n1 + n2
}
func (s Student) BSet(name string,age int){
        s.Name = name
        s.Age = age
}
//定义函数操作结构体进行反射操作:
func TestStudentStruct(a interface{}){
        //a转成reflect.Value类型:
        val := reflect.ValueOf(a)
        fmt.Println(val)
        n := val.Elem().NumField()
        fmt.Println(n)
        //修改字段的值:
        val.Elem().Field(0).SetString("张三")
}
func main(){
        //定义结构体具体的实例:
        s := Student{
                Name : "丽丽",
                Age : 18,
        }
        //调用TestStudentStruct:
        TestStudentStruct(&s)
        fmt.Println(s)
}
首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Go语句与表达式深度解析:全案例.. 下一篇每日一库:lumberjack -- 日志轮..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目