golang reflect 简单使用举例
golang中的多态,主要由接口interface体现。
接口interface在实现上,包括两部分:动态类型和动态值。
golang提供的reflect包可以用来查看这两部分。
动态类型
func TypeOf(i interface{}) Type
返回i的动态类型。
动态值
func ValueOf(i interface{}) Value
返回i存放的动态值。
下面举例说明。
package main
import (
"fmt"
"reflect"
)
func main(){
count := 99
refType := reflect.TypeOf(count)
fmt.Println("Type reflect.TypeOf():", refType) // reflect.TypeOf()
refValue := reflect.ValueOf(count)
fmt.Println("reflect.ValueOf():", refValue) // reflect.ValueOf()
fmt.Println("Type Value.Type():", refValue.Type()) // equal to reflect.TypeOf()
// basic type
fmt.Println("basic type, Kind():", refValue.Kind())
fmt.Println("value.Int():", refValue.Int())
fmt.Println("value.Interface():", refValue.Interface())
fmt.Println("value.Interface().(int):", refValue.Interface().(int)) // assert type
}
输出结果:
Type reflect.TypeOf(): int
reflect.ValueOf(): 99
Type Value.Type(): int
basic type, Kind(): int
value.Int(): 99
value.Interface(): 99
value.Interface().(int): 99
其中Interface()定义如下,
func (v Value) Interface() (i interface{})
用interface{}的方式返回v中动态值。等价于:
var i interface{} = (v's underlying value)
是上面提到的函数ValueOf()的反操作。
Int()是经过断言后输出的结果。
value.Interface().(int)是我们自己断言后输出的结果。
golang reflect 简单使用举例的更多相关文章
- golang reflect
golang reflect go语言中reflect反射机制.详细原文:地址 接口值到反射对象 package main import ( "fmt" "reflect ...
- Knockout应用开发指南 第八章:简单应用举例(2)
原文:Knockout应用开发指南 第八章:简单应用举例(2) 5 Control types 这个例子,对view model没有什么特殊的展示,只是展示如何绑定到各种元素上(例如,select ...
- Knockout应用开发指南 第八章:简单应用举例(1)
原文:Knockout应用开发指南 第八章:简单应用举例(1) 本章展示的4个例子主要是利用了Knockout的基本语法特性,让大家感受到使用Kncokout的快感. 1 Hello world ...
- Golang设计模式—简单工厂模式(Simple Factory Pattern)
Golang设计模式--简单工厂模式 背景 假设我们在做一款小型翻译软件,软件可以将德语.英语.日语都翻译成目标中文,并显示在前端. 思路 我们会有三个具体的语言翻译结构体,或许以后还有更多,但现在分 ...
- golang reflect包使用解析
golang reflect包使用解析 参考 Go反射编码 2个重要的类型 Type Value 其中Type是interface类型,Value是struct类型,意识到这一点很重要 Type和Va ...
- 代码片段 - Golang 实现简单的 Web 服务器
------------------------------ 下面一段代码,实现了最简单的 Web 服务器: 编译环境: Linux Mint 18 Cinnamon 64-bit Golang 1. ...
- Asp.net core与golang web简单对比测试
最近因为工作需要接触了go语言,又恰好asp.net core发布RC2,就想简单做个对比测试. 下面是测试环境: CPU:E3-1230 v2 内存:16G 电脑有点不给力 操作系统:Centos7 ...
- golang从简单的即时聊天来看架构演变
前言 俗话说的好,架构从来都不是一蹴而就的,没有什么架构一开始设计就是最终版本,其中需要经过很多步骤的变化,今天我们就从一个最简单的例子来看看,究竟架构这个东西是怎么变的. 我将从一个最简单的聊天室的 ...
- golang reflect知识集锦
目录 反射之结构体tag Types vs Kinds reflect.Type vs reflect.Value 2019/4/20 补充 reflect.Value转原始类型 获取类型底层类型 遍 ...
随机推荐
- 错误信息 NSError
一.获取系统的错误信息 比如移动文件时,获取文件操作错误: NSError *e = nil;[[NSFileManager defaultManager] moveItemAtPath:source ...
- 安装MySQL数据库并开启远程访问
一.安装MySQL数据库 MySQL安装在系统盘下(C:\Program Files),方便系统备份. 1.双击安装程序,勾选“I accept the license terms”,点击“Next” ...
- c++ easyX的学习
画象棋盘来浅显学习了解easyx 了解象棋盘的构成: 如图就为一个基本的象棋棋盘我们下面就用esayx来画出这个棋盘,我的感觉这个棋盘大概分为两个部分:第一部分就是棋盘的大致布局,第二个就是棋盘的细节 ...
- 接口开发(login、reg)
接口开发: import flask,json,pymysql,hashlib server = flask.Flask(__name__)# 把当前这个python文件当做一个服务 def my_d ...
- 解决 Jenkins 乱码以及命令不存在的问题
方法一: Jenkins----系统管理----系统设置----全局属性----勾选环境变量 键 LANG 值 zh_CN.UTF-8 方法二(如果脚本用的是python): PYTHONIOENCO ...
- python之ORM
pymysql python操作数据库的基本步骤: 导入相应的python模块: 使用connect函数连接数据库,并返回一个connection对象: 通过connection对象的cursor方法 ...
- 用Python实现九九乘法表打印
#!usr/bin/env python # -*- coding:utf-8 -*- # dic={ # 'apple':10, # 'iphon':5000, # 'wwatch Tv':3000 ...
- String中的intern方法
上一篇你真的会用String吗(3)-关于字符串拼接中我们提到了String.intern()方法,本篇我们就来详细的看下这个方法是干嘛的.首先来看下jdk8中这个方法的注释: When the in ...
- Javascript实现图片点击弹出
一直想给安装一个缩略图点击弹出的插件,但是找了找几乎都是用的php来做的,插件的使用和安装极其繁琐,于是上网查了些demo,自己实现了一个纯js的图片弹出插件. 实现的思路是通过编写hook图片的on ...
- win10 去掉资源管理器左侧的Creative Cloud Files
open regedit 依次打开HKEY_CLASSES_ROOT\CLSID\{0E270DAA-1BE6-48F2-AC49-95A54E35F3C4} 双击{0E270DAA-1BE6-48F ...