Go反射

作者: Bug2Coder | 来源:发表于2021-03-16 13:34 被阅读0次

1、chan类型

package main
import (
  "fmt"
  "os"
  "os/single"
  "reflect"
  "syscall"
)

func refelectChan(ch interface{}, value interface{}) {
    // 判断是否为通道类型
    if reflect.ValueOf(ch).Kind() == reflect.Chan {
        // 发送者
        go func(value interface{}) {
            defer func() {
                fmt.Println("exit-send")
            }()
            // 判断发送的消息是否符合通道类型
            if reflect.ValueOf(value).Type().String() == reflect.ValueOf(ch).Type().Elem().String() {
                // 向通道内发送消息
                reflect.ValueOf(ch).Send(reflect.ValueOf(value))
                time.Sleep(time.Second * 5)
                // 关闭通道
                reflect.ValueOf(ch).Close()
            } else {
                fmt.Println("类型不符合通道定义")
                return
            }

        }(value)
        // 接收者
        go func() {
            defer func() {
                fmt.Println("exit-recv")
            }()
            for {
                // 接收消息,通道关闭ok为false
                msg, ok := reflect.ValueOf(ch).Recv()
                if ok {
                    fmt.Println(msg)
                } else {
                    fmt.Println("通道已关闭")
                    return
                }
            }
        }()

    } else {
        fmt.Println("不是通道类型")
        return
    }
}
func mian(){
    var a interface{}
    a = make(chan struct{})
    refelectChan(a, struct{}{})
    // 监听程序退出信号,关闭服务后退出
    ch := make(chan os.Signal, 1)
    signal.Notify(ch, syscall.SIGINT, syscall.SIGTERM)
    sig := <-ch
    fmt.Println("退出", sig)

}

相关文章

  • golang 反射机制

    go语言也有反射机制,今天自学到go的反射,发现还是很值得记录一些这个知识点的。go语言它是通过 reflect ...

  • reflect.go包学习_之二 指针操作提高反射性能 反射应用

    reflect.go包学习_之二 指针操作提高反射性能 反射应用 反射创建实例 反射信息、反射调用方法、反射修改值...

  • go反射

    reflect[https://studygolang.com/pkgdoc]:在运行时动态的获取一个变量的类型信...

  • go 反射

    反射的概念 反射就是程序能够在运行时动态的查看自己的状态,比关切允许修改自身的行为。1、GO的反射基础是接口和类型...

  • Go反射

    1、chan类型

  • go 反射

    在面对类型时,我们要区分 Type 和 Kind,前者表示真实类型(静态类型),后者表示其基础结构(底层类型)类别...

  • Go: 反射

    反射是Go中的高级语法,本文将以尽可能用简单的方式来介绍它。本文包括以下部分: 什么是反射? 如何检查一个变量及其...

  • GO 反射

    虽然在大多数的应用和服务中并不常见,但是很多框架都依赖 Go 语言的反射机制简化代码。因为 Go 语言的语法元素很...

  • Golang 学习笔记十四 反射

    参考《快学 Go 语言》第 15 课 —— 反射反射是 Go 语言学习的一个难点,但也是非常重要的一个知识点。反射...

  • Go教程第二十五篇:Go中的反射

    Go中的反射 本文是《Go系列教程》的第二十六篇文章。 反射是Go的高级特性之一。我将尽力讲解地简单些。 本教程具...

网友评论

      本文标题:Go反射

      本文链接:https://www.haomeiwen.com/subject/bvarcltx.html