golang 泛型_Golang 1.x版本泛型编程

0e65639456c749705f3b05daccc2e5fb.gif

本文介绍了Golang 1.x版本的泛型编程。

往期回顾:浅谈动态追踪技术

7d93ce7ad67592f4771045a9d3e0bb9d.png

Go是一门天生为服务器程序设计的简洁的语言,因此Go的设计原则聚焦在可扩展性、可读性和并发性,而多态性并不是这门语言的设计初衷,因此就被放在了一边。虽然在2.0版本之前还没有泛型的支持,但是Go自带的一些语言特性可以满足一些类似“泛型”的要求,比如内置类型:

  1. array

  2. slice

  3. map

  4. chan

这四种类型可以用任意类型的元素初始化,例如map[yourtype]bool就可以用来实现任意元素的集合。Go的一些内置函数也是通用的,比如len()既可以用于string, array, slice, 也可以用于求map的长度。

但是如果golang内置结构和函数不能满足需求,可以从以下几种方法来入手:

01

类型断言

当你想实现一个通用函数的时候,会考虑传入的参数是不是固定类型的,Go正好提供了interface{}类型,它可以代表任意类型。当你不确定用什么类型合适的时候,用它就对了。举个简单的例子:

type Container struct {
elem []interface{}
}func (this *Container) Put(v interface{}) {
*this = append(*this, elem)
}// 取出最后一个元素func (this *Container) Get() interface{} {
ret := (*c)[len(*c)-1]
*c = (*c)[:len(*c)-1] return ret
}func assertExample() {
container := &Container{}
container.Put(1)
container.Put("Hello")
_, ok := container.Get().(int);!ok {
fmt.Println("Unable to read an int from container")
}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/334229.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jwt令牌_JWT令牌的秘密轮换

jwt令牌当您使用JSON Web令牌 ( JWT )或需要对有效载荷信息进行签名或加密的任何其他令牌技术时,设置令牌的到期日期很重要,因此,如果令牌到期,则可以假定这可能被视为安全漏洞,您拒绝使用此令牌…

linux android build tools,build.gradle 文件中的 Android SDK Build Tools version

build.gradle 文件中的 Android SDK Build Tools versionAndroid,Gradle,SDK2018.07.17在 Android Gradle Plugin 3.0.1 中,最低的 Android SDK Build Tools 是 26.0.2,而我声明的 25.0.0 将被忽略掉。今天新建了一个 Android 项目的时候,无意…

Linux 常用的软件包管理器/软件包管理工具

文章目录RPMYUMDNFDPKGPacmanZypperPortageEopkgUrpmiRPM 代表系统:RHEL、CentOS、Fedora、openSUSE、SUSE企业版、PCLinuxOS、Mandriva Linux、Mageia 等 主命令:rpm YUM 代表系统:RHEL、CentOS 主命令:yum DNF 这是基于 RP…

怎样用C语言实现五子棋,C语言实现五子棋

可以称得上史上最简单的五子棋版本了。可以使用curses库来改进页面和下棋方式。并且对于输入的坐标没有进行鉴别,如果输入的坐标超过棋盘大小,就会段错误退出。我改进了一点,但是还是没有完全避免这个问题。/**Gobang.c*/#include#include#de…

jasperreports_JasperReports:棘手的部分

jasperreports如果您使用Java进行编程的时间足够长,则有可能需要为业务用户生成报告。 就我而言,我已经看到几个项目使用JasperReportsLibrary来生成PDF和其他文件格式的报告。 最近,我荣幸地观察了Mike和他的团队使用上述报告库以及他们所面…

电脑运行adb闪退_adb+python进阶使用

之前文章有提到过使用python加adb刷视频,今天带来进阶版——无线多台手机。首先要使用adb连接多台手机,手机和电脑肯定要在统一局域网内。1.打开手机开发者模式,并通过USB接口链接电脑。2.打开cmd:输入adb tcpip 5555, 会得到相关…

MacBook 强制关机的四种方法

文章目录一、强制关机二、强制断电三、安全关闭(老款 MacBook)四、强制关闭一、强制关机 长按电源键,5 秒左右 二、强制断电 ShiftControlOption电源键 三、安全关闭(老款 MacBook) ControlOptionCommand电源键。…

python存储和读取数据时出现错误_python读取json文件存sql及codecs读取大文件问题...

preface: 最近帮师兄处理json文件,需要读到数据库里面,以备其后续从数据库读取数据。数据是关于yelp网站里面的: https://github.com/Yelp/dataset-examples,http://www.yelp.com/dataset_challenge/. 涉及到一些json和sql的问题,…

Mac OS/macOS 关机的命令

文章目录一、立即关机二、10 分钟后关机三、晚上 8 点关机四、立即重启一、立即关机 sudo halt 或者 sudo shutdown -h now 二、10 分钟后关机 sudo shutdown -h 10 三、晚上 8 点关机 sudo shutdown -h 20:00 四、立即重启 sudo reboot 或者 sudo shutdown -r now

使用枚举映射_用EnumMaps映射枚举键

使用枚举映射这是一种在JDK中存在很长时间的类型,当我们要定义以枚举类型作为键的映射时,这种类型会派上用场: EnumMap是一种特殊的Map 。 我们将为给定的枚举创建一个映射: public enum CoffeeType {ESPRESSO, POUR_OVER, FREN…

linux 划ext4,linux – 有没有像ext4这样的’快速’格式?

严格的答案像-E lazy_itable_init这样的解决方案不会改变结果,只会加快进程.这是明确要求的,在许多情况下人们需要更多.额外奖励在大多数情况下,您实际上需要一些与您的使用模式匹配的选项,不仅可以加快文件系统的创建速度,还可以加快使用速度并增加可用空间.我刚做了一个测试.…

java office在线编辑_国外10个最受欢迎的 Java 开发的 CMS 系统

CMS是Content Management System的缩写,意为"内容管理系统",它具有许多基于模板的优秀设计,可以加快网站开发的速度和减少开发的成本。CMS的功能并不只限于文本处理,它也可以处理图片、Flash动画、声像流、图像甚至电子…

apache kafka_Apache Kafka简介

apache kafka什么是Apache Kafka? Apache Kafka是一个分布式流系统,具有发布和订阅记录流的功能。 在另一方面,它是企业消息传递系统。 它是一个快速,水平可扩展和容错的系统。 Kafka有四个核心API, 生产者API&#x…

Mac OS 查看系统版本信息/硬件信息的命令

文章目录一、查看硬盘信息二、查看系统内核信息三、查看 OS 版本信息一、查看硬盘信息 liaowenxiongdeMacBook-Air:~ liaowenxiong$ system_profiler SPHardwareDataType Hardware:Hardware Overview:Model Name: MacBook AirModel Identifier: MacBookAir7,2Processor Name: …

人脸特征值能存放在sql server中吗_SQL运行内幕:从执行原理看调优的本质

原文链接:https://www.cnblogs.com/arthinking/p/13205303.html相信大家看过无数的MySQL调优经验贴了,会告诉你各种调优手段,如:避免 select *;join字段走索引;慎用in和not in,用exists取代in&a…

rest资源设计_REST资源何时应获得其自己的地址?

rest资源设计在纯粹的REST方法中,所有端点(起始端点除外)都是不透明的,因此不需要发布其各种详细信息。 即使使用这种方法,本文中的要点也很重要,因为服务器逻辑将必须确定何时需要结束点。 介绍 在REST体…

百度地图android绘图类,Class:android总类/android离线地图类

出自百度地图API跳转到:导航,搜索com.baidu.mapapi类 MKOfflineMapjava.lang.Object∟ com.baidu.mapapi.MKOfflineMappublic class MKOfflineMapextends java.lang.Object离线地图类(只支持老版离线地图)。字段摘要方法摘要返回类型方法booleanstart(int cityID)启…

android webviwe 头布局,Android布局问题,带有WebView下方的按钮

您需要使用android:layout_above“id/btnok”作为您的webview,并填写_parent作为webview的宽度和高度。但是,需要注意的是,在1.5及以下版本中,为了正确识别XML,需要指定相对布局视图。换句话说,您必须先使用按钮,然后使用WebView,因为WebView将引用该按钮。我认为这在1.6或2.0中…

简述python的编程规范_python编程规范

一 代码风格:(0)参考google代码规范:*链接:http://zh-google-styleguide.readthedocs.org/en/latest/google-python-styleguide/(1)缩进:*python通过缩进对齐来表达代码逻辑:同一层次的语句必须有相同的缩进&#xff0…