Golang中对interface{}做type assertion和type switch学习笔记

interface{}是一个通用类型,可以储存任意类型的值。如下方法来获取值的实际类型:
如果你比较确定类型可以使用type assertion:

var num interface{} = 100
if val,ok := num.(int); ok {
    fmt.Println(val)
}

如果你不确定interface{}的具体类型,使用type switch:

var str interface{} = "abc"
 
switch v := str.(type) {
case string:
 fmt.Println(v)
case int32, int64:
 fmt.Println(v)
default:
 fmt.Println("unknown")
}

时间: 2024-09-11 10:16:37

Golang中对interface{}做type assertion和type switch学习笔记的相关文章

Swift中的类class与结构体struct体学习笔记_Swift

一.引言Swift中的类与结构体十分相似,和Objective-C不同的事,Swift中的结构体不仅可以定义属性,也可以像类一样为其定义方法. Swift中的类与结构体有如下相似点: 1.定义属性来存储值. 2.定义函数来提供功能. 3.通过定义下标语法使用下标的方式取值. 4.定义构造方法来对其进行初始化. 5.通过扩展来在原始基础上添加功能. 6.通过协议来定义实现标准. 当然类和结构体也有许多不同点,下面这些功能是类独有的,结构体没有: 1.通过继承来创建类的子类. 2.在运行时允许对类的

在Golang中使用C语言代码实例_Golang

cgo 使得在 Golang 中可以使用 C 代码. Hello World 为了有一个较为直观的了解,我们来看一个简单的例子,创建文件 main.go: 复制代码 代码如下: package main   /* #include <stdio.h>   void sayHi() {     printf("Hi"); } */ import "C"   func main() {     C.sayHi() } 执行程序: 复制代码 代码如下: go

JavaScript学习笔记之取数组中最大值和最小值_javascript技巧

推荐阅读:JavaScript学习笔记之数组的增.删.改.查 JavaScript学习笔记之数组求和方法 JavaScript学习笔记之数组随机排序 在实际业务中有的时候要取出数组中的最大值或最小值.但在数组中并没有提供arr.max()和arr.min()这样的方法.那么是不是可以通过别的方式实现类似这样的方法呢?那么今天我们就来整理取出数组中最大值和最小值的一些方法. 取数组中最大值 可以先把思路理一下: 将数组中第一个元素赋值给一个变量,并且把这个变量作为最大值: 开始遍历数组,从第二个元

golang中[]string转[]interface{}实现

在golang语法中,不应该隐藏复杂的类型操作. 如string转interface{},[]string转interface{}都是时间复杂度O(1)的操作.而[]string转[]interface{}是O(n)的操作. 注:string和[]byte除外,这是特例. 因此[]T 转 []interface{}只能自己去实现:  strSls := []string{   "test1",   "test2",  }    //[]interface{}(str

初步解读Golang中的接口相关编写方法_Golang

概述如果说goroutine和channel是Go并发的两大基石,那么接口是Go语言编程中数据类型的关键.在Go语言的实际编程中,几乎所有的数据结构都围绕接口展开,接口是Go语言中所有数据结构的核心. Go语言中的接口是一些方法的集合(method set),它指定了对象的行为:如果它(任何数据类型)可以做这些事情,那么它就可以在这里使用. 接口的定义和使用 比如 复制代码 代码如下: type I interface{     Get() int     Put(int)   } 这段话就定义

golang中解决tcp传输中的粘包问题

golang中解决tcp传输中的粘包问题 Author: 岳东卫 Email: usher.yue@gmail.com 什么是粘包? 最近在写https://github.com/UsherYue/ActivedRouter (一个http/https反向代理服务)的时候遇到了粘包问题, 如果有做过网络编程的小伙伴应该都知道粘包问题,举个例子: 比如客户端在和服 务器进行通信采用的是json格式的数据包.那么此时Client和Server的数据交互流程应该如下: Client Send Json

编码-golang中服务器获得json字符串格式不对

问题描述 golang中服务器获得json字符串格式不对 我发送的是{""userName"":""huloixia""userPass"":""030719""}而服务器得到的却是%7B%22userName%22%3A%22huloixia%22%2C%22userPass%22%3A%22030719%22%7D& 我不知道什么方法可以再编码回来 解决方

Golang中的cgo调用 mysql 库的例子

Golang 中关于 cgo 的文档比较少,所以我绝对写个简单的案例,这里用 Mysql 做案例,一种是调用C里边的函数,一种是完全用 golang 来点用 mysql 库函数.我的环境是 MAC ,如果测试的话,请 LDFLAGS 对应自己的环境编写. 注意的地方 Golang 的 cgo 引用必须单独一行,也就是说必须如下写法 import "C" cgo 中 没有 C.NULL 类型 ,所以你要使用 nil package main /* #include <stdio.h

golang中类型比较和类型赋值说明

golang文档中对type有说明: 命名类型,有类型名称如 int, int64, float, string, bool. 还有自定义的命名类型. 非命名类型,没类型名称 []string, map[string]string, [4]int. 当比较两个命名类型的时候,类型名称必须一样:当比较命名类型和非命名类型的时候,底层类型一样即可. 声明变量有多种形态: var a int //声明一个int类型的变量 var b struct { //声明一个结构体 name string } v