2.4 GO Interface
package itface
type Sender interface {
Send(url string) string
}
type Geter interface {
Get(url string ) string
}
//组合接口
type Socket interface {
Sender
Geter
}
具体的实现struct中不必指定接口的名称,但却有一个要求:一个struct如果实现了某个接口,那么就必须实现接口中的所有方法
package itface
import "fmt"
type Client struct {
Count int
Contents string
}
func (cc Client) Send(url string) string {
fmt.Println("send message")
return "ok"
}
func (cc Client) Get(url string ) string {
fmt.Println(cc.Contents)
return cc.Contents
}
package itface
import "fmt"
type Server struct {
Count int
Contents string
}
//值复制方式,每次都是从初始化的值开始计算,没有高并发的问题
func (ss Server) Send(url string) string{
//ss.Count += 1
ss.setCount()
fmt.Println(ss.Count)
fmt.Println(ss.Contents)
return ss.Contents
}
func (ss *Server) setCount(a int){
ss.Count += a
}
package main import (
"fmt"
"study/itface"
) func test(str string){
var send itface.Sender
send = itface.Server{,str}
var url string
url = "www.baidu.com"
send.Send(url)
fmt.Println("第2次调用")
send.Send(url)
} func client(str string){
var client itface.Geter
client = itface.Client{,str}
client.Get("www.itoracle.cn")
} func socket(str string) {
var sk itface.Socket
sk = itface.Client{,str}
sk.Send("www.itoracle.cn")
} func main() {
test("不可能")
client("why?")
socket("bbb")
}
输出结果
不可能
第2次调用 不可能
why?
send message
2.4 GO Interface的更多相关文章
- angular2系列教程(七)Injectable、Promise、Interface、使用服务
今天我们要讲的ng2的service这个概念,和ng1一样,service通常用于发送http请求,但其实你可以在里面封装任何你想封装的方法,有时候控制器之间的通讯也是依靠service来完成的,让我 ...
- 接口--interface
“interface”(接口)关键字使抽象的概念更深入了一层.我们可将其想象为一个“纯”抽象类.它允许创建者规定一个类的基本形式:方法名.自变量列表以及返回类型,但不规定方法主体.接口也包含了基本数据 ...
- Configure a bridge interface over a VLAN tagged bonded interface
SOLUTION VERIFIED February 5 2014 KB340153 Environment Red Hat Enterprise Linux 6 (All Versions) Red ...
- Create a bridge using a tagged vlan (8021.q) interface
SOLUTION VERIFIED April 27 2013 KB26727 Environment Red Hat Enterprise Linux 5 Red Hat Enterprise Li ...
- Configure a bridged network interface for KVM using RHEL 5.4 or later?
environment Red Hat Enterprise Linux 5.4 or later Red Hat Enterprise Linux 6.0 or later KVM virtual ...
- Set up VLAN (802.1q) tagging on a network interface?
SOLUTION VERIFIED October 13 2015 KB39674 KB741413 environment Red Hat Enterprise Linux 4 Red Hat En ...
- 谨慎使用Marker Interface
之所以写这篇文章,源自于组内的一些技术讨论.实际上,Effective Java的Item 37已经详细地讨论了Marker Interface.但是从整个Item的角度来看,其对于Marker In ...
- 浅析Go语言的Interface机制
前几日一朋友在学GO,问了我一些interface机制的问题.试着解释发现自己也不是太清楚,所以今天下午特意查了资料和阅读GO的源码(基于go1.4),整理出了此文.如果有错误的地方还望指正. GO语 ...
- 如何设计一门语言(七)——闭包、lambda和interface
人们都很喜欢讨论闭包这个概念.其实这个概念对于写代码来讲一点用都没有,写代码只需要掌握好lambda表达式和class+interface的语义就行了.基本上只有在写编译器和虚拟机的时候才需要管什么是 ...
- abstract与interface之房祖名张默版
最近把java基础知识拿出来看看,看到abstract与interface的时候,觉得有点模糊,好像面试官也喜欢问这个问题.我在百度了查了好长时间,觉得讲算比较清楚的是那篇讲 Door,然后想要带个报 ...
随机推荐
- brk/sbrk和mmap行为分析程序
#include <stdio.h> #include <stdlib.h> #include <unistd.h> // #include <malloc. ...
- HTML5和CSS3实例教程 中文版 高清PDF扫描版
HTML5和CSS3实例教程共分3部分,集中讨论了HTML5和CSS3规范及其技术的使用方法.首先是规范概述,介绍了新的结构化标签.表单域及其功能(包括自动聚焦功能和占位文本)和CSS3的新选择器.接 ...
- 【转】Android自定义控件(三)——有弹性的ListView
原文地址:http://blog.csdn.net/a105865708/article/details/17959459 上一次我们试验了有弹性的ScrollView.详情 这一次,我们来试验有弹性 ...
- MariaDB 一些SQL语句的执行
通过拼接的TAG_NAME字符串获取对应的TAG_ID字符串 形如: '丹药|练功流|轻松|学生|学院风' 查询结果:'10|35|36|40' SELECT GROUP_CONCAT(TAG_ID ...
- WinForm中DataGridView的使用(三) - 各种事件
CellMouseDown/CellMouseUp 可获得行.列号 可用if (rowIndex >= 0 && e.Y > 4 && e.Y < ( ...
- Android学习笔记 Gallery图库组件的使用
activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android&qu ...
- EXCEL vlookup和small 综合运用
表数据如下: 如何通过EXCEL函数把 “谁拥有错误的代码” 的名称列出来,数组公式如下: =IFERROR(INDIRECT("A"& IFERROR(SMALL(IF( ...
- 「JSOI2009」球队收益 / 球队预算
题目链接 戳我 \(Solution\) 我们发现这道题目并不好做,因为要考虑两个因素对答案的影响.于是我们假设接下来的\(m\)场比赛双方都输了.这要我们就只要考虑赢一场对答案的影响了,那每赢一场输 ...
- 类型转换构造函数 及使用explicit避免类型自动转换------新标准c++程序设计
类型转换构造函数: 除复制构造函数外,只有一个参数的构造函数一般可以称作类型转换构造函数,因为这样的构造函数能起到类型自动转换的作用.例如下面的程序: #include<iostream> ...
- 自定义Cell的流程
1..h文件 // // 文 件 名:CHBackupGateWayCell.h // // 版权所有:Copyright © 2018 lelight. All rights reserved. / ...