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

Go 系列教程 —— 19. 接口(二)

欢迎来到 Golang 系列教程的第 19 个教程。接口共有两个教程,这是我们第二个教程。如果你还没有阅读前面的教程,请你阅读[接口(一)](https://studygolang.com/articles/12266)。 ### 实现接口:指针接受者与值接受者 在[接口(一)](https://studygolang.com/articles/12266)上的所有示例中,我们都是使用值接受者(Value Receiver)来实现接口的。我们同样可以使用指针接受者(Pointer Receiver)来实现接口。只不过在用指针接受者实现接口时,还有一些细节需要注意。我们通过下面的代码来理解吧。 ```go package main import "fmt" type Describer int...阅读全文

博文 2018-02-01 15:44:37 heyulong

GO语言结构体方法跟结构体指针方法的区别

首先,我定了三个接口、一个结构和三个方法: type DeptModeA interface { Name() string SetName(name string) } type DeptModeB interface { Relocate(building string, floor uint8) } type Dept struct { name string building string floor uint8 Key string } func (self Dept) Name() string { return self.name } func (self Dept) SetName(name string) { self.name = name } func (self *D...阅读全文

博文 2017-01-18 16:00:08 tree2013

DockOne技术分享(五十七):Docker容器对存储的定义(Volume 与 Volume Plugin)

【编者的话】Docker技术自从诞生以来已经带来了一场云计算的革命。其进展速度之快,接受程度之高让人惊叹。国内已经有不少介绍Docker技术的文章,它的生态,网络,管理,构建,应用都有方方面面的资料。然而,要想在生产环境中部署Docker,开发运维人员必须还要明白docker容器是如何使用存储(包括外部存储),才能更好地为容器选择合适的存储方案。本次交流与大家分享Docker对存储的定义的来龙去脉。 @Container容器技术大会将于6月4日在上海光大会展中心国际大酒店举办,来自Rancher、携程、PPTV、蚂蚁金服、京东、浙江移动、海尔电器、唯品会、eBay、道富银行、麻袋理财、土豆网、阿里百川、腾讯游戏、数人云、点融网、华为、轻元科技、中兴通讯等公司的技术负责人将带来实践经验分享,5...阅读全文

博文 2017-06-25 16:24:59 jiangsong

golang中所谓的”方法提升“,求解答。。。。

如果 S 包含一个匿名字段 T,S 的方法集不包含接受者为 *T 的方法提升。 这条原则说的是当我们嵌入一个类型,嵌入类型的接受者为指针的方法将不能被外部类型的值访问。 刚才在golang中国博客上看到这个说法,自己验证了后发现完全可以访问,哪位高手能解释下,期待ing........阅读全文

新一轮.tt域名抢注狂潮,你准备好了吗?

tt域名是特立尼达和多巴哥国家的顶级域名,tt域名是目前开放的位数不多的“双胞胎”域名后缀之一,由于先天优势,使得tt域名更容易被广大用户所记住,因此tt域名的市场接受程度非常高,在国际互联网上使用tt域名作为企业网站域名的比例也在不断攀升,随之也促进了域名投资者对tt域名的青睐。 锤子科技成功从一个网友手上购得t.tt域名,收购价不详,但据此网友声称为10几万。虽然称不上天价,但这个域名还是意义非凡。 ![截图.jpg](http://studygolang.qiniudn.com/170111/d1fd32300cb45213eb49e27e1d4dd61b.jpg) tt域名还有哪些含义? tt域名有天天、团团、听听、铁通等多层含义,奇特色就是很容易让广大网名记...阅读全文

云计算学习需要多长时间呢?云计算是什么?

云计算,是大家都比较熟悉的,经过最近几年的发展,云计算已经获得了很大的关注和重视,吸引了越来越多人的眼球和关注,也有不少人的想要学习linux云计算。 但是对于零基础的人员来说,根本不知道什么是云计算?其实简单的来说,云计算就是一种资源交付、使用模式,通过网络获得应用所需要的资源,提供资源的网络叫做云,云中可以进行无线的拓展,随时可以进行获取的。 可以按需进行购买,就好比百度云盘一样,属于云计算里面的公有云。那么云计算听起来复杂,学习会很难吗?学习周期是多长? 其实从划分上来说,云计算分为了公有云、私有云、混合云等多种,不给大家一一讲解这三种的具体表现,但是大家一定要记住,云计算运维相对于编程语言来说,更容易入门,也非常容易掌握,对于零基础的人员来说是非常不错的选择。 对比编程语言来说,编程...阅读全文

博文 2019-11-13 16:34:15 zhouzhou2018

golang 值接收者和指针接收者

interface_值接收者_指针接收者.png 例子 package main import "fmt" //定义一个 anial 接口类型 type anial interface { move() } type cat struct { name string feet int } type dog struct { name string feet int } // 采用值接受者,参数可以传递结构体类型和结构体指针类型 //func (c cat)move() { // fmt.Printf("%s,走猫步\n", c.name) //} // //func (d dog)move() { // fmt.Printf("%s,走狗步\n", d.name) //} // 采用指针接受...阅读全文

博文 2020-04-09 00:32:51 小麦客

第十三天:golang学习笔记之encoding

★encoding | encoding包定义了供其它包使用的可以将数据在字节水平和文本表示之间转换的接口. 编码在之前一直是一个重大问题,更可读的?效率更高的?轻量级的?重量级的?多种编码类型共存。 encoding encoding定义了四个接口(并没有多少对象去实现,甚至目录下的子包): // 实现了本接口的对象可以把自身编码为二进制,并作为返回值返回 type BinaryMarshaler interface { MarshalBinary() (data []byte, err error) } // 实现了本接口的对象可以把二进制编码为自身,接受者应该为指针,传参应该是TextMarshaler生成的二进制 type BinaryUnmarshaler interface { ...阅读全文

博文 2019-12-28 21:32:41 Macmillan_

golang flag用法

基本函数说明 //生成命令行参数对应的变量,变量为指针类型 var name = flag.String("name", "Tom", "Input your name") var age = flag.Int("age", 18, "Input your age") var vip = flag.Bool("flag", true, "Is VIP") 其中"name","age","flag"对应在命令行中通过如下格式指定参数 -name=Jack -name Jack --name=Jack --name Jack //定义值类型的命令行参数变量,xxxVar对其进行初始化。可以为Int,String,Bool var postCode int flag.IntVar(&postCod...阅读全文

博文 2019-11-06 18:32:44 麦穗儿

golang函数方法

定义 Go 语言中同时有函数和方法。一个方法就是一个包含了接受者的函数,接受者可以是命名类型或者结构体类型的一个值或者是一个指针。所有给定类型的方法属于该类型的方法集。语法格式如下: func (variable_name variable_data_type) function_name() [return_type]{ /* 函数体*/ } package main import "fmt" type Circle struct { radius float64 } func main() { var c Circle c.radius = 10 fmt.Println("圆的面积 = ", c.getArea()) } func (c Circle) getArea() float64...阅读全文

博文 2019-12-31 06:32:42 程序小白菜

go 方法接受者 是指针类型和非指针类型的 区别

go 方法接受者 是指针类型和非指针类型的 区别 非指针类型 package main import "fmt" // 定义接口 type Car interface { GetName() string Run() } // 定义结构体 type Tesla struct { Name string } // 实现接口的GetName()方法 func (t Tesla) GetName() string { t.Name = "test" return t.Name } // 实现接口的Run()方法 func (t Tesla) Run() { fmt.Printf("%s is running\n", t.Name) } func main() { var c Car var t T...阅读全文

博文 2018-12-25 22:35:13 295631788

golang 动态查找类型实例

关键字func和函数名之间的参数被称为receiver(接收者),将函数与接收者的类型绑在一起。如果一个函数有接收者,这个函数被称为method。不同的receiver,method可以同名这里采用封装的方法进行简述方法的妙用先看一下注册路由的方式rest.Post("/user/login", common.MakeHandler(&user.login{}))MakeHandler的方法如下,返回了一个HandlerFuncfunc MakeHandler(h Handler) rest.HandlerFunc { return func(w rest.ResponseWriter, r *rest.Request) { common_handler(w, r, h) } }具体comm...阅读全文

goang Receiver & interface

package main import ( "fmt" ) type Pointer struct { x string } func (this *Pointer) PrintX() { fmt.Printf("X:%s\n", this.x) } func (this *Pointer) SetX(str string) { this.x = str } type Value struct { x string } func (this Value) PrintX() { fmt.Printf("X:%s\n", this.x) } func (this Value) SetX(str string) { this.x = str } func main() { p1 := Pointe...阅读全文

博文 2016-01-19 03:00:01 diegodu

Go 语言方法接受者类型的选择

概述 很多人(特别是新手)在写 Go 语言代码时经常会问一个问题,那就是一个方法的接受者类型到底应该是值类型还是指针类型呢,Go 的 wiki 上对这点做了很好的解释,我来翻译一下。 何时使用值类型 如果接受者是一个 map,func 或者 chan,使用值类型(因为它们本身就是引用类型)。如果接受者是一个 slice,并且方法不执行 reslice 操作,也不重新分配内存给 slice,使用值类型。如果接受者是一个小的数组或者原生的值类型结构体类型(比如 time.Time 类型),而且没有可修改的字段和指针,又或者接受者是一个简单地基本类型像是 int 和 string,使用值类型就好了。 一个值类型的接受者可以减少一定数量的垃圾生成,如果一个值被传入一个值类型接受者的方法,一个栈上的拷...阅读全文

博文 2016-03-23 15:00:01 kai_ding

Ethereum学习笔记(一)

相关命令分析 eth.blockNumber 查看当前块高。 eth.getBlock() 根据高度查看块内容。 eth.syncing 获取同步状态,可以看到全网最新块高,提示用户同步进度。 区块分析 创世区块: { difficulty: 17179869184, extraData: "0x11bbe8db4e347b4e8c937c1c8370e4b5ed33adb3db69cbdb7a38e1e50b1b82fa", gasLimit: 5000, gasUsed: 0, hash: "0xd4e56740f876aef8c010b86a40d5f56745a118d0906a34e69aec8c0db1cb8fa3", logsBloom: "0x0000000000000000...阅读全文

博文 2017-10-26 10:04:44 慢性咽炎患者

golang实现简易的分布式系统

功能 能够发送/接收请求和响应 能够连接到集群 如果无法连接到群集(如果它是第一个节点),则可以作为主节点启动节点 每个节点有唯一的标识 能够在节点之间交换json数据包 接受命令行参数中的所有信息(将来在我们系统升级时将会很有用) 源码 package main import ( "fmt" "strconv" "time" "math/rand" "net" "flag" "strings" "encoding/json" ) // 节点数据信息 type NodeInfo struct { // 节点ID,通过随机数生成 NodeId int `json:"nodeId"` // 节点IP地址 NodeIpAddr string `json:"nodeIpAddr"` // 节点端口 ...阅读全文

博文 2018-10-07 12:34:42 小马哥_Magical

Golang模仿七牛图片处理API

之前一直在用qiniu的存储服务,生成图片的缩略图,模糊图,视频的webp,现在需要把存储移到s3上,那么这些图片,视频处理就要自己动手写了,本文梳理一下大致的思路。 分析需求 先看一下qiniu的接口是如何处理图片的,例如先截取视频第一秒的图片,再把图片缩略,最后存储到一个新的key,命令可以这么写 vframe/jpg/offset/1|imageMogr2/thumbnail/400x|saveas/xxx, 可以看到三个操作之间用 | 符号分割,类似unix 的 pipe 操作。 上面的操作算作一个cmd, 一次API请求可以同时处理多个cmd,cmd之间用分号分割, 处理完毕后,在回调中把处理结果返回,例如 { "id": "xxxxx", "pipeline": "xxx", "...阅读全文

博文 2017-02-09 08:29:46 一堆好人卡

GO语言学习-方法和接口

方法: 指包含了接受者的函数,接受者可以是命名类型或者结构体类型的一个值或者是一个指针。 例: type Food struct{ color string taste string } func ( fruit Food) Eat() string { return fmt.Sprintf("%v,%v)", fruit.color, fruit.taset) } Food为结构体类型,Eat为Food类型的方法, Eat方法的接受者是Food类型的值(或指针 func ( fruit * Food) Eat() string)。 apple := Food{"red", "sweet"} 或 apple := &Food{"red", "sweet"} 方法使用 apple.Eat() ...阅读全文

博文 2015-06-17 23:02:27 phlong999

go_工作池

```golang package main import ( "fmt" "time" ) // 在这个例子中,我们将看到如何使用goroutine 和channel实现一个_工作池_ // 工作池是我们将要在并发实例中支持的任务了,这些执行者将从`jobs`通道接受任务, // 并且通过`result`发送对应的结果。 // 工作池 func worker(id int, jobs <-chan int, result chan<- int) { for j := range jobs { fmt.Println("worker : ", id, "processing job ", j) time.Sleep(time.Second * 2) // 构建耗时2s的任务 result <...阅读全文

博文 2018-06-12 17:10:57 18393910396

go语言实现接口,接受者应该是传值还是传引用(传引用兼容传值)

/* go语言中给接口赋值的时候,对象如果是值(对于引用的接受者处理不了) 如果是指针,则可以自动实现值的处理 */ package main import "fmt" //定义Integer类型 type Integer int type LessAddInf interface{ Less(n Integer) bool Add(n Integer) Integer } func (this Integer) Less(n Integer) bool{ return this < n } func (this *Integer) Add(n Integer) Integer{ *this += n return *this } type Computer struct{ CPU stri...阅读全文

博文 2016-10-27 15:00:03 davidsu33

GO面向对象:method

method的语法如下: func (r ReceiverType) methodName(parameters) (results) go中的method是附属在一个给定的类型上的,他的语法和函数的声明语法几乎一样,只是在方法名之前增加了一个receiver,也就是method所依附的主体(可以面向对象中的对象理解) 例如下面的例子: type Box struct { width, heigh, depth float64 } func (b Box) Volume() float64 { return b.width * b.heigh * b.depth } func main(){ b:=Box{4,4,4} volume:=b.Volume() } Volume这个method是...阅读全文

博文 2016-01-29 18:00:01 fzk2008

golang 基础(29) 接口

square-gopher.png 在 go 语言接口更重视使用者,使用者是否承认和使用接口才是重要的,这里定义 Retriever 接口提供 Get 方法,所有具有 Get 方法的都可以认为是接口 package main import ( "fmt" "com.zidea/util/mock" ) type Retriever interface{ Get(url string) string } func download(r Retriever) string { return r.Get("www.baidu.com") } func main() { var r Retriever r = mock.Retriever{"this is fake baidu com"} fmt....阅读全文

博文 2019-04-03 08:34:39 zidea

GO基础:method相关

// method相关 // method是特殊的function,带有reciever参数。 // https://tour/golang.org package main import ( "fmt" "math" ) type Vertex struct{ X, Y float64 } // go 中没有类的概念 // method 方法,有接受者参数的函数 func (v Vertex) AbsMethod1() float64 { return math.Sqrt(v.X*v.X + v.Y*v.Y) } // function 普通的函数, func AbsFunc1(v Vertex) float64{ return math.Sqrt(v.X*v.X + v.Y*v.Y) }...阅读全文

博文 2016-09-14 16:00:00 Wolfanature

2020-03-20

答案:People show b People show a 这是Golang的组合模式,可以实现OOP的继承。 被组合的类型People所包含的方法虽然升级成了外部类型Teacher这个组合类型的方法(一定要是匿名字段),但它们的方法(ShowA())调用时接受者并没有发生变化。 此时People类型并不知道自己会被什么类型组合,当然也就无法调用方法时去使用未知的组合者Teacher类型的功能。 package main import "fmt" type People struct {} type Teacher struct{ People } func (p *People) ShowB() { fmt.Println("People show b") p.ShowA() } fun...阅读全文

博文 2020-03-20 13:32:51 anthonydan

golang 结构体

构造函数,可以使用普通方法来构建 值接受者和指针接收者 1、要改变内容必须使用指针接收者 2、结构过大也要考虑使用指针接收者 3、一致性;如有指针接收者,最好都是指针接收者 值接收者是go语言特有 值/指针接收者均可接收值/指针 nil指针也可以调用方法(.) 封装 对包而言的 每个目录只能一个包,main包包含程序入口 为结构定义的方法必须放在同一个包内,可以在不同文件...阅读全文

博文 2020-06-08 01:33:14 我真是刚的不像话