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

GO语言:优雅地实现多重继承

有些语言支持多重继承,但是如果多个父类存在相同的属性或方法,就会发生冲突,有些语言为了防止这种情况而只支持单继承,很明显就没有了复用多个父类的属性和方法的优势。go语言其实没有对象的概念,只有结构体。比如有一个父亲,是中国人:type Father struct { MingZi string } func (this *Father) Say() string { return "大家好,我叫 " + this.MingZi }可以理解为父亲类有一个属性,有一个Say方法有父亲当然有母亲,母亲是个外国人:type Mother struct { Name string } func (this *Mother) Say() string { return "Hello, my name i...阅读全文

go和node.js的对比

go: Golang的诞生有着很强的目的性,所以根基显得非常的沉稳,语言未来针对高性能,高并发的优化也更得心应手。更主要Golang可以切实的解决实际问题,并在内存与CPU使用上大幅优于node。为此,针对有大量请求的服务端,Golang是个不错的选择。 从大型工程的角度来说,go 是完爆 Node 的。性能,内存开销,静态类型,对异步的处理,异常的处理,可调试性,系统稳定度,工具链的成熟度,等等,都是 go 占优。 Go的目标是希望提升现有编程语言对程序库等依赖性(dependency)的管理,这些软件元素会被应用程序反复调用。由于存在并行编程模式,因此这一语言也被设计用来解决多处理器的任务。使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。 Node.js No...阅读全文

博文 2016-05-24 18:00:00 qizhiqq

Go 应该成为开发 android 的主要语言

前几天刚看到的新闻时,我就在猜想:如果 google 要摆脱 Oracle 的诉讼纠缠,那么只有一条路:就是用 go 取代 java 成为 android 的主要开发语言。这步迟早是要走的,也许谷歌已经在暗自部署了。我一直觉得手机应用开发采用VM语言或者JS是一种短视的行为,在前期也许会因为门槛低而吸引大量程序员涌入这个市场,但是很多高级应用(对速度响应要求很高)最终都难免要回到C/C++原生函数调用上来。别对我说什么C/C++门槛太高,两年前谁知道ObjectiveC,现在排行榜都到第九位了。苹果的ObjectiveC,诺基亚的C++/QT都选对了开发语言,相信Google很快会采用Go回到正轨,手机...阅读全文

golang中的type转换

大家都知道,golang中可以这样定义一个类型: type PowerString string 这种不是面向对象中的继承,但有点像,因为PowerString能得到string的属性方法等。 我们给PowerString写个方法: func (ps PowerString) Print() { fmt.Println(ps) } 那怎么新建一个PowerString呢? 不需要特意写一个new方法,直接把一个string转换成PowerString就可以了: ps := PowerString(“Hi, you!”) ps.Print() 当然你也能新建一个PowerString转换过来的string: str := string(ps...阅读全文

博文 2015-06-17 20:03:54 u011649436

golang面向对象

golang中并没有明确的面向对象的说法,实在要扯上的话,可以将struct比作其它语言中的class。 类的声明: //声明一个类 type People struct { Name string Sex int32 Address string } 这样就声明了一个类,其中没有public、protected、private的的声明。golang用另外一种做法来实现属性的访问权限:属性的开头字母是大写的则在其它包中可以被访问,否则只能在本包中访问。类的声明和方法亦是如此。 类方法声明: //声明一个类的方法 func (people People) Publish() { fmt.Println("method :Publish") } func (people *People) Sho...阅读全文

博文 2015-07-29 03:00:00 wangjunqiao

go web 权限管理 解决方案 (面向对象权限 ABAC / Casbin)

go web 权限管理 解决方案 (面向对象权限 ABAC / Casbin) 说明 ABAC调用 github.com/casbin/casbin abac_model.conf [request_definition] r = sub, obj, act [policy_definition] p = sub, obj,act [policy_effect] e = some(where (p.eft == allow)) [matchers] m = r.sub.App == r.obj.App && r.sub.Type == r.obj.Type && r.sub.Method == r.obj.Method main.go package main import ( "fmt" ...阅读全文

博文 2019-05-15 18:35:26 295631788

我开发了一个机器人应用,让 HEXA 机器人可以追逐光——HEXA The Light Chaser

_可编程全地形机器人HEXA在正式面向用户时,曾发起“HEXA人类导师计划”,收到了来自全球各个国家机器人爱好者的购买和申请。经过一段时间的探索,有不少用户利用HEXA开发出了许多有趣的应用,我们将陆续把用户们开发的技能分享给大家,并分享出具体实现的代码,感兴趣的伙伴们可以尝试体验。_ _这次我们分享的是来自澳大利亚堪培拉的一名科学老师,他利用HEXA开发了一个可以追寻光的Skill(机器人应用),以下是他实现的经过:_ 我是一个科学老师,几个月前参与了HEXA人类导师计划。这几个月我都在各种倒腾HEXA,熟悉它的SDK,希望能给我的学生们开发一些新的好玩的skill。上个周末我在看小黄人电影得到了一个灵感,我想让HEXA变成一个小黄人一样的机器人,能追着舞台灯光跑,古怪又逗趣。...阅读全文

BAT老程序员分享:Linux C/C++ 开发程序员的黄金方向和学习路线!

目前从事 Linux C/C++ 开发的程序员很多,尤其是像百度、腾讯、阿里这样的大公司,他们的网站流量巨大,业务逻辑复杂,会遇到很多瓶颈,需要开发底层服务来提高程序效率,快速响应用户请求。这些公司的 Linux C/C++ 开发属于底层开发(后台服务、算法支持等),而不是应用开发,编写的程序在后台运行,没有界面,不直接面向用户。从事应用开发(尤其是网站开发)的程序员,工作的前几年提升很快,工资也嗖嗖嗖往上涨,不知不觉年薪就到了 30W。但是这个时候,很多人会遇到瓶颈期,如果没有成为领导,工资就长得慢了。习惯了自我进步的程序员,怎么能让工资停滞呢,不进步就是退步呀,怎么办?领导不是每个人都能当的。可以转底层开发呀!!!有了数年应用开发的经验,对用户、业务、交互等都非常了解了,转底层开发很容易...阅读全文

博文 2019-11-09 18:33:07 更多精彩内容嵌入式Linux学习路线吴兆阳面试题cosWriterC++程序员以后发展路线C语言八维读书笔记 - 《程序员的自我修养》SeanCST2.24 榜样的力量我的职业江湖

Go ADM,Go语言轻量ORM

厚颜无耻的推荐一下,go-adm,Go语言轻量ORM。0.1.0分支已经实现类面向对象的操作方式,说明请戳这里。 目前的总体特性已经完成,暂时不会增加其他的特性,待0.1.0的面向对象化的特性测试完善,会合并到主分支中。 艾玛,不要打我,就是推荐一下,不要打脸…… 咳,Go的确吊炸天,我计划将agimvc也搬到Golang上,不过mvc这个词可以丢掉了...阅读全文

博文 2015-05-07 08:00:00 曾建凯

go 类型方法 receiver的理解

package main import "fmt" type Person struct{ name string age int } func (this *Person) Growth(){ this.age ++ } func (this *Person) ChangeName(newname string){ this.name = newname } func main(){ p := Person{"wangzy", 30} p.Growth() fmt.Printf("%d", p.age) } 因为go不是面向对象的,struct也不是类,没有类方法,但是通过类型方法,提供该struct 的方法,类似类方法了。 可以通过类实例去调用。 感觉完全可以替换的 可以通过该结构体的引...阅读全文

博文 2016-04-02 23:00:01 frankwangzy1103

Go语言使用组合的方式实现多继承

在大多数面向对象的编程语言中多继承都是不支持的。因为在基于class的体系中,多继承极大地增加了编译器的复杂性。 Go语言使用组合的方式实现继承,因此也可以很简单的实现多继承。 //使用组合的方式实现多继承 type Phone struct{} func (p *Phone) Call() string { return "Ring Ring" } type Camera struct{} func (c *Camera) TakeAPicture() string { return "Click" } //多继承 type CameraPhone struct { Camera Phone } func structTest0803() { cp := new(CameraPhone) ...阅读全文

golang学习的点点滴滴:读写文件(面向对象版)

package main import ( "fmt" "bufio" "io" "os" "flag" "strconv" ) // 定义一个结构体 type ReadWrite struct { In *string Out *string } // 定义初始化方法 func (rw *ReadWrite) Init() { rw.In = flag.String("in", "in", "in") rw.Out = flag.String("out", "out", "out") flag.Parse() } // 定义读文件的方法 func (rw *ReadWrite) Read() (result []int, err error) { file, err1 := os.Open...阅读全文

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

Golang 面向对象

继承 package main import ( "fmt" ) type People struct { name string age int weight int } type Student struct { People specialty string } // define sayHi method on People struct func (p People) sayHi() { fmt.Println(1) } func main() { p := People{"syy", 1, 2} s := Student{People{"syy", 1, 2}, "Seecialty"} p.sayHi() s.sayHi() } 下面的方法,主要作用是在People结构体上定义...阅读全文

博文 2015-01-31 23:00:11 未来还没来

go programming language(2)

http://tour.golang.org/#1一个很方便学习go的网站 今天看了一下go的流程和面向对象,印象比较深的有 1 go的var的定义格式和c相反 2 go可以多个参数一起赋值 3 go的函数可以有多个返回数值 4 go的语法糖,给任意类型添加函数 5 大小写来区别package函数的private和public 大体感觉go就是一个比较时髦的C, 下一步的学习并行和网络编程,还有一本effective Go的书。 http://go.tuna.tsinghua.edu.cn/doc/effective_go.htm...阅读全文

博文 2014-10-24 22:00:21 wangeen

Golang语言和node.js的对比

go: Golang的诞生有着很强的目的性,所以根基显得非常的沉稳,语言未来针对高性能,高并发的优化也更得心应手。更主要Golang可以切实的解决实际问题,并在内存与CPU使用上大幅优于node。为此,针对有大量请求的服务端,Golang是个不错的选择。 从大型工程的角度来说,go 是完爆 Node 的。性能,内存开销,静态类型,对异步的处理,异常的处理,可调试性,系统稳定度,工具链的成熟度,等等,都是 go 占优。 Go的目标是希望提升现有编程语言对程序库等依赖性(dependency)的管理,这些软件元素会被应用程序反复调用。由于存在并行编程模式,因此这一语言也被设计用来解决多处理器的任务。使用Go编译的程序可以媲美C或C++代码的速度,而且更加安全、支持并行进程。Node.js Nod...阅读全文

博文 2016-10-20 08:00:09 u012798391

GO面向对象

GO面向对象 GO中没有隐藏的this指针 类型系统 类型系统是一个语言的类型体系,GO的类型系统包含以下基本内容: - 基础类型,如byte、int、bool、float等 - 复合类型,如数组、结构体、指针等 - 可以指向任意对象的类型 - 值语义和引用语义 - 面向对象,即所有具备面向对象特征的类型 - 接口 GO语言的类型系统: - 给任意类型添加响应的方法 type Integer int func (a Integer) Less(b Integer) bool { return a < b } 值语义和引用语义 GO语言中的大多数类型都基于值语义,包括: - 基本类型,如byte、int、bool、float32、float64和string等; - 复合类型,如数组、结构体和...阅读全文

博文 2016-04-18 12:00:04 u011409264

golang中的use-a和has-a

type Person struct { Name string Address Address } type Address struct { Number string Street string City string State string Zip string } func (p *Person) Talk() { fmt.Println("Hi, my name is", p.Name) } func (p *Address) Location() { //fmt.Println("I'm at", p.Address.Number, p.Address.Street, p.Address.City, p.Address.State, p.Address.Zip) fmt.Pr...阅读全文

博文 2016-02-04 11:00:02 menggucaoyuan

golang面向对象思想和实现

golang中并没有明确的面向对象的说法,实在要扯上的话,可以将struct比作其它语言中的class。 类声明 type Poem struct { Title string Author string intro string } 这样就声明了一个类,其中没有public、protected、private的的声明。golang用另外一种做法来实现属性的访问权限:属性的开头字母是大写的则在其它包中可以被访问,否则只能在本包中访问。类的声明和方法亦是如此。 类方法声明 func (poem *Poem) publish() { fmt.Println("poem publish") } 或者 func (poem Poem) publish() { fmt.Println("poem pu...阅读全文

博文 2016-08-04 20:00:20 平凡之路

golang中的面向对象的思想

test.go package main import ( "fmt" ) type T struct{ name string id int info map[string]string } func (r *T)GetName() string{ fmt.Println(r.name) return r.name } func (r *T)GetId() int{ fmt.Println(r.id) return r.id } func (r *T)GetInfo(){ var v map[string]string = r.info fmt.Println(v) } func main(){ m := map[string]string{"hello":"word"} r := &T{...阅读全文

博文 2016-06-30 08:00:02 innobase

用 Go 编写的类 Ruby 语言Rooby

Rooby 是一种面向对象的语言,可以看作是 Go 和 Ruby 的结合体,旨在实现高效微服务开发。 Can be compiled into bytecode (with `.robc` extension) Can evaluate bytecode directly Everything is object Support comment Object and Class Top level main object Constructor Support class method Support inheritance Support instance variable Support self Variables Constant Local vari...阅读全文

go语言type使用小技巧

import "fmt" type Rank int const ( Rank001 Rank = iota Rank002 Rank003 Rank004 ) var rewards = [...]string{ "奖励1","奖励2","奖励3","奖励4", } func (r Rank) getReward() string { return rewards[r] } func main() { fmt.Println(Rank003.getReward()) } 通过这样的方式,灵活的将排名与奖励对应,并且“面向对象”,将排名,这个int类型声明为排名,并为其添加成员函数。常规方式在C/C++,Java中,就直接通过2个以维数组惊醒处理,但相对而言,go语言这种方式,真的很赞! g...阅读全文

博文 2015-06-17 23:00:29 eclipser1987

golang面向对象思想和实现

golang中并没有明确的面向对象的说法,实在要扯上的话,可以将struct比作其它语言中的class。 类声明 type Poem struct { Title string Author string intro string } 这样就声明了一个类,其中没有public、protected、private的的声明。golang用另外一种做法来实现属性的访问权限:属性的开头字母是大写的则在其它包中可以被访问,否则只能在本包中访问。类的声明和方法亦是如此。 类方法声明 func (poem *Poem) publish() { fmt.Println("poem publish") } 或者 func (poem Poem) publish() { fmt.Println("poem pu...阅读全文

博文 2015-10-11 10:58:50 陈杰斌

Golang之面向对象和指针

武大郎,来十个烧饼。。。 package main import "fmt" type Integer int //为内置的int类型增加了新方法less,面向对象写法 func (a Integer) Less(b Integer) bool { return a < b } func Integer_Less(a Integer, b Integer) bool { return a < b } //Go的面向对象,如果需要修改对象,必须用指针,这不是Go约束,还是自然约束 func (a *Integer) Add(b Integer) { *a += b } //Integer类型是一个int,为int起一个别名Integer, // 并且增加一系列方法Add,Add2,又编程了一个...阅读全文

Go语言学习(十四)面向对象编程-可见性

Go语言对关键字的增加非常吝啬,其中没有private、protected、public这样的关键 字。要使某个符号对其他包(package)可见(即可以访问)需要将该符号定义为以大写字母 开头,如: type Rect struct { X, Y float64 Width, Height float64 } 这样,Rect类型的成员变量就全部被导出了,可以被所有其他引用了Rect所在包的代码访问到。 成员方法的可访问性遵循同样的规则,例如: func (r *Rect) area() float64 { return r.Width * r.Height } 这样,Rect的area()方法只能在该类型所在的包内使用。 需要注意的一点是,Go语言中符号的可访问性是包级别的而不是类型级别的...阅读全文

这个机器人应用,可以让机器人变成火警情报员

_可编程全地形机器人HEXA在正式面向用户时,曾发起“HEXA人类导师计划”,得到不少用户的购买申请,随着体验的深入,不少用户开发出了许多有趣实用的机器人应用,我们将陆续把这些应用的代码分享出来,感兴趣的伙伴们可以尝试体验。今天分享的是用户RiverLLZ开发的火情警报的机器人应用(Skill)——Fire Marshall Rob_ ![输入图片说明](https://static.oschina.net/uploads/img/201711/10142843_0MWN.png "在这里输入图片标题") 我在入手HEXA之前,曾玩过Arduino套件。所以在拿到HEXA之后很自然就想把两样”混搭”一下。在Arduino套件里我有一个火焰传感器,是之前在网上买的,非常便宜。要是能把它装在HE...阅读全文

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,只能说更多的踩坑,才能更好的学习。 打算使用 go-web 写点练手的内容。 碰到一个问题,关于 mysql 时间存储时区的问题。 使用的是 goose 一个 database migration 工具,可以使用,无奈存的 mysql 时间是按照 UTC 时区的。 作为一个有点 PHP 经验的人来说,很简单嘛,改个 php.ini 配置,设置一下 date.timezone = PRC 就可以解决了。 但是不熟悉 golang 呀,只能 google 解决了。 goose 关于操作 mysql 这部分使用的 go-sql-driver/mysql,找到一个 issue ,就是报告了有这么一个 bug 。结论就是,我们就是使用 UTC 存的。。 We chan...阅读全文

博文 2017-04-19 07:00:45 dryyun

Go学习笔记-面向对象struct之继承

前一篇说了基于struct的method实现,现在我们来看下struct中的method继承。 //定义一个person类型 type Person struct { Name string Age int Sex string } //获取person的年龄 func (Person *Person)getAge() int { return Person.Age } //获取person的性别 func (Person *Person)getSex() string { return Person.Sex } //定义一个Worker类型 type Worker struct { Person Job string Age int } //获取Worker的年龄 func (Worker...阅读全文

博文 2020-01-01 16:32:38 旧梦发癫

GO面向对象

一个程序就是一个世界,有很对不同的对象 说明 1 GO也支持面向对象编程,但是和传统的面向对象有区别,并不是纯粹的面向对象语言。所以我们说GO支持面向对象特性是比较准确的 GO没有类,Go语言的结构体(struct)和其他语言的类(Class)有同等地位,你也可以理解Golang是基于Struct来实现OOP概念的 go语言面向对象非常简洁,去掉了传统OOP语言的继承,方法重载,构造函数和析构函数等等 结构体 与 结构体变...阅读全文

博文 2019-03-14 18:34:48 suenism

Go语言编程(十)之面向对象编程

之前文章介绍了Go语言顺序编程的相关特性,很多人说Go语言是更好的C语言,接下来的篇章,我们将介绍Go语言对于面向对象思想的支持。 Go语言并没有沿袭传统面向对象编程中的诸多概念,比如继承、虚函数、构造函数和析构函数、隐藏的this指针等。Go语言对面向对象编程的支持是语言类型系统中的天然组成部分。整个类型系统通过接口串联...阅读全文

博文 2016-10-17 15:00:05 JoeySheng

Go语言编程(十一)之类型系统

类型系统 type system 类型系统是指一个语言的类型体系结构。一个典型的类型系统通常包含如下基本内容: 基础类型,如byte、int、bool、float等 复合类型,如数组、结构体、指针等 可以指向任意对象的类型(Any类型) 值语义和引用语义 面向对象,即所有具备面向对象特征(比如成员方法)的类型 接口 类型系统描述的是这些内容在一个语言中如何被关联。 为类型添加方法 在Go语言中,你可以给任意类型(包括内置类型,但不包括指针类型)添加相应的方法,例如 type Integer int func (a Integer) Less(b Integer) bool { return a < b } 在这个例子中,我们定义了一个新类型Integer,它和int没有本质不同,只是它为内置...阅读全文

博文 2016-10-17 15:00:05 JoeySheng

GO语言学习笔记(二)

为类型添加方法package main import ( "fmt" ) type Integer int func (a Integer) Less(b Integer) bool { return a < b } func main() { var a Integer = 1 if a.Less(2) { fmt.Println("Less true.") } } 结果输出:Less true.只有在你需要修改对象的时候,才必须用指针 因为数组切片的内部是指向数组的指针,所以可以改变数组的内容 package main import ( "fmt" ) func modifyslice(array []int) { slice1 := array[1:2] fmt.Println(sli...阅读全文

博文 2015-06-17 23:01:38 YaphetS_xiaoyang

golang 使用组合的方式实现继承

摘要 golang并非完全面向对象的程序语言,为了实现面向对象的继承这一神奇的功能,golang允许struct间使用匿名引入的方式实现对象属性方法的组合 组合使用注意项 使用匿名引入的方式来组合其他struct 默认优先调用外层方法 可以指定匿名struct以调用内层方法 代码事例 package main import ( "fmt" ) type People struct{} type People2 struct{} func (p *People) ShowA() { fmt.Println("showA") p.ShowB() } func (p *People) ShowB() { fmt.Println("showB") } func (p *People) ShowC()...阅读全文

博文 2018-12-13 13:34:45 火头陀

Golang learning 面向对象 多态

通过interface 实现多态 type Cat struct { Animal teeth string "牙" leg int } type Dog struct { Animal teeth string "牙" leg int } type NewAction interface { run() } func (c Cat) run(){ fmt.Print("\ncat----run") } func (c Dog) run(){ fmt.Print("\nDog----run") } func main() { cat := Cat{} dog := Dog{} animalRun(cat) animalRun(dog) } 打印 cat----run Dog----ru...阅读全文

博文 2019-05-24 03:34:43 wangyongyue

Golang的面向对象

在golang中,面向对象一直是一个纠纷,怎么说好呢。就是官网说没有面向对象这个概念,可是又给出了类似面向对象的概念。 和其他语言不同Golang只有接口和结构体分别为 interface 和 struct 我们以javascript es6为例子做对比 class ClassName { public name; // 成员属性 } 我们一个类有哪些属性,一般的语言和以上的写法是差不多的。可是到了golang的话,就有点变味了。 type ClassName struct { name string; } 我们有时候还需要在类中添加行为(方法)。我们在其他语言通常是 class ClassName { public name; // 成员属性 public setName(name){} ...阅读全文

博文 2020-01-16 11:32:41 傻梦兽

GO语言使用之面向对象编程(1)——Golang语言面向对象编程说明

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/TDCQZD/article/details/81638320 Golang语言面向对象编程说明 1、 Golang也支持面向对象编程(OOP[object oriented programming]),但是和传统的面向对象编程有区别,并不是纯粹的面向对象语言。所以我们说Golang支持面向对象编程特性。 2、 Golang没有类(class),Go语言的结构体(struct)和其它编程语言的类(class)有同等的地位,你可以理解Golang是基于struct来实现OOP特性的。 3、 Golang面向对象编程非常简洁,去掉了传统OOP语言的继承、方法重载、构造函数和析构函数、隐藏的this指...阅读全文

博文 2019-03-20 00:32:04 TDCQZD

这个机器人应用,可以让机器人变成火警情报员

_可编程全地形机器人HEXA在正式面向用户时,曾发起“HEXA人类导师计划”,得到不少用户的购买申请,随着体验的深入,不少用户开发出了许多有趣实用的机器人应用,我们将陆续把这些应用的代码分享出来,感兴趣的伙伴们可以尝试体验。今天分享的是用户RiverLLZ开发的火情警报的机器人应用(Skill)——Fire Marshall Rob_ ![输入图片说明](https://static.oschina.net/uploads/img/201711/10142843_0MWN.png "在这里输入图片标题") 我在入手HEXA之前,曾玩过Arduino套件。所以在拿到HEXA之后很自然就想把两样”混搭”一下。在Arduino套件里我有一个火焰传感器,是之前在网上买的,非常便宜。要是能...阅读全文