对于go语言来说,设计最精妙的应该是interface了,直白点说interface是一组method的组合。至于更加详细的描述,本文不做介绍,今天谈谈空接口。

  空interface(interface{})不包含任何的method,因此所有的类型都实现了空interface。空interface在我们需要存储任意类型的数值的时候相当有用,有点类似于C语言的void*类型。请看下面的代码:

package main

import (
    "fmt"
)

func main() {
    slice := make([]interface{}, 10)
    map1 := make(map[string]string)
    map2 := make(map[string]int)
    map2["TaskID"] = 1
    map1["Command"] = "ping"
    map3 := make(map[string]map[string]string)
    map3["mapvalue"] = map1
    slice[0] = map2
    slice[1] = map1
    slice[3] = map3
    fmt.Println(slice[0])

    fmt.Println(slice[1])
    fmt.Println(slice[3])
}
这段代码声明了一个空接口的slice,这意味着它的值可以是任意类型,然后我们声明了两个map,一个是map[string]string,一个是map[string]int,然后在声明一个map的map类型,将这三个类型赋值给slice,使得slice可以存贮各种不同类型的数据,想想看,一个可变数组中,存储了一个key为string类型,value为int类型的map,又存储了一个key为string类型,value为string类型的map,还存储了一个map的map,这对c/c++转go的程序员们来说是多么让人吃惊。

最新文章

  1. Git ignore UserInterfaceState.xcuserstate
  2. hdu3033 背包变形
  3. 【Reporting Services 报表开发】— 数据表的使用
  4. web api 开发之 filter
  5. ActivityLifeCycle官方demo分解
  6. 九度oj题目&吉大考研11年机试题全解
  7. C#模板打印excel
  8. 转 玩转Bash变量
  9. bzoj3289
  10. spring.handlers、spring.schemas、spring.tooling被覆盖的三种解决方式
  11. JS - 实现简单易用的倒计时 x 天 x 时 x 分 x 秒
  12. python基础0
  13. Vijos P1116 一元三次方程求解【多解,暴力,二分】
  14. MyCP(课下作业)
  15. BZOJ.4500.矩阵(差分约束 SPFA判负环 / 带权并查集)
  16. 翻译NYOJ
  17. appium 报错
  18. [leetcode]Partition List @ Python
  19. firmware 固件
  20. win10系统自带的浏览器ME如何将网页转成PDF

热门文章

  1. Android 自定义带刻度的seekbar
  2. C标准库<string.h>实现
  3. Java使用正则表达式获取文本的章节名称
  4. 【读书笔记】iOS-UIWindow-WindowLevel
  5. MyBatis入门(五)---延时加载、缓存
  6. spring和mybatis整合配置
  7. IOS 瀑布流UICollectionView实现
  8. ReactiveCocoa之UI篇
  9. OpenGL ES学习笔记(三)——纹理
  10. IOS组件绑定无效错误