文档章节

go语言中interface实现泛型编程

smart_w
 smart_w
发布于 2015/07/03 15:40
字数 110
阅读 197
收藏 5
package main

import (
    "fmt"
    "reflect"
)

type GenericSlice struct {
    elemType   reflect.Type
    sliceValue reflect.Value
}

func (self *GenericSlice) Init(sample interface{}) {
    value := reflect.ValueOf(sample)
    self.sliceValue = reflect.MakeSlice(value.Type(), 0, 0)
    self.elemType = reflect.TypeOf(sample).Elem()
}

func (self *GenericSlice) Append(e interface{}) bool {
    if reflect.TypeOf(e) != self.elemType {
        return false
    }
    self.sliceValue = reflect.Append(self.sliceValue, reflect.ValueOf(e))
    return true
}

func (self *GenericSlice) ElemType() reflect.Type {
    return self.elemType
}

func (self *GenericSlice) Interface() interface{} {
    return self.sliceValue.Interface()
}

func main() {
    gs := GenericSlice{}
    gs.Init(make([]int, 0))
    fmt.Printf("Element Type: %s\n", gs.ElemType().Kind()) // => Element Type: int
    result := gs.Append(2)
    fmt.Printf("Result: %v\n", result)             // => Result: true
    fmt.Printf("sliceValue: %v\n", gs.Interface()) // => sliceValue: [2]
}

本文转载自:

共有 人打赏支持
下一篇: Genetic algorithm
smart_w
粉丝 32
博文 74
码字总数 23007
作品 0
武汉
程序员
私信 提问
Python与C#对比 python学习

Python是一种跨平台语言。无论是在Windows、Linux、Unix还是Mac Os系统,我们都可以使用Python。甚至在Linux、Unix及Mac OS系统内已经集成了Python。语法简洁优美, 简单,易学。拥有强大的标...

zhouzhou2018
2018/05/23
0
0
Google 的编程语言 - Go

Go是Google开发的一种编译型,並發型,并具有垃圾回收功能的编程语言。 Go语言是基于Inferno操作系统所开发的。Go语言于2009年11月正式宣布推出,成为开放源代码项目,并在Linux及Mac OS X平...

匿名
2009/11/11
0
54
Go 1.7 rc6 发布,Google 的编程语言

Go 1.7 rc6 发布了,官网暂无该版本的改进信息,了解更多,请静待后续更新。 Go是Google开发的一种编译型,並發型,并具有垃圾回收功能的编程语言。 罗伯特·格瑞史莫 (Robert Griesemer),...

oschina
2016/08/09
3.4K
13
美好或者丑陋的 Go

这是一个“Go不好”系列的额外文章。Go确实有一些不错的特性,也就是本文中“好的”部分,但是当我们不使用API或者网络服务器(这是为它设计的)而且将它用于业务领域逻辑的时候,总体而言我...

oschina
2018/04/13
6.5K
9
【Go语言】【14】GO语言的接口类型

1、什么是接口? 在面向对象的语言中,接口是用来限制实现类行为的。怎么理解这句话呢? 定义一个Person接口,我只会站在我的角度上考虑问题,比如Person(人),自然想到会吃饭、睡觉等: ...

qingkechina
2015/07/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

linux 服务管理 Crontba、Ntpdate、Logrotate、Supervisor

crond linux 系统则是由 cron (crond) 这个系统服务来控制的。Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的。 另外, 由于使用者自己也可以设置计划任务,所以,...

狼王黄师傅
41分钟前
2
0
Sobel算子和Scharr滤波器

Sobel算子在数学上的本质是微分,对离散信号,是求邻域内的增量。 基本原理:在图像上,对图像信号在某点进行微分,表示图像的某个特征(如,强度、色调或者饱和度)在该点的变换程度。以强度...

yepanl
57分钟前
2
0
Jenkins API 使用

Jenkins 是一款流行的开源持续集成工具,可以用来做一些软件开发的自动化工作,如打包,测试,自动部署等。 Jenkins 中有 view 和 job 的概念, view 相当于组, job 则是具体的任务。 view...

YanWen
58分钟前
5
0
聊聊jest的NodeChecker

序 本文主要研究一下jest的NodeChecker NodeChecker jest-common-6.3.1-sources.jar!/io/searchbox/client/config/discovery/NodeChecker.java public class NodeChecker extends AbstractS......

go4it
今天
3
0
深入分析String.intern和String常量的实现原理

背景 字符串类型在实际应用场景中使用非常频繁,如果为每个字符串常量都生成一个对应的String对象,明显会造成内存的浪费,针对这一问题,虚拟机实现一个字符串常量池的概念,提供了如下实现...

群星纪元
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部