C#/JAVA 程序员转GO/GOLANG程序员笔记大全(DAY 04)
-------------------- interface 接口
// 定义:
type IHumaner interface {
SayHi() // 接口中只能是方法声明,没有实现,没有数据字段
} // Student ...
type Student struct {
id int
name string
} func (tmp *Student) SayHi() {
fmt.Println("Student[%s, %d] SayHi", tmp.name, tmp.id)
} // Teacher ...
type Teacher struct {
addr string
group string
} func (tmp *Teacher) SayHi() {
fmt.Println("Teacher[%s, %d] SayHi", tmp.addr, tmp.group)
} // MyStr
type MyStr string
func (tmp *MyStr) SayHi() {
fmt.Println("MyStr[%s, %d] SayHi", *tmp)
} func main() {
// 定义接口类型的变量
var i IHumaner // 只是实现了此接口的方法的类型,那么这个类型的变量(接收者类型)就可以给i赋值
s := &Student{"loong", }
i = s
i.SayHi() t := &Teacher{"cls", "ShenZhen"}
i = t
i.SayHi() var str MyStr = "hello loong"
i = &str
i.SayHi() // Print Result
// loong 666 ... cls ... hello loong
}
-------------------- interface 接口 多态的应用
// 多态的应用
func WhoSayHi(i IHumaner){
i.SayHi()
} // 调用多态
s := &Student{"loong", }
t := &Teacher{"cls", "ShenZhen"}
var str MyStr = "hello loong" WhoSayHi(s)
WhoSayHi(t)
WhoSayHi(&str) // 创建一个切片
x := make([]IHumaner, )
x[] = s
x[] = t
x[] = &str for _, i := range x {
i.SayHi()
}
-------------------- interface 空接口 (任务类型)
func main() {
// 空接口是万能类型
type tmp interface{} =
// 字符串
tmp = "abc"
tmp = &v2
// .. 等等数据类型
// ***** 打印参数的内部实现就是采用的空接口
// ftm.Println(args ...interface{})
}
-------------------- 类型断言 (类型查询)
struct Student struct {
id int
name string
}
func main() {
i := make([]interface{}, )
i[] =
i[] = "hello go"
i[] = Student{, "loong"}
// 类型查询
for index, data := range i {
// 第一个返回值,第二个返回判断结果的真假
if value, ok := data.(int); ok == true {
}
// data.(string) data.(Student) 都可以作为判断
}
// 同理,data.(type) 也可以作用于判断类型 return int, string, ...
}
C#/JAVA 程序员转GO/GOLANG程序员笔记大全(DAY 04)的更多相关文章
- C#/JAVA 程序员转GO/GOLANG程序员笔记大全(DAY 05)
----------------------------------------- error 使用 (异常处理) // 语法 (普通错误) import "errors" fun ...
- C#/JAVA 程序员转GO/GOLANG程序员笔记大全(DAY 06)
----------------------------------------- go 并发 // 注解:go 语言天生为程序并发所设计,可以说go的强项就是在cpu并发上的处理. // go 语言 ...
- C#/Java 程序员转GO/golang程序员笔记大全(day 01)
前言: 整理一下学习 Go 语言的笔记,作为一名老程序,学习一名新的开发语言自然不需要像小白那样从 HelloWorld 看起. 简单整理一下 Go 的一些差异处,希望对大家学习 go 有点帮助,不正 ...
- C#/JAVA 程序员转GO/GOLANG程序员笔记大全(DAY 00)
一.安装说明 https://studygolang.com/dl 二.环境变量 // 下载 *.msi 安装文件,部分环境变量默认配置好了. 其他配置如下描述 三.目录及项目层级关系 在系统环境变量 ...
- C#/JAVA 程序员转GO/GOLANG程序员笔记大全(DAY 03)
go语言当中,没有 class 的概念,那么面向对象的编程思想如何展现呢,go语言中对结构体的使用 struct. package main import "fmt" type P ...
- C#/JAVA 程序员转GO/GOLANG程序员笔记大全(DAY 02)
------------------- 指针 go 保留的 c 语言指针的操作,同时增加了自动垃圾回收机制 var a = new(int) *a = // &a 内存地址 --------- ...
- PHP笔记——java程序员看懂PHP程序
PHP笔记——java程序员看懂PHP程序 php是一种服务器端脚本语言,类型松散的语言. <?php ?> xml风格 <script language=”ph ...
- 使用 Java 开发兼容 IPv6 的网络应用程序
根据现有 IPv4 地址的部署速度,剩余的地址将在 10 到 20 年被使用殆尽.因此网络逐渐从 IPv4 向 IPv6 转换是不可避免的,相应的各种网络应用程序都将支持 IPv6.对于 Java,从 ...
- StackOverflow程序员推荐:每个程序员都应读的30本书
“如果能时光倒流,回到过去,作为一个开发人员,你可以告诉自己在职业生涯初期应该读一本,你会选择哪本书呢?我希望这个书单列表内容丰富,可以涵盖很多东西.” 很多程序员响应,他们在推荐时也写下自己的评语. ...
随机推荐
- Latch free等待事件
Latch free等待事件的三个参数:p1-latch的地址:p2-latch编号:p3-请求次数.从oracle10g起,latchfree不再包含所有的latch等待,有些latch等待可能表现 ...
- 在PL/SQL中如何让程序暂停几秒钟
在编写PL/SQL中,有时需要程序中暂停几秒钟再继续执行,查了一下,oracle内置有这个功能dbms_lock.sleep(10):不过dbms_lock包需要用户自己安装,演示如下: C:\Doc ...
- crm 使用stark组件
# Create your models here. from django.db import models class Department(models.Model): "" ...
- android 自定义View 对话框
package com.example.dialog5; import android.os.Bundle;import android.app.Activity;import android.app ...
- Java基础知识陷阱(七)
本文发表于本人博客. 上次说了下HashSet和HashMap之间的关系,其中HashMap这个内部有这么一句: static final float DEFAULT_LOAD_FACTOR = 0. ...
- Redhat 7.4更新为Centos7的yum并安装docker-ce
以下命令请在root下执行 #删除原有的yum rpm -qa|grep yum|xargs rpm -e --nodeps #install centos yum #wget http://mirr ...
- web前端基础——初识JavaScript
1 JavaScript概述 JavaScript是一种属于网络的脚本语言,已经被广泛用于Web应用开发,常用来为网页添加各式各样的动态功能,为用户提供更流畅美观的浏览效果.通常JavaScript脚 ...
- 由浅入深之Tensorflow(1)----linear_regression实现
Tensorflow是目前非常流行的deeplearning框架,学习Tensorflow最好的方法是github上的tf项目https://github.com/tensorflow/tensorf ...
- Linux Swap交换分区介绍
Swap分区在系统的物理内存不够用的时候,把物理内存中的一部分空间释放出来,以供当前运行的程序使用.那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap分区中, ...
- JS正则表达式从入门到入土(1)—— REGEXP对象
REGEXP对象 JavaScript通过内置对象RegExp支持正则表达式,有两种方法实例化RegExp对象. 1.字面量 2.构造函数 字面量 字面量是直接通过/.../创建RegExp对象实例. ...