首页 > 其他分享 >GO语言自学_013_接口

GO语言自学_013_接口

时间:2022-09-06 20:55:24浏览次数:72  
标签:int 值为 fmt 数据类型 Println 013 GO 自学 interface

代码
package main

import "fmt"

/*
go语言中,有专门的关键字表示接口:interface
interface不仅可以处理多态,还可以接收任意的数据类型。
*/
func main() {
	// 定义三个接口
	var i, j, k interface{}

	names := []string{"Duke", "Lily"}
	age := 20
	str := "Hello"

	i = names
	j = age
	k = str

	fmt.Println("i代表切片数组:", i)
	fmt.Println("j代表数字:", j)
	fmt.Println("k代表字符串:", k)

	/*
		问题:我们只知道i,j,k都是interface,但不知道代表什么数据类型。
	*/
	// 现在k是一个字符串类型,判断k是不是int类型(不太常用)
	fmt.Println("案例1")
	value, ok := k.(int)
	if ok {
		fmt.Println("k 是int数据类型,值为:", value)
	} else {
		fmt.Println("k不是int")
	}

	/*
		常用场景:把interface当成一个函数参数,switch判断不同数据类型
		根据不同类型,做相应逻辑处理
	*/

	// 创建一个具有三个接口的类型的切片
	fmt.Println("案例2")
	arr := make([]interface{}, 4)
	arr[0] = 1
	arr[1] = "Hello"
	arr[2] = true
	arr[3] = 3.11112323
	for _, value := range arr {
		// 获取当前接口的真正数据类型
		switch v := value.(type) {
		case int:
			fmt.Printf("当前数据类型为int,值为:%d\n", v)
			break
		case bool:
			fmt.Printf("当前数据类型为bool,值为:%v\n", v)
			break
		case string:
			fmt.Printf("当前数据类型为string,值为:%s\n", v)
			break
		default:
			fmt.Println("数据类型不合理。")
		}
	}
}
结果
ASUS@DESKTOP-NFP9SLA MINGW64 /c/gowork/src
$ go run 012_interface.go 
i代表切片数组: [Duke Lily]
j代表数字: 20
k代表字符串: Hello
案例1
k不是int
案例2
当前数据类型为int,值为:1
当前数据类型为string,值为:Hello
当前数据类型为bool,值为:true
数据类型不合理。

标签:int,值为,fmt,数据类型,Println,013,GO,自学,interface
From: https://www.cnblogs.com/cloucodeforfun/p/16663259.html

相关文章

  • 全网最简单的大文件上传与下载代码实现(React+Go)
    前言前段时间我需要实现大文件上传的需求,在网上查找了很多资料,并且也发现已经有很多优秀的博客讲了大文件上传下载这个功能。我的项目是个比较简单的项目,并没有采用特别......
  • Golang基础-5
    Golang基础-5map又叫映射(map),go语言中内置的一种类型,同样也是键值对关联基本语法varmap变量名map[keyType]valueType注意key的数据类型不能是slice,map,function,一......
  • gorm如何支持软删除+联合唯一索引
    gorm默认支持软删除如果想要支持联合唯一索引,就需要用到一个gorm的插件库:gorm.io/plugin/soft_deleteBydefault,gorm.Modeluses*time.TimeasthevaluefortheDel......
  • conda环境报错:libgomp.so.1: version `GOMP_4.0' not found?libstdc++.so.6: version `
    问题之前的conda环境好好地,最近不知为何被破坏了,运行即报错:/miniconda3/opt/lib/R/bin/exec/R:/miniconda3/opt/lib/R/bin/exec/../../lib/../../libgomp.so.1:version......
  • client-go开发自定义operator
    开发operator一共分为5步骤一、创建configconfig的创建有两种方式1、clientcmd.BuildConfigFromFlagsconfig,err:=clientcmd.BuildConfigFromFlags("",clientcmd.......
  • Golang如何判断接口是否实现
    packagemaintypepeopleinterface{ getage()int}typestustruct{ Ageint Namestring}typestaffstruct{ Ageint Namestring}func(T*stu)......
  • 【MongoDB】Prometheus监控MongoDB
    这里只是写了如何安装mongodb_exporter。其他部分参看:https://www.cnblogs.com/abclife/p/16659151.html下载和安装sudowgethttps://github.com/percona/mongodb_exp......
  • django中的request对象方法
    1.什么是request对象在django中,当一个页面被请求时,Django就会创建一个包含本次请求原信息的HttpRequest对象;Django会将这个对象自动传递给响应的视图函数,一般视图函数约定......
  • 在DJango中使用模型类时,出现一个DoesNotExist
    在使用Django去查询数据库时,如果不存在,会抛出一个异常。try:order=Order.objects.get(order_number=order_number)iforder.orde......
  • mongo查询
    StringcollectionName="space_json";//表名List<Map<String,Object>>maplist=newArrayList();Queryquery=createMongoQuery(spaceCode,roomId);//查询条件List<......