Go语言中文网 为您找到相关结果 403

Golang的反射reflect深入理解和示例

[TOC] Golang的反射reflect深入理解和示例 【记录于2018年2月】 编程语言中反射的概念 在计算机科学领域,反射是指一类应用,它们能够自描述和自控制。也就是说,这类应用通过采用某种机制来实现对自己行为的描述(self-representation)和监测(examination),并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。 每种语言的反射模型都不同,并且有些语言根本不支持反射。Golang语言实现了反射,反射机制就是在运行时动态的调用对象的方法和属性,官方自带的reflect包就是反射相关的,只要包含这个包就可以使用。 多插一句,Golang的gRPC也是通过反射实现的。 interface 和 反射 在讲反射之前,先来看看Golang关于类...阅读全文

博文 2018-02-04 18:10:59 掘金

对Golang interface的理解

理解golang的interface主要在于以下两点: interface是方法的集合 interface是一种类型 简单示例 package main import "fmt" type Animal interface { Speak() string } type Cat struct{} func (c Cat) Speak() string { return "cat" } type Dog struct{} func (d Dog) Speak() string { return "dog" } func Test(params interface{}) { fmt.Println(params) } func main() { animals := []Animal{Cat{}...阅读全文

博文 2017-06-27 13:08:38 GoDev

golang type关键字使用

type是go语法里的重要而且常用的关键字,type绝不只是对应于C/C++中的typedef。搞清楚type的使用,就容易理解go语言中的核心概念struct、interface、函数等的使用。以下我用例子代码总结描述,请特别留意代码中的注释。//1、定义结构体 //结构体定义 type person struct { name string //注意后面不能有逗号 age int } func main() { //结构体初始化 p := person{ name: "taozs", //注意后面要加逗号 age: 18, //或者下面的}提到这儿来可以省略逗号 } fmt.Println(p.name) } //初始化字段不一定要全部指定,比如下面也是可以的,name默认取长度为0的空...阅读全文

博文 2018-12-24 18:31:33 u010008759

golang实现接口类和多态的一种做法

package main import "fmt" type IMessage interface { Print() } type BaseMessage struct { msg string } func (message *BaseMessage) Print() { fmt.Println("baseMessage:msg", message.msg) } type SubMessage struct { BaseMessage } func (message *SubMessage) Print() { fmt.Println("subMessage:msg", message.msg) } func interface_use(i IMessage) { i.Print() }...阅读全文

博文 2015-04-14 11:00:00 miros

golang 接口interface{}、断言、switch type

interface{} 可以接受任何类型的对象值 获取interface{}队形的数据类型,可以使用断言,或者 switch type 来实现 // Assertion project main.go package main import ( "fmt" ) type Bag struct { Key string } type Bag2 struct { Key int } func main() { var b1 interface{} var b2 interface{} b1 = Bag{Key: "1"} b2 = Bag2{Key: 0} //获取interface{}中存放的数据类型 //方法一: { //判断是否是Bag类型 若不是则置0 b, ok := b1.(Bag)...阅读全文

博文 2016-03-03 16:00:01 xia_xing

golang interface 接口的概念及实例

golang的interface并不像其他高级语言在类定义时添加限定作用,而是通过向上转型的方式,在业务代码的上下文中判断结构体(类)是否实现了接口里声明的方法。 type interfact Person { SetName(name string) GetName() string SetAge(age int) GetAge() int } type Boy struct { Name string Age int } func (boy *Boy) SetName(name string) { boy.Name = name } func (boy *Boy) GetName() string { return boy.Name } func (boy *Boy) SetAge(ag...阅读全文

博文 2019-05-16 19:34:38 big_cat

Golang-interface(一 基本使用)

github: https://github.com/ZhangzheBJUT/blog/blob/master/interface.md 一 接口概述 如果说gorountine和channel是支撑起Go语言的并发模型的基石,让Go语言在如今集群化与多核化的时代成为一道亮丽的风景,那么接口是Go语言整个类型系列的基石,让Go语言在基础编程哲学的探索上达到前所未有的高度。 Go语言在编程哲学上是变革派,而不是改良派。这不是因为Go语言有gorountine和channel,而更重要的是因为Go语言的类型系统,更是因为Go语言的接口。Go语言的编程哲学因为有接口而趋于完美。 C++,Java 使用"侵入式"接口,主要表现在实现类需要明确声明自己实现了某个接口。这种强制性的接口继承方式是面向对...阅读全文

博文 2015-06-18 17:04:35 Crazy__Programmer

golang面向对象总结

[plain] view plaincopy type $name struct{ property01 int property02 int } Golang里面的方法和接口都是基于这里type *** struct创建的类型,这里其实可以理解为: [php] view plaincopy class $name { public int property01; public int property02; } 类型就是类。 所以我们说是类型的某个方法,类型实现了某个接口。 类型是属性的集合,接口是方法的集合 函数的定义:func $funcName ( ) ( ){} 方法的定义:func ( ) $funcName ( ) ( ){} Func (成员变量 类型) funname(局部...阅读全文

博文 2015-06-17 20:02:17 erlang_team

golang 坑集

func main() { x := 1 defer func(a int) { fmt.Println("a=", a) }(x) defer func() { fmt.Println("x=", x) }() x++ } 结果: x=2 a=1 说明: defer 调用所需参数在 defer 语句执行时就被已计算好了 (拷贝传递),闭包内则是引用,defer执行顺序FIFO 数组和slice 数组是值类型 slice是引用类型, 数组的创建 arr:=[...]int{1,2,3} arr:=[3]int{} arr:=new([10]int) (注意new返回的是[10]int的指针类) slice的创建 slice:=[]int{1,2,3} slice:=arr[n:m]( n <...阅读全文

博文 2014-10-04 19:27:11 健哥大人

Go 方法、接口

在 Go 中,类型可以定义接收此类型的函数,即方法。每个类型都有接口,意味着对那个类型定义了方法集合。 下面定义了结构体类型 S 以及它的两个方法: type S struct { i int } func (p *S) Get() int { return p.i } func (p *S) Put(v int) { p.i = v } 方法 方法就是有接收者的函数。 可以在除了非本地类型(包括内建类型,比如 int)的任意类型上定义方法。然而可以为内建类型定义别名,然后就可以为别名定义方法。如 type Foo int // 为 int 定义别名 Foo func (self Foo) Emit() { fmt.Printf("%v", self) } 接口 接口定义为一个方法的集合。方...阅读全文

Go语言的类型转换和类型断言

类型转换和类型断言是Go语言中比较绕的地方. Go语言要求所有统一表达式的不同的类型之间必须做显示的类型转换. 而作为Go语言鼻祖的C语言是可以直接做隐式的类型转换的. 当然作为const类的字面值常量是要灵活很多的. 不过Go语言必须做显示的类型转换的要求也有例外的情况: 当普通T类型变量向I接口类型转换时是隐式的! 当IX接口变量向I接口类型转换可以在编译期完成时是隐式的! 类型之间转换的例子 下面是Go语言规范给出的部分例子: *Point(p) // same as *(Point(p)) (*Point)(p) // p is converted to *Point <-chan int(c) // same as <-(chan int(c)) (<-chan int)(c) /...阅读全文

博文 2015-05-18 12:37:04 chai2010

Go Reflect

最近在看一些go语言标准库以及第三方库的源码时,发现go的reflect被大量使用,虽然反射的机制大多数语言都支持,但好像都没有go一样这么依赖反射的特性。个人觉得,reflect使用如此频繁的一个重要原因离不开go的另一个特性,空接口interface{},reflect配合空接口,让原本是静态类型的go具备了很多动态类型语言的特征。 另外,虽然反射大大增加了go语言的灵活性,但要完全掌握它的原理和使用也还是有一点难度的。 go的reflect库有两个重要的类型: reflect.Type reflect.Value Type,Value分别对应对象的类型和值数据 还有两个重要的函数: reflect.TypeOf(i interface{}) Type reflect.TypeOf()返...阅读全文

博文 2014-10-11 10:15:04 kenshin

golang type 和断言 interface{}转换

摘要 类型转换在程序设计中都是不可避免的问题。当然有一些语言将这个过程给模糊了,大多数时候开发者并不需要去关 注这方面的问题。但是golang中的类型匹配是很严格的,不同的类型之间通常需要手动转换,编译器不会代你去做这个事。我之所以说通常需要手动转换,是 因为interface类型作为一个特例,会有不同的处理方式。 类型转换在程序设计中都是不可避免的问题。当然有一些语言将这个过程给模糊了,大多数时候开发者并不需要 去关注这方面的问题。但是golang中的类型匹配是很严格的,不同的类型之间通常需要手动转换,编译器不会代你去做这个事。我之所以说通常需要手动转 换,是因为interface类型作为一个特例,会有不同的处理方式。 golang中的所有类型都有自己的默认值,对此我做了个测试。 $GOP...阅读全文

博文 2016-07-05 05:00:10 zhangym

Golang笔记-浅谈interface

前言 class和interface在高级语言中是很重要的概念。class是对模型的定义和封装,interface则是对行为的抽象和封装。Go语言虽然没有class,但是有struct和interface,以另一种方式实现同样的效果。 本文将谈一谈Go语言这与别不同的interface的基本概念和一些需要注意的地方。 声明interface type Birds interface { Twitter() string Fly(high int) bool } 上面这段代码声明了一个名为Birds的接口类型(interface),这个接口包含两个行为Twitter和Fly。 Go语言里面,声明一个接口类型需要使用type关键字、接口类型名称、interface关键字和一组有{}括起来的方法声...阅读全文

博文 2018-08-19 19:34:46 tinywell

golang: 详解interface和nil

golang的nil在概念上和其它语言的null、None、nil、NULL一样,都指代零值或空值。nil是预先说明的标识符,也即通常意义上的关键字。在golang中,nil只能赋值给指针、channel、func、interface、map或slice类型的变量。如果未遵循这个规则,则会引发panic。对此官方有明确的说明:http://pkg.golang.org/pkg/builtin/#Type golang中的interface类似于java的interface、PHP的interface或C++的纯虚基类。接口就是一个协议,规定了一组成员。这个没什么好说的,本文不打算对宏观上的接口概念和基于接口的范式编程做剖析。golang语言的接口有其独到之处:只要类型T的公开方法完全满足接口...阅读全文

博文 2014-11-20 22:00:00 kai_ding

go post json 遇到的问题

想用go写一个客户端,发一个JSON数据到JAVA的服务端接口, 结果,JAVA接收的BODY一直是空,但是PYTHON写的服务端是OK的 网上查了方法 其中:一些方法 也试过了, type RequestBody struct { Status string `json:"status"` Region []string `json:"region"` Percent string `json:"percent"` Task_id string `json:"task_id"` } b, err := json.Marshal(rbody) body := bytes.NewBuffer([]byte(b)) (1) resp, err := http.Post(url, "applica...阅读全文

博文 2015-09-18 15:00:01 vance928

Golang基本类型整理

总是用的用的就模糊了,不知道基本的类型有哪些,看来要反反复复弄几次。 Golang基本类型整理 基本类型以及定义变量需要注意的 对于基本类型的介绍,感觉这个博客讲的比较透彻,基本上都是从源码的角度来入手分析的,自己并没有理解到这么深入的程度,这里跟着文章过一下,挑一些主要的部分记录一下。在go语言中,数据类型分为静态类型和底层类型,感觉底层类型是golang实现的时候所使用的c语言的类型,而静态类型仅仅是针对于go语言本身而言所定义好的类型。具体的信息可以查看$GOROOT/src/runtime/runtime.h 可以看到golang中的byte类型,通过typedef uint8 byte来定义,这样在golang中直接使用反射 package main import ( "fmt" ...阅读全文

博文 2015-06-23 03:00:00 Goden

golang 组合和接口

一,组合 golang 中一切 皆是类型 这个和 面向对象的 概念有点像 ,但是又不太像,和javascript倒是有些相似之处 那么如何实现 像 Java中的 继承呢,golang使用的是组合 请看代码 和 运行输出 说明一切 type father struct { name string sex int } type sun struct { father name string } func main() { s:=sun{father:father{name:"father",sex:11},name:"sun"} fmt.Println(s) fmt.Println("name",s.name) fmt.Println("name",s.father.name) fmt.Prin...阅读全文

博文 2016-04-11 14:00:03 lzp2011150309

golang中的类和接口的使用

类使用:实现一个people中有一个sayhi的方法调用功能,代码如下: type People struct { //.. } func (p *People) SayHi() { fmt.Println("************************* say hi !!") } func (this *LoginController) Get() { p := new(People) p.SayHi() this.TplName = "login.html" } 接口使用:实现上面功能,代码如下: type People struct { //.. } func (p *People) SayHi() { fmt.Println("*************************...阅读全文

博文 2016-04-26 01:00:00 vipstone

golang: 类型转换和类型断言

类型转换在程序设计中都是不可避免的问题。当然有一些语言将这个过程给模糊了,大多数时候开发者并不需要去关注这方面的问题。但是golang中的类型匹配是很严格的,不同的类型之间通常需要手动转换,编译器不会代你去做这个事。我之所以说通常需要手动转换,是因为interface类型作为一个特例,会有不同的处理方式。 golang中的所有类型都有自己的默认值,对此我做了个测试。 $GOPATH/src ----typeassert_test --------main.go main.go的代码如下: package main import ( "fmt" ) type myStruct struct { name bool userid int64 } var structZero myStruct v...阅读全文

博文 2014-10-04 19:26:57 陈一回

golang interface赋值

说说我对golang的interface赋值的理解。 先说golang中类型方法定义。 如 type bird struct { id int } func (b bird) fly() { fmt.Println("fly") } func (b *bird) eat() { b.id++ } 中bird类型有两个方法,fly和eat。 两个方法是有区别的,fly由(b bird)绑定,eat由(b *bird)绑定。 在应用中,(b *bird)绑定方式可以修改对象中的参数,而(b bird)方式则不可以。 再来说接口的赋值。接口赋值可以分为对象对接口的赋值和接口对接口的赋值。 对象对接口的赋值需要对象完全实现接口定义的所有方法。 如定义如下接口 type animal interfac...阅读全文

博文 2015-06-17 20:02:23 iwbno1

更优雅的 Golang 错误处理

Golang 中的错误处理是一个被大家经常拿出来讨论的话题(另外一个是泛型)。其中泛型这个问题,rsc 在最近的计划中也提出了纳入他今年的考虑计划中,同时,泛型的提案在2016年也进行了一些更新,相信未来会有一些更好的方案提出。这个文章我们讨论一下如何在现行的 Golang 框架下提供更友好和优雅的错误处理。 从现状谈起 Golang 中的错误处理原则,开发者曾经之前专门发布了几篇文章( Error handling and Go 和 Defer, Panic, and Recover、Errors are values )介绍。分别介绍了 Golang 中处理一般预知到的错误与遇到崩溃时的错误处理机制。 一般情况下,我们还是以官方博客中的错误处理例子为例: func main() { f,...阅读全文

博文 2017-02-10 07:42:04 kevin

golang sort 包使用,及三个简单排序算法冒泡,插入,选择 练习

sort 包的核心类型是 sort.Interface: type Interface interface { // Len is the number of elements in the collection. Len() int // Less reports whether the element with // index i should sort before the element with index j. Less(i, j int) bool // Swap swaps the elements with indexes i and j. Swap(i, j int) } 接口 是golang 的很cool 的特性,rob pike 说接口有点类似uinx pipe,把...阅读全文

博文 2015-01-22 17:00:11 yujian0231

golang reflect

golang reflect go语言中reflect反射机制。详细原文:地址 接口值到反射对象 package main import ( "fmt" "reflect" ) func main() { var x int = 1 fmt.Println("type: ", reflect.TypeOf(x)) } type: int TypeOf函数的定义如下,参数为接口类型,返回值为类型 func TypeOf(i interface {}) Type ValueOf函数的定义如下,参数为接口类型,返回值为Value var x int = 1 fmt.Println("value: ", reflect.ValueOf(x)) value: 可以通过Kind函...阅读全文

Golang中的类型和类型断言

#### golang中的类型 golang中的有两种类型,**静态类型(static type)**和**动态类型(dynamic type)** **静态类型**:静态类型是在声明变量的时候指定的类型,一个变量的静态类型是永恒不变的,所以才被称为静态类型,也可以简称为类型,普通变量只有静态类型。 ``` package main import "fmt" func main() { // 变量i和变量g只有静态类型,变量i的类型为int,i的类型为main.Goose, var i int var g Goose fmt.Printf("%T\n", i) fmt.Printf("%T\n", g) } type Goose struct { age int name string } ...阅读全文

博文 2019-04-26 17:14:08 LeeYubo

goLang 类型断言 type assertion

goLang有类型转换/类型断言/类型切换 1.类型断言 类型断言就是将接口类型的值(x),装换成类型(T)。格式为: x.(T) v:=x.(T) v,ok:=x.(T) 类型断言的必要条件就是x是接口类型,非接口类型的x不能做类型断言: var i int=10 v:=i.(int) //错误 i不是接口类型 T可以是非接口类型,如果想断言合法,则T应该实现x的接口 T也可以是接口,则x的动态类型也应该实现接口T var x interface{}=7 //x的动态类型为int,值为7 i:=x.(int) // i的类型为int ,值为7 type I interface {m()} var y I s:=y.(string) //非法: string 没有实现接口 I (missin...阅读全文

博文 2018-02-05 15:34:42 soledad

golang excel

github.com/tealeg/xlsx 封装的接口简单易用 package main import ( "bufio" "fmt" "github.com/tealeg/xlsx" "os" "strings" ) func main() { if len(os.Args) != 3 { fmt.Printf("Usage : %s inFile outFile\n", os.Args[0]) return } inFileName := os.Args[1] outFileName := os.Args[2] inFh, err := os.OpenFile(inFileName, os.O_RDONLY, 0755) if err != nil { fmt.Printf("open...阅读全文

博文 2015-04-04 03:00:00 rojas

GO 语言接口与结构体 - interface & struct

interface & struct 接口与结构体 以继承为特点的 OOP 只是编程世界的一种抽象方式,在 Golang 的世界里没有继承,只有组合和接口,并且是松散的接口结构,不强制声明实现接口,这看起来更符合 Java 之父 Gosling 的设想。 If it looks like a duck, swims like a duck, and quacks like a duck, then it probably is a duck. 翻译过来就是:如果某个东西长得像鸭子,像鸭子一样游泳,像鸭子一样嘎嘎叫,那它就可以被看成是一只鸭子。 单一继承关系解决了 is-a 也就是定义问题,因此可以把子类当做父类来对待。但对于父类不同但又具有某些共同行为的数据,单一继承就不能解决了,C++ 采...阅读全文

博文 2019-08-02 22:32:40 坚果jimbowhy

关于《我为什么放弃Go语言》的讨论

CSDN 上有一篇文章 [《我为什么放弃Go语言》](http://blog.csdn.net/liigo/article/details/23699459),在 golang-china 讨论组引发了一些讨论,为了便于墙内 gopher 们阅读,选择了一些有价值的评论发在这里。(重点关注 minux 大神的回复) 刘鑫: 无所谓啦,本来就是个工具语言,没必要人人都去拜。对自己好用,就用实际行动来支持,这不比打嘴炮好多了。从来没有一门编程语言能让所有人都满意。何况人家文章里有些东西写的还是挺有道理。特别是社区的态度问题。去年我说某IDE的插件不能识别不可达的逻辑,一大群人出来教育我说go语言本来就这么设计的。只有巢鹏一个人的博客上写着这是go官方2009年就明明白白列出来的一个...阅读全文

golang 字典map

当在哈希表中查找某个与键值对应的元素值时,我们需要先把键值作为参数传给这个哈希表。哈希表会先用哈希函数(hash function)把键值转换为哈希值。  哈希值通常是一个无符号的整数。一个哈希表会持有一定数量的桶(bucket),也可称之为哈希桶,这些哈希桶会均匀地储存其所属哈希表收纳的那些键-元素对。  因此,哈希表会先用这个键的哈希值的低几位去定位到一个哈希桶,然后再去这个哈希桶中,查找这个键。由于键-元素对总是被捆绑在一起存储的,所以一旦找到了键,就一定能找到对应的元素。  随后,哈希表就会把对应的元素值作为结果返回。只要这个键-元素对存在于哈希表中就一定会被查找到,因为哈希表增、改、删键-元素对时候的映射过程,跟上面描述的一样。  也就是说,字典map不会独立存储任何键的值,但会独...阅读全文

博文 2018-09-27 23:34:42 one_zheng

golang学习的点点滴滴:接口复制和接口查询

package main import "fmt" type IFile interface { Read() Write() } type IReader interface { Read() } type File struct { } func (f *File) Read() { } func (f *File) Write() { } func main() { f := new(File) var f1 IFile = f // ok 因为FIle实现了IFile中的所有方法 var f2 IReader = f1 // ok 因为IFile中包含IReader中所有方法 // var f3 IFile = f2 // error 因为IReader并不能满足IFile(少一个方...阅读全文

博文 2014-10-04 19:27:40 亓斌哥哥

不得不知道的golang知识点之nil

golang中的`nil`,很多人都误以为与Java、PHP等编程语言中的null一样。但是实际上Golang的niu复杂得多了,如果不信,那我们继续往下阅读。 `nil` 为预声明的标示符,定义在`builtin/builtin.go`, ``` // nil is a predeclared identifier representing the zero value for a // pointer, channel, func, interface, map, or slice type. // Type must be a pointer, channel, func, interface, map, or slice type var nil Type // Type is he...阅读全文

博文 2017-10-30 09:39:45 qiangmzsx

Go的类型断言解析

经常地我们对一个接口值的动态类型是不确定的,如方法的形参为接口类型时,此时就需要检验它是否符合我们需要的类型。类型断言是一个使用在接口值上的操作。 如果对Golang的接口和接口值的概念不熟悉,看这里:Go的接口总结断言类型的语法:x.(T),这里x表示一个接口的类型,T表示一个类型(也可为接口类型)。一个类型断言检查一个接口对象x的动态类型是否和断言的类型T匹配。 类型断言分两种情况:第一种,如果断言的类型T是一个具体类型,类型断言x.(T)就检查x的动态类型是否和T的类型相同。 如果这个检查成功了,类型断言的结果是一个类型为T的对象,该对象的值为接口变量x的动态值。换句话说,具体类型的类型断言从它的操作对象中获得具体的值。 如果检查失败,接下来这个操作会抛出panic,除非用两个变量来接...阅读全文

博文 2017-10-20 08:06:27 susufufu

golang 类型断言

golang类型断言 类型断言是一个使用在接口值上的操作 有时候,我们可能需要知道某个接口类型的实际类型,比如某个方法需要接收多种类型的数据并需要做分别处理,我们可以把形参设为空接口类型并接收任意类型的值,但是我们怎么反向知道里面实际保存的是哪个类型的对象呢? Comma-ok 断言 语法 value,ok := x.(T) x表示一个接口的类型,T表示一个类型(也可为接口类型) 该断言表达式会返回x的值和一个布尔值 可根据该布尔值判断x是否为T类型 如: func main() { var x interface{} x = 10 value, ok := x.(int) f...阅读全文

一个简单GOLANG路由

package controllers import ( . "logger" "web" ) //对象继承直接拥用REST标准接口 type login struct { web.ControllerBase } func (this *login) Get() { this.Template["key"] = "value" this.WriteString("GET:", this.Template) } func (this *login) Post() { this.WriteString("POST:", this.Template) } //对象不继承注册一个方法到路由 type signOut struct { } func (this *signOut) signOutGe...阅读全文

博文 2015-06-17 20:18:49 x_focus

Golang中的Interface(接口)

Go语言中的interface没有强制要求实现方法,但是interface是go中非常强大的工具之一。任一类型都可以实现interface中的方法,interface中的值可以代表是各种类型的值,这就是Go中实现多态的基础 什么是接口 interface就是字面意思——接口,C++中可以用虚基类表示;Java中就是interface。 我们之前在结构体和方法的博文中提到了很多有关于对象和属性的知识点。而interface则使Golang更接近面向对象编程范式的另一个难点 interface是方法签名的一个集合,这些方法可以被任一类型通过方法实现。因此接口就是对象行为的申明(不是定义,仅仅表示方法签名,也可以称作函数原型)。 ????注意:我多次强调 任一类型 ,Golang中所有类型都可以实...阅读全文

博文 2020-03-27 01:32:55 EriolSoong

GO语言Comma-ok断言

Comma-ok断言的语法是:value, ok := element.(T)。element必须是接口类型的变量,T是普通类型。如果断言失败,ok为false,否则ok为true并且value为变量的值。来看个例子: package main import ( "fmt" ) type Html []interface{} func main() { html := make(Html, 5) html[0] = "div" html[1] = "span" html[2] = []byte("script") html[3] = "style" html[4] = "head" for index, element := range html { if value, ok := elem...阅读全文

博文 2016-08-16 10:00:22 alvine008

golang中的接口与继承

接口 interface是关键字; 接口的力量:interface是只要你实现了接口定义的类型(方法),就可以作为接口的实例拿来用,在语言层面上不再需要其它的约束。 继承 在结构体中嵌入匿名类型成员,就可以继承匿名类型的方法。 不仅可以嵌入匿名类型成员,还可以嵌入匿名的接口,或者匿名的指针对象,是一种纯虚继承,继承的只是接口的规范,而实现还得靠自己...阅读全文

博文 2019-02-10 21:34:44 areece

io.EOF设计的缺陷和改进

## 1. 认识io.EOFio.EOF是io包中的变量, 表示文件结束的错误:```gopackage iovar EOF = errors.New("EOF")```也通过以下命令查看详细文档:```$ go doc io.EOFvar EOF = errors.New("EOF")EOF is the error returned by Read when no more input is available. Functionsshould return EOF only to signal a graceful end of input. If the EOF occursunexpectedly in a structured data stream, the appropria...阅读全文

博文 2019-05-14 17:08:24 光谷码农

Golang 接口

结构体通过实现接口中定义的方法来实现接口。 简单入门 package main import "fmt" type Phone interface { call(name string) } type Person struct { Name string } //方法 func (p *Person) Test2(newName string) string { p.Name = newName return p.Name } //接口 func (p Person) call(name string) string { return p.Name + "打电话给" + name } func main() { p1 := Person{"abc"} str := p1.call("xyz...阅读全文

博文 2018-06-07 15:30:02 -beyond

GO语言的接口类型

摘要: 1、什么是接口? 在面向对象的语言中,接口是用来限制实现类行为的。怎么理解这句话呢? 定义一个Person接口,我只会站在我的角度上考虑问题,比如Person(人),自然想到会吃饭、睡觉等: interface Person { // 人会吃饭 void eat(); // 人会睡觉 void sleep(); } 我是站在接口角度上考虑接口如何定义,此时不会过多考虑实现类的行为。 1、什么是接口? 在面向对象的语言中,接口是用来限制实现类行为的。怎么理解这句话呢? 定义一个Person接口,我只会站在我的角度上考虑问题,比如Person(人),自然想到会吃饭、睡觉等: interface Person { // 人会吃饭 void eat(); // 人会睡觉 void sleep...阅读全文

博文 2019-05-22 22:20:49 8588ll

golang中 方法集的概念,你了解么?

go规范中提到过方法集的概念,你了解么?下面的代码输出结果是啥? package main import "fmt" type t1 int type t2 int func( t *t1) String() string { return "ptr" } func( t t2) String() string { return "val" } func main() { var a t1 var b t2 a = 5 fmt.Println( a, b) } 结果分析: 指针的方法集包括两部分:(t *T)这样的方法和(t T)这样的方...阅读全文

golang中使用kafka

golang中比较好用的kafka client有 sarama confluent-kafka-go go_kafka_client optiopay-kafka siesta 其中 sarama的使用者应该是最多的, 然后还有一个sarama的cluster版本sarama-cluster 本文简单描述下sarama的一些简单使用 生产者接口 func producer_test() { fmt.Printf("producer_test\n") config := sarama.NewConfig() config.Producer.RequiredAcks = sarama.WaitForAll config.Producer.Partitioner = sarama.NewRand...阅读全文

博文 2018-09-29 18:34:37 yandaren

Go语言的接口和实现类初探(二)

扩展 上一篇讲了实现一个接口里的全部方法。 如果实现多个接口,也是很简单的,同理把他的方法实现了就行。 背景: 有一个动物的接口,他有吃和跑的动作,突然来一只鸟的动物,呀,它还会飞。 如果我们修改接口动物加上飞的动作,这样会让狗也要飞了。所以,我们把接口的方法都单独另出来。 package main import ( "fmt" ) //飞的接口 type IFly interface { Fly() } //吃的接口 type IEat interface { Eat() } //跑的接口 type IRun interface { Run() } //狗的实现类 type Dog struct { name string } func (dog *Dog) Eat() { fmt.Pri...阅读全文

博文 2015-06-17 23:07:41 Libra412

Go语言的接口和实现类初探(一)

1.引入 接口泛指实体把自己提供给外界的一种抽象化物(可以为另一实体),用以由内部操作分离出外部沟通方法,使其能被修改内部而不影响外界其他实体与其交互的方式。(来源于百度百科) 2.其他语言的接口 java的接口 public interface Animal {//定义接口 void eat(); } public class Dog {//与接口里的方法名相同,但并未实现Animal接口 void eat() { } } public class Cat implements Animal {//实现了Animal接口,并且eat方法必须存在 @Override void eat() { } }3.Go语言的接口 package main import ( "fmt" ) //定义一个接...阅读全文

博文 2015-06-17 23:00:49 Libra412