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 简单使用举例的更多相关文章

  1. golang reflect

    golang reflect go语言中reflect反射机制.详细原文:地址 接口值到反射对象 package main import ( "fmt" "reflect ...

  2. Knockout应用开发指南 第八章:简单应用举例(2)

    原文:Knockout应用开发指南 第八章:简单应用举例(2) 5   Control types 这个例子,对view model没有什么特殊的展示,只是展示如何绑定到各种元素上(例如,select ...

  3. Knockout应用开发指南 第八章:简单应用举例(1)

    原文:Knockout应用开发指南 第八章:简单应用举例(1) 本章展示的4个例子主要是利用了Knockout的基本语法特性,让大家感受到使用Kncokout的快感. 1   Hello world ...

  4. Golang设计模式—简单工厂模式(Simple Factory Pattern)

    Golang设计模式--简单工厂模式 背景 假设我们在做一款小型翻译软件,软件可以将德语.英语.日语都翻译成目标中文,并显示在前端. 思路 我们会有三个具体的语言翻译结构体,或许以后还有更多,但现在分 ...

  5. golang reflect包使用解析

    golang reflect包使用解析 参考 Go反射编码 2个重要的类型 Type Value 其中Type是interface类型,Value是struct类型,意识到这一点很重要 Type和Va ...

  6. 代码片段 - Golang 实现简单的 Web 服务器

    ------------------------------ 下面一段代码,实现了最简单的 Web 服务器: 编译环境: Linux Mint 18 Cinnamon 64-bit Golang 1. ...

  7. Asp.net core与golang web简单对比测试

    最近因为工作需要接触了go语言,又恰好asp.net core发布RC2,就想简单做个对比测试. 下面是测试环境: CPU:E3-1230 v2 内存:16G 电脑有点不给力 操作系统:Centos7 ...

  8. golang从简单的即时聊天来看架构演变

    前言 俗话说的好,架构从来都不是一蹴而就的,没有什么架构一开始设计就是最终版本,其中需要经过很多步骤的变化,今天我们就从一个最简单的例子来看看,究竟架构这个东西是怎么变的. 我将从一个最简单的聊天室的 ...

  9. golang reflect知识集锦

    目录 反射之结构体tag Types vs Kinds reflect.Type vs reflect.Value 2019/4/20 补充 reflect.Value转原始类型 获取类型底层类型 遍 ...

随机推荐

  1. 爆路径写后门拿shell的一些姿势

    [PhpMyAdmin后台拿Shell]CREATE TABLE `mysql`.`xiaoma` (`xiaoma1` TEXT NOT NULL );INSERT INTO `mysql`.`xi ...

  2. IT技术网站博客推荐

    CSDN 全球最大中文IT社区,为IT专业技术人员提供最全面的信息传播和服务平台. 51CTO 技术成就梦想 - 中国领先的IT技术网站 itEye Java编程 Spring框架 Ajax技术 ag ...

  3. php连接阿里云mysql

    1.开启Mysql远程访问端口 现在服务器控制台,安全组那边开启3306端口 2.修改Mysql配置文件 vim /etc/mysql/mysql.conf.d/mysqld.cnf,找到bind-a ...

  4. oracle 使用问题

    12541: 典型的listener.ora 文件内容: SID_LIST_LISTENER =   (注册到监听器的service name所在区域)  (SID_LIST =    (SID_DE ...

  5. Mac下安装配置NMP环境

    第一次在Mac上安装NMP,记录下 因为下面环境的安装都是基于homebrew的,所以如果没有安装他的话,要先安装他(官网:https://brew.sh/index_zh-cn.html) 安装ho ...

  6. CISCO SMARTnet服务和SMB服务技术支持

    点击官网:SMB Support Assistant技术支持服务 点击官网:思科SMARTnet快速维护及快速维护现场服务 一.SMARTnet服务 1.1 标准SMARTnet 服务级别:5*8*N ...

  7. Codeforces Round #581 (Div. 2) C. Anna, Svyatoslav and Maps (Floyd 算法,最短路)

    C. Anna, Svyatoslav and Maps time limit per test2 seconds memory limit per test256 megabytes inputst ...

  8. maven私仓搭建——nexus3

    maven私仓搭建——nexus3本文主要介绍maven私仓在windows下的搭建.本文主要参考:http://www.cnblogs.com/bingyeh/p/5913486.html好,下面上 ...

  9. 958. Check Completeness of a Binary Tree

    题目来源 题目来源 C++代码实现 /** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode ...

  10. JDK代码查看--Eclipse

    除了要会查找文档,还要学会使用查看代码. 首先看一看你是否下载了源码,如果没下载就去网上下载一个版本,在Eclipse中window->Preferences->Java->Inst ...