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

golang之路-api杂记-格式化float输出

golang之路-格式化float输出 代码: a:=strconv.FormatFloat(10.100,'f',-1,32) 输出: 10.1 a := strconv.FormatFloat(10.101, 'f', -1, 64) 输出: 10.101 a := strconv.FormatFloat(10.010, 'f', -1, 64) 输出:10.01 a:=strconv.FormatFloat(10.1,'f',2,64) 输出:10.10 f 参数可以是e,E,g,G-1 代表输出的精度小数点后的位数,如果是<0的值,则返回最少的位数来表示该数,如果是大于0的则返回对应位数的值64 为float的类型,go中float分为32和64位,因此就需要传入32或者6...阅读全文

博文 2014-12-31 01:00:04 stephen830

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

Go 系列教程 —— 28. 多态

欢迎来到 [Golang 系列教程](https://studygolang.com/subject/2)的第 28 篇。 Go 通过[接口](https://studygolang.com/articles/12266)来实现多态。我们已经讨论过,在 Go 语言中,我们是隐式地实现接口。一个类型如果定义了接口所声明的全部[方法](https://studygolang.com/articles/12264),那它就实现了该接口。现在我们来看看,利用接口,Go 是如何实现多态的。 ## 使用接口实现多态 一个类型如果定义了接口的所有方法,那它就隐式地实现了该接口。 **所有实现了接口的类型,都可以把它的值保存在一个接口类型的变量中。在 Go 中,我们使用接口的这种特性来实现多态**。 通过一...阅读全文

博文 2018-03-25 21:47:13 heyulong

阿里财报:云计算年度营收133亿,季度营收连续12个季度翻番

摘要: 北京时间5月4日晚间,阿里巴巴集团公布2018财年第四季度和全年财报,该季度内(2018年1月至3月底)阿里云营收43.85亿元,同比增长103%;2018财年(2017年4月至2018年3月底)营收133.9亿元,同比增长101%。 北京时间5月4日晚间,阿里巴巴集团公布2018财年第四季度和全年财报,该季度内(2018年1月至3月底)阿里云营收43.85亿元,同比增长103%;2018财年(2017年4月至2018年3月底)营收133.9亿元,同比增长101%。 过去三年,阿里云每个季度以三位数左右的增速在不断扩大自己的市场领先优势。截止2017年上半年,研究机构IDC通过销售、市场等渠道得到的调研数据显示,阿里云在中国云计算IaaS市场份额为47.6%,几乎为市场所...阅读全文

golang继承,和多态

package main type ST struct{ } func (s *ST)Show(){ println("ST") } func (s *ST)Show2(){ println("ST:Show2()") } type ST2 struct{ ST I int } func (s *ST2)Show(){ println("ST2") } func main() { s := ST2{I:5} s.Show() s.Show2() println(s.I) } golang语言中没有继承,但是可以依靠组合来模拟继承和多态。 但是,这样模拟出来的继承是有局限的,也就是说:在需要多态的时候,需要小心。 $(function () { $('pre.prettyprint code'...阅读全文

博文 2016-06-22 19:00:01 qq_26847293

GOLANG 基本数据类型 整型

基本数据类型-整型 种类 有符号(负号) int8 int16 int32 int64 无符号(无符号) uint8 uint16 uint32 uint64 架构特定(取决于系统位数) int uint 类型别名 Unicode字符rune类型等价int32 byte等价uint8 特殊类型 uintptr,无符号整型, 由系统决定占用位大小,足够存放指针即可,和C库或者系统接口交互 取值范围 具体类型 取值范围 int8 -128到127 uint8 0到255 int16 -32768到32767 uint16 0到65535 int32 -2147483648到2147483647 uint32 0到4294967295 int64 -9223372036854775808到9223...阅读全文

博文 2016-08-30 16:00:00 zengyz

go 最大的无符号数

这里其实主要是翻译http://blog.golang.org/constants,其中An exercise: The largest unsigned int 部分。 如何构造最大的无符号数。对于确定位数的无符号数,只要移位即可,例如:对于uint32,只要const MaxUint32 = 1<<32 - 1 。 但是,对于不确定位数的uint,就不能这样了,其实,我们知道,最大的无符号数和-1在位数上是一样的。但是,无论是 const MaxUint uint = -1 // Error: negative value , 还是const MaxUint uint = uint(-1) // Error: negative value ,都不能通过编译,原因自然是类型与范围的冲突了。...阅读全文

博文 2015-12-22 04:00:00 lmxmimihuhu

golang 父类调用子类方法、继承多态的实现方式

实现思路: 父类方法接收子类对象,通过反射调用子类方法 直接上代码: package main import ( "fmt" "reflect" ) type A struct { } func (self A) say() { println(self.Name()) } func (self A) sayReal(child interface{}) { ref := reflect.ValueOf(child) method := ref.MethodByName("Name") if (method.IsValid()) { r := method.Call(make([]reflect.Value, 0)) fmt.Println(r[0].String()) } else { /...阅读全文

博文 2018-12-12 20:34:43 liyiyang

goLang 操作windows注册表

goLang这种神器来说操作系统数据应该是最简单的,群里面有个朋友在问这样的一个问题。他在操作的时候提示权限不足,我在后面的测试的时候发现这个问题的根源 package main import ( "fmt" "log" registry "github.com/golang/sys/windows/registry" ) func main() { k, err := registry.OpenKey(registry.LOCAL_MACHINE, `SAM\XIAO`, registry.ALL_ACCESS) if err != nil { log.Fatal(err) } defer k.Close() s, _, err := k.GetStringValue("x") if er...阅读全文

博文 2016-10-05 15:00:02 liangguangchuan

根据输入的日期(年月日)判断是星期几——golang实现

输入日期,如2018年11月07日,输出对应的星期数代码如下: // 历史上的某一天是星期几?未来的某一天是星期几? // 关于这个问题,最著名的计算公式是蔡勒(Zeller)公式。即w=y+[y/4]+[c/4]-2c+[26(m+1)/10]+d-1 // output: w: 0 - 周日; // 1 - 周一; // 2 - 周二; // 3 - 周三; // 4 - 周四; // 5 - 周五; // 6 - 周六; // 公式中的符号含义如下,w:星期; // c:世纪-1; // y:年(两位数); // m:月(m大于等于3,小于等于14,即在蔡勒公式中,某年的1、2月要看作上一年的13、14月来计算,比如2003年1月1日要看作2002年的13月1日来计算) // d:日;...阅读全文

博文 2018-11-08 00:34:44 逍遥子_

Go接口

Go语言的编程哲学因为有接口而趋近完美 1.其他语言的接口: C++,Java等主流编程语言中,接口主要作为不同组件之间的契约存在。对契约的实现是强制的,你必须声明你的确实现了该接口。 为了实现该接口,你必须从该接口继承 interface IFoo { void Bar(); } class Foo implements IFoo { // Java文法 // ... } class Foo : public IFoo { // C++文法 // ... } IFoo* foo = new Foo; Java中抽象类和接口的区别: 1.抽象类,子类继承时,有些方法可以不用重写,关系是is-a;而implement一个接口,则需要实现其全部方法,关系是has-a。 抽象类中的非abstrac...阅读全文

博文 2015-06-17 23:08:23 luan_tianjiao

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

golang 继承 , 封装, 多态解释

用实现计算机加减法功能为例 继承 golang 中的继承是通过结构体中的匿名字段来实现 例:定义一个 BaseNum 对象 (结构体),作为父类,Add 和Sub 对象(结构体)中包含了BaseNum 匿名字段, 此时 Add 和Sub 就是BaseNum的子类 type BaseNum struct { num1 int num2 int } // BaseNum 即为父类型名称 type Add struct { BaseNum } //加法子类, 定义加法子类的主要目的, 是为了定义对应子类的方法 type Sub struct { BaseNum } //减法子类 封装 子类Add 和Sub 都有计算的方法 Opt func (a *Add)Opt()(value int) { re...阅读全文

博文 2018-12-27 20:34:42 husky_1

Pokemon Go 教程

澳大利亚apple id 账号:fdf087469@163.com 密码:He807671626 据说不要登icould,一登就会锁了 将iPhone内部的Appstore ID更改一下。登入AppStore,可以看见AppStore已经自动切换到澳大利亚区,直接搜索Pokemon Go,点击下载。此过程稍微慢点,请各位耐心等待。 pokemon go中国玩家必须懂的教程 下载完先别着急,将刚刚iCloud ID更换成你原来的,再次登入AppStore,已经自动切换到国区(最垃圾的就是国区!!),搜索下载一个VPN,这里我推荐Green VPN或者Tiger VPN,可以免费用10天(感觉爽就付费包月咯)。 pokemon go中国玩家必须懂的教程 下载完VPN,打开VPN软件,会提示设置,...阅读全文

博文 2016-08-30 17:00:06 q8649912

golang位运算符

位运算,是两个数字的二进制对应的值,每一位,进行运算,得出新值的过程 & = 两个数,每一位,同时都=1,则返回1,其余0。 | = 两个数,每一位,任意一位=1,则返回1,否则0。 ^ = 两个数,每一位,只有一位=1,则返回1,否则0 &^^ = 两个数,如果第二个数的某一位=1,则修改第一个数对应的位的值=0,否则第一个数对应的位数的值不变。 第一个数 0110 第二个数 1011 进行&运算 0010 进行|运算 1111 进行^运算 1101 进行|运算 0100 /** 6 0110 11 1011 & 0010 2 | 1111 15 ^ 1101 13 &^ 0100 4 */ func main() { fmt.Println(6 & 11) fmt.Println(6 |...阅读全文

博文 2018-07-26 20:34:54 luckyase

钜惠-孔壹学院全场5折

2019年第1次大钜惠于2019.1.1开始,孔壹学院区块链课程全场5折!机会难得,快来报名吧!孔壹学院课程涉及:Golang、共识算法、公链实战、Hyperledger Fabric、DAPP、源码解析、钱包、密码学、智能合约安全。以上课程全部5折!惊不惊喜?!开不开心?!另外,原价199元《以太坊钱包项目实战》课程,限时19.9元,这优惠力度和白送有什么区别?孔壹学院区块链课程网站:http://edu.kongyixueyuan.com/?20181228jinsecaijing对自己最好的投资就是投资学习,知识是永远不嫌多的,当机遇来临时,机会永远只眷顾有准备的人,你准备好了吗?需不需要提升自己呢?来孔壹学院学习...阅读全文

博文 2018-12-28 15:34:50 ChainDesk

golang99道练习题之01

**1.题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?** **2.程序分析:可填在百位、十位、个位的数字都是1、2、3、4。组成所有的排列后再去掉不满足条件的排列。 ** **3.程序源代码:** ```go package main import "fmt" func main() { for i := 1; i < 5; i++ { for j := 1; j < 5; j++ { for k := 1; k < 5; k++ { if (i != k) && (i != j) && (j != k) { fmt.Println("这个数是:", i, j, k) } } } } } ``...阅读全文

博文 2018-11-20 11:38:16 hdking

Golang之interface(多态,类型断言)

多态用法 package main //一种事物的多种形态,都可以按照统一的接口进行操作 //多态 import ( "fmt" "math/rand" "sort" ) type Student struct { Name string Id string Age int sortType int } type Book struct { Name string Author string } //切片默认传地址 type StudentArray []Student func (p StudentArray) Len() int { return len(p) } func (p StudentArray) Less(i, j int) bool { return p[i].Name <...阅读全文

博文 2018-01-15 07:30:01 pyyu

golang函数可变参数传递性能问题

几天前纠结了一个蛋疼的问题,在go里面函数式支持可变参数的,譬如...T,go会创建一个slice,用来存放传入的可变参数,那么,如果创建一个slice,例如a,然后以a...这种方式传入,go会不会还会新建一个slice,将a的数据全部拷贝一份过去?如果a很大,那么将会造成很严重的性能问题,不过后来想想,可能是自己多虑了,于是查看go的文档,发现如下东西:Passing arguments to ... parametersIf f is variadic with a final parameter p of type ...T, then within f the type of p is equivalent to type []T. If f is invoked with no ...阅读全文

博文 2015-06-19 15:03:16 siddontang

程序员笔记——如何编写优雅的Dockerfile

导读Kubernetes要从容器化开始,而容器又需要从Dockerfile开始,本文将介绍如何写出一个优雅的Dockerfile文件。文章主要内容包括:· Docker容器· Dockerfile· 使用多阶构建感谢公司提供大量机器资源及时间让我们可以实践,感谢在此专题上不断实践的部分项目及人员的支持。 一、Docker容器1.1 容器的特点我们都知道容器就是一个标准的软件单元,它有以下特点:· 随处运行:容器可以将代码与配置文件和相关依赖库进行打包,从而确保在任何环境下的运行都是一致的。· 高资源利用率:容器提供进程级的隔离,因此可以更加精细地设置CPU和内存的使用率,进而更好地利用服务器的计算资源。· 快速扩展:每个容器都可作为单独的进程予以运行,并且可以共享底层操作系统的系统资源,这样...阅读全文

博文 2019-04-28 15:34:42 宜信技术学院

求黄金分割比小数点后无限位(大数据运算,Go+Java语言实现)

求黄金分割比小数点后无限位(Go+Java语言实现) 理论上给出的代码可以精确无限位,但事实上太精确的数据对人类是无效的。 下面的代码是否已经精确到了小数点后2000位精度未测试,但1000多位精度是正确的,只需要调整程序中的常量可以精确到你想要精确的位数。 这是运行时求得的2000位:(CSND不会自动换行) 0.61803398874989484820458683436563811772030917980576286213544862270526046281890244970720720418939113748475408807538689175212663386222353693179318006076672635443338908659593958290563832266131992...阅读全文

博文 2016-01-16 00:00:01 WAPWO

Golang面向对象之类型、方法、多态

Golang面向对象之类型、方法、多态 一、方法与函数 什么是方法?与函数的区别? 方法就是能够处理某种类型的变量或结构(以下结构也统称为变量)的函数,称为该类型的方法 这意味着,这个变量会传给这个函数,并且这个函数认识这个变量的内部构造 怎样使得一个函数成为一个类型的方法? java和cpp将指向该类型变量的“this”指针作为隐含参数传入该函数 go将该类型变量的拷贝、或者指向该类型变量的指针作为“接收者”传入该函数 java和cpp将该函数藏在类中,以防止外界轻易访问 go中方法可以放置在任意位置 为什么需要一个函数成为一个类型的方法? 原因之一:多态性 如果只有独立分散的函数来处理各种类型,那么会有int_print(int a)、string_print(string a)、per...阅读全文

博文 2015-06-17 20:04:33 max2005

【面试题】计算某个整数 1 的位数,即 Hamming weight

编写一个函数,接收一个无符号整数,返回它拥有的“1”位数(也称为汉明权重,[Hamming weight](https://en.wikipedia.org/wiki/Hamming_weight))。 例如,32 位整数 '11' 的二进制表示为 `00000000000000000000000000001011`,所以函数应该返回3。 ```go // hammingWeight 计算 Hamming weight func hammingWeight(n uint32) int { } ``...阅读全文

leetcode 55. 跳跃游戏

给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。判断你是否能够到达最后一个位置。 示例 1: 输入: [2,3,1,1,4] 输出: true 解释: 从位置 0 到 1 跳 1 步, 然后跳 3 步到达最后一个位置。 示例 2: 输入: [3,2,1,0,4] 输出: false 解释: 无论怎样,你总会到达索引为 3 的位置。但该位置的最大跳跃长度是 0 , 所以你永远不可能到达最后一个位置。 这道题是刚刚做的,可以用贪心的思路。 我分享这道题的原因是因为它更适合反过来想。我们可以从数组的倒数第二个个元素看起,每次往前遍历,如果当前的元素能够到达最后一个位置,那么我们把当前位置开始到最后全部“切断”,以当前元素为最后一个元素,重复第一次...阅读全文

博文 2019-04-17 15:34:45 算法瘾士

golang 多态和c++的一点区别

以下代码在go1.5验证通过 package main import ( "fmt" ) type Person struct { name string age int tel string } type Student struct { Person // 有另一个字段 school string } func (p *Person) Print() { fmt.Printf("Print\n") p.Hello() //指向person的hello } //在person上面定义了一个传值的method func (p *Person) Hello() { p.tel = "186" fmt.Printf("Person My name is %s, and my tel number...阅读全文

博文 2016-01-09 03:00:00 chukuang2004

Go 多态功能实现

Go 多态功能实现 Go本身不具有多态的特性,不能够像Java、C++那样编写多态类、多态方法。但是,使用Go可以编写具有多态功能的类绑定的方法。为什么这么说呢?因为Go使用struct构建类,根据不同类调用不同的方法。下面将展示如何使用Go编写多态功能。 package main import ( "fmt" ) type strCase struct{} type intCase struct{} func (text strCase) Add(x string, y string) string { return x + y } func (number intCase) Add(x int, y int) int { return x + y } func StartPolymorp...阅读全文

博文 2016-08-04 20:00:05 abcijkxyz

golang继承与多态的一个例子

package main //继承 import ( "fmt" ) //人类接口 type Human interface{ OneDay() Work() *Remuneration } //报酬 type Remuneration struct{ //钱 Money int //食物 Food string //爵位 Title string } //人类 type People struct{ } func (s *People) Eat(){ println("people eat foot") } func (s *People) Drink(){ println("people drink water") } ////某一天的活动,继承人类接口 //func (s *Peopl...阅读全文

博文 2018-07-13 18:18:34 yanglikai

【Go学习笔记】12、接口 interface

接口interface 接口是一个或多个方法签名的集合 只要某个类型拥有该接口的所有方法签名,即算实现该接口,无需显示声明实现了哪个接口,这称为Structural Typing 接口只要方法声明,没有实现,没有数据字段 接口可以匿名嵌入其他接口,或嵌入到结构中 将对象赋值给接口时,会发生拷贝,而接口内部存储的是指向这个复制品的指针,既无法修改复制品的状态,也无法获取指针 只有当接口存储的类型和对象都为nil时,接口才等于nil 接口调用不会做receiver的自动转换 接口同样支持匿名字段方法 接口也可以实现类似OOP中的多态 空接口可以作为任何类型数据的容器 12345678910111213141516171819202122232425262728293031323334353637...阅读全文

博文 2017-05-30 05:10:28 HundredLee

线性复杂度选出第k小元素、中位数、最小的k个元素(golang实现)

封装成函数: //选出第k小元素,k为1~len(s) func SelectKthMin(s []int, k int) int { k-- lo, hi := 0, len(s)-1 for { j := partition(s, lo, hi) if j < k { lo = j + 1 } else if j > k { hi = j - 1 } else { return s[k] } } } //选出中位数(比一半的元素小,比另一半的大) func SelectMid(s []int) int { return SelectKthMin(s, len(s)/2) } //选出k个最小元素,k为1~len(s) func SelectKMin(s []int, k int) []i...阅读全文

博文 2017-09-03 07:05:00 imroc

golang99道练习题之13

**1.打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。** **例如:153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。** **2.程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。** **3.程序源代码:** ```go package main import "fmt" func main() { for i := 1; i < 10; i++ { for j := 0; j < 10; j++ { for k := 0; k < 10; k++ { sum := i*100 + j*10 + k if sum == i*i*i+j*j*j+k*k*k { fmt.Println(sum) ...阅读全文

博文 2018-11-20 17:53:28 hdking

golang99道练习题之18

**1.题目:求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。 ** **2.程序分析:关键是计算出每一项的值。 ** **3.程序源代码: ** ```go package main import "fmt" func main() { var m, n, Sn, Tn = 1, 1, 0, 0 fmt.Print("请输入一个数字:") fmt.Scan(&m) fmt.Print("请输入位数:") fmt.Scan(&n) for i := 1; i <= n; i++ { Tn = Tn * 10 Tn = Tn + m Sn = Sn + Tn } fmt.Println...阅读全文

博文 2018-12-11 20:09:17 hdking

基数排序-Goalng语言

> 由于之前在golang中文社区没有查到radix-sort让我尴尬,就自己给出如下代码,如果不足也请大家指明 ```go import "strconv" func RadixSort(arr []int) []int{ if len(arr)<2{ fmt.Println("NO NEED TO SORT") return arr } maxl:=MaxLen(arr) return RadixCore(arr,0,maxl) } func RadixCore(arr []int,digit,maxl int) []int{ //核心排序机制时间复杂度 O( d( r+n ) ) if digit>=maxl{ return arr //排序稳定 } radix:=10 count:=...阅读全文

博文 2018-05-15 21:14:17 golanguage

POJ 1047 Round and Round We Go 循环数新解

题目描述: 给定一字符串表示的高精度数,判断它是否是可循环的。如果假设字符串num的长为n,则将num从1开始乘到n,如果每次得到的结果包含的字符元素都和a是相同的,则它是可循环的。 解题思路: 初看这一题,想到的解法是利用高精度数的乘,计算出num乘以1到n的结果,再与num进行对比。这种方法较为简单,可以得到正确的结果,但是效率并不是很理想。对于循环数,我们最常见到的是循环小数,而这一题的解法也是由此引申得出的。 初等数论里面有以下三个定理: 欧拉定理:设a、m为整数,m>1,(a,m)=1,则a^φ(m)≡1 (mod m)。 整数的次数:a、m为整数,m>1,(a,m)=1,k是使a^k≡1 (mod m)成立的最小正整数,则k叫做a对模m的次数。 次数定理:设a对模m的次数为k,n...阅读全文

博文 2016-02-05 07:00:01 furney

golang继承,和多态

package main type ST struct{ } func (s *ST)Show(){ println("ST") } func (s *ST)Show2(){ println("ST:Show2()") } type ST2 struct{ ST I int } func (s *ST2)Show(){ println("ST2") } func main() { s := ST2{I:5} s.Show() s.Show2() println(s.I) } golang语言中没有继承,但是可以依靠组合来模拟继承和多态。 但是,这样模拟出来的继承是有局限的,也就是说:在需要多态的时候,需要小心...阅读全文

博文 2015-11-27 19:00:31 rufidmx

Golang 实现接口

Duck Typing golang的接口很有意思,与java的思路不一样,java中是申明是的,必须使用关键字implements。而golang中则用的是Duck-Like的模式,如果子类的行为与接口一致,则这个子类就实现了该接口。如果某个东西的行为和鸭子一样,那么我们就说这个是一个只鸭子。 Java接口 interface AInterface{ void behavior(); } class ConcreteClass implements AInterface { void behavior(); } 上面的例子就是Java的中实现接口, 必须使用implements 关键字。 Golang 接口 type Car interface { Drive() } type EVCar...阅读全文

博文 2018-12-29 10:35:56 阿福德

golang 走起(七) 多态

golang 走起(七) 多态 代码: package main import ( "log" ) type IMessage interface { ChangAge (b []byte) bool // 接口1 RegisterSendMsg (s1 func(s string, m []byte) (err error)) // 接口2,用于注册,可以使用其他简单办法,这样写停停停2的 } type Msg struct { m IMessage // 接口引用引用引用,终于的事情说3遍 OpenMessage func(k int) IMessage // 创建接口IMessage的函数指针 } func OpenMessage1(k int) IMessage { var im I...阅读全文

博文 2016-04-21 11:00:03 zjp114695092

算法代码实现之选出第k小元素、中位数、最小的k个元素,Golang(Go语言)实现

封装成函数: //选出第k小元素,k为1~len(s)func SelectKthMin(s []int, k int) int { k-- lo, hi := 0, len(s)-1 for { j := partition(s, lo, hi) if j < k { lo = j + 1 } else if j > k { hi = j - 1 } else { return s[k] } }} //选出中位数(比一半的元素小,比另一半的大)func SelectMid(s []int) int { return SelectKthMin(s, len(s)/2)} //选出k个最小元素,k为1~len(k)func SelectKMin(s []int, k int) []int { ...阅读全文

博文 2016-03-02 22:00:01 QQ245671051

接口的类型转换以及赋值

看到一段代码,对于语法部分有些不理解,希望大神出来解惑,多谢了: A文件,定义了 Player接口 type Player interface { Play(source string) } func Play(source, mtype string) { var p Player switch mtype { case "MP3": p = &MP3Player{} default: fmt.Println("Unsupported music type", mtype) return } p.Play(source) } ...阅读全文

GoLang练习实例100之002----打印互不相同且重复数字的三位数

package main import ( "fmt" ) //题目:有四个数字:1、2、3、4,能组成多个互不相同且无重复数字的三位数?各是多少? func main() { num_S := []int{1, 2, 3, 4, 5} var num_Count int for i := range(num_S){ for y := range(num_S){ for z := range(num_S){ if (i!=z) && (i!=y) && (y!=z){ fmt.Println(i,y,z) num_Count ++ } } } } fmt.Println("总数为:", num_Count) ...阅读全文

博文 2018-03-20 00:33:04 不折腾难受斯基

【Go】语法基础之结构体

结构体的定义很简单: type Vertex struct { X, Y float64 } 可以理解为多个变量的集合。 结构体的使用: 1、直接使用: v := Vertex{1, 2} 或 var v = Vertex{1, 2} 2、通过new关键字: v := new(Vertex) 3、通过指针访问: v := &Vertex{1, 2} 为结构体添加方法: package main import ( "fmt" "math" ) type Vertex struct { X, Y float64 } func (v *Vertex) Scale(f float64) { v.X = v.X * f v.Y = v.Y * f } func (v *Vertex) Abs() fl...阅读全文

博文 2016-08-12 12:00:01 puyangsky

go 无数据抽象设计

interface是golang的抽象设计的根基,是方法集合的接口,是一个非常强大的并且规范的指针,可以引用任意实现了该接口的方法集合的struct,不能定义属性,意味着在抽象设计里是不允许有数据的,使语言的编译运行管理更纯粹方便。 一切属性都是setter/getter1234567891011121314151617181920212223242526272829303132333435363738394041424344package maintype Surface struct{ skin string}func (s *Surface) Skin() string{ return "My skin is " + s.skin}type Men interface { GetSur...阅读全文

博文 2017-12-06 15:03:59 宽视角

【Golang】封装,继承与多态

面向对象的基本思想主要体现在封装,继承以及多态等的设计与运用上。 这篇文章主要讲述,封装、继承与多态在golang中是如何实现的。 封装 封装主要是通过访问权限控制实现的。 在Java中,共有public 、protected、default、private这四种权限控制。 而相应的在golang中,是通过约定来实现权限控制的。变量名首字母大写,相当于java中的public,首字母小写,相当于private。同一个包中访问,相当于default。由于go没有继承,也就没有protected。 继承 虽然golang的语法没有继承,但是可以通过相应的结构体之间的组合来实现类似的继承效果。 例子如下: package main import "fmt" type inner struct { ...阅读全文

博文 2020-03-17 15:32:54 冉黛玉

go语言如何实现类似c++中的多态功能

go语言作为编程语言中的后起之秀,在博采众长的同时又不失个性,在注重运行效率的同时又重视开发效率,不失为一种好的开发语言。在go语言中,没有类的概念,但是仍然可以用struct+interface来实现类的功能,下面的这个简单的例子演示了如何用go来模拟c++中的多态的行为。 package main import "os" import "fmt" type Human interface { sayHello() } type Chinese struct { name string } type English struct { name string } func (c *Chinese) sayHello() { fmt.Println(c.name,"说:你好,世界") } fu...阅读全文

golang 接口类型多态

接口是一种契约,实现类型必须满足它,它描述了类型的行为,规定类型可以做什么。接口彻底将类型能做什么,以及如何做分离开来,使得相同接口的变量在不同的时刻表现出不同的行为,这就是多态的本质。 type stockPosition struct{ ticker string sharePrice float32 count float32 } type car struct { make string model string price float32 } func (c car) getValue() float32 { return c.price } func (s stockPosition) getValue() float32{ return s.sharePrice * s.cou...阅读全文

博文 2019-10-31 17:32:55 aside section._1OhGeD

GoLang中面向对象的三大特性

有过 JAVA 语言学习经历的朋友都知道,面向对象主要包括了三个基本特征:封装、继承和多态。封装,就是指运行的数据和函数绑定在一起,JAVA 中主要是通过 super 指针来完成的;继承,就是指 class 之间可以相互继承属性和函数;多态,主要就是用统一的接口来处理通用的逻辑,每个 class 只需要按照接口实现自己的回调函数就可以了。 作为集大成者的 Go 语言,自然不会在面向对象上面无所作为。相比较 java、C#、C++ 等面向对象语言而言,它的面向对象更简单,也更容易理解。下面,我们不妨用三个简单的例子来说明一下 go 语言下的面向对象是什么样的。 封装特性 package main import "fmt" type data struct { val int } func (p...阅读全文

博文 2017-09-27 16:30:01 grimm

链表表示数字相加 go语言版本

链表表示数字相加 go语言版本给定两个非空链表来表示两个非负整数。位数按照逆序方式存储,它们的每个节点只存储单个数字。将两数相加返回一个新的链表。你可以假设除了数字 0 之外,这两个数字都不会以零开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807package main import "fmt" import "strconv" import "reflect" type ListNode struct { data int next *ListNode } //转成字符串,数字 相加,再转成链表 func AddTwoNum(l1 *ListNode, l2 *ListNode) *ListNode ...阅读全文

博文 2019-10-14 22:03:22 雷顿学院