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

彬哥笔记 --10 Go语言 接口实现多态

大家好,我是彬哥,本节给大家讲下go语言接口实现多态的例子。 多态概念: 所谓多态就是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的方法调用在编程时并不确定,而是在程序运行期间才确定,即一个引用变量倒底会指向哪个类的实例对象,该引用变量发出的方法调用到底是哪个类中实现的方法,必须在由程序运行期间才能决定。因为在程序运行时才确定具体的类,这样,不用修改源程序代码,就可以让引用变量绑定到各种不同的类实现上,从而导致该引用调用的具体方法随之改变,即不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态,这就是多态性。 代码如下: package main import ( "fmt" ) /* 接口 例子 1. 实现多态 2. 主要首个字母的大小写表示其他包的...阅读全文

博文 2018-12-28 15:34:50 Golang语言社区

Golang中的面向对象特性

Golang中的面向对象特性 Golang 作为新世纪的C语言,有着与C接近的高性能,有着比C更为简洁的表达,有着无与伦比的海量并发支持。作为一门现代语言,Golang 吸取了很多语言特性,比如:Golang吸取了函数式编程的特性:匿名函数和闭包; 面向对象语言特性的支持; 高级语言中的垃圾回收和反射机制的支持等。 那么,我们来了解一下Golang对面向对象的一些特性支持。 面向对象思想最重要的三个特性,封装,继承,多态,在golang语言中也有体现,我们来讨论一下 封装 一个对象或实体包含它能进行操作所需要的所有信息,这个特性称为封装,因此它就可以不必依赖其他对象来完成自己的操作. 封装的好处: 良好的封装减少耦合 实体内部可以自由修改 具有清晰的对外接口 Golang中我们可以使用结构来...阅读全文

博文 2019-03-27 02:34:38 trump2018

让我们一起啃算法----回文数

回文数(Palindrome-Number) 这是一个比较简单的题目,题干如下: 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1: 输入: 121 输出: true示例 2: 输入: -121 输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3: 输入: 10 输出: false解释: 从右向左读, 为 01 。因此它不是一个回文数。来源:力扣 解题思路 按照题目的定义: 负数一定不是回文数,并且 [0,9] 的数一定是回文数。 其次,我们稍微延伸一下题目,如果判断一个字符串是否是回文字符串,我们会怎么做?常规思路就是设置两个指针 i 和 j 分别指向字符串的第一个字符和最后...阅读全文

博文 2020-04-26 10:32:44 三斤和他的朋友们

go实现“水仙花数”

题目: 打印出100-999中所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字 立方和等于该数本身。例如:153 是一个“水仙花数”,因为 153=1 的三次 方+5 的三次方+3 的三次方 我使用的是Go Modules 管理依赖方式引入下面的add包就可以了运行了 package add import ( "fmt" "strconv" ) func Sxhs() { var str string fmt.Scanf("%s", &str) var result = 0 fmt.Printf("%d \n", result) for i := 0; i < len(str); i++ { num := int(str[i] - '0') //字符串本身是ascii码 res...阅读全文

博文 2020-04-10 21:32:41 小兵

[Go 教程系列笔记]多态-Go中的OOP

Go 教程系列笔记 Interface 第一部分 Go 教程系列笔记 Interface 第二部分 Go 教程系列笔记 并发介绍 Go 教程系列笔记 goroutine(协程) Go 教程系列笔记 Channel 通道 Go 教程系列笔记 缓冲通道和工作池 Go 教程系列笔记 Select Go 教程系列笔记 Mutex(互斥锁) Go 教程系列笔记 结构而不是类-Go中的OOP Go 教程系列笔记 组合而不是继承-Go 中的 OOP Go 教程系列笔记 多态-Go 中的 OOP Go 中的多态性是在接口的帮助下实现的。正如我们已经讨论过的,接口可以在Go 中隐式实现。如果类型定义了接口中声明的所有方法,则类型实现接口。让我们看看在接口的帮助下如何在Go中实现多态性。 使用接口的多态性 任何...阅读全文

博文 2019-08-14 17:02:52 xfstart07

猜数字游戏初学版

package mainimport( "math/rand" "fmt" "time")var (n , n1 , n2 , s , s1 , s2 , x , y int)//////////////////////三位数的数字游戏 ////1.随时间生成一个三位数的数字 ////2.将判断的数字每一位取出来 ////3.封装一个方法 //// //////////////////////func test01(){ //电脑随时间生成了一个随机数 fmt.Println("《猜数字游戏》") rand.Seed(time.Now().UnixNano()) x = rand.Intn(1000) // fmt.Println("x = " , x) n = x / 100 // fmt...阅读全文

博文 2019-05-07 23:06:26 OverTime

golang 多态

//多态 package main import "fmt" type Functype func(int, int) int//定义函数类型 func Calc(a int, b int, fun Functype) int { result := fun(a, b) //回调机制 return result } func Add(a, b int) int{ return a + b } func Munic(a, b int) int { return a - b } func Mult(a, b int) int { return a * b } func main() { result := Calc(3,6, Add) fmt.Println("result = ", resul...阅读全文

博文 2020-04-06 04:32:42 小麦客

如何运用多阶构建编写优雅的Dockerfile

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

博文 2019-05-17 21:34:57 菜鸟飞不动

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

scala中的多态 Ad-hoc polymorphism和type class

多态的类型(polymorphism)(1) parametric多态下面例子来自scalaz教程:scala> def head[A](xs: List[A]): A = xs(0)head: [A](xs: List[A])Ascala> head(1 :: 2 :: Nil)res0: Int = 1scala> case class Car(make: String)defined class Carscala> head(Car("Civic") :: Car("CR-V") :: Nil)res1: Car = Car(Civic)可以看出参数多态与类型无关。2 sub-type 多态OOP中子类重写父类方法,父类引用指向子类。3 ad-hoc 多态Ad-hoc polymorp...阅读全文

博文 2018-09-24 11:34:40 onwingsofsong

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 傻梦兽

golang刷LeetCode[0004] 寻找两个有序数组的中位数

题目 https://github.com/betterfor/leetcode-go/tree/master/algorithms/0004_Median_Of_Two_Sorted_Arrays 假定两个大小为 m 和 n 的有序数组 nums1 和 nums2 。 请你找出这两个有序数组的中位数,并且要求算法的时间复杂度为 O(log(m+n)) 。 你可以假定 nums1 和 nums2 不会同时为空。 示例1: nums1 = [1,3] nums2 = [2] 则中位数是 2.0 示例2: nums1 = [1,2] nums2 = [3,4] 则中位数 (2+3)/2=2.5 题解 1、暴力法 将两个数组合并,两个有序数组合并也是归并数组,然后根据奇偶数返回中位数。 func ...阅读全文

博文 2020-01-15 09:32:45 风云风雨

golang中数字字段的类型约定

我们常见的字段类型:有符号的:int,int8,int16,int32,int64;无符号的:uint8,uint16,uint32,uint64;其中int跟具体机器环境有关,表示32位或者64位有符号整型 取值范围: int32: -2147483648~2147483647 int64: -9223372036854775808~9223372036854775807 uint32: 0~4294967295 uint64: 0~18446744073709551615 一般如果不太关心取值范围的话,直接用int类型就行 如果求严谨就可以使用具体的位数类型,有一些常见的业务场景,我们一般约定 时间戳用int64或者uint64,如果用uint32存时间戳,最大时间为:2106-02-0...阅读全文

博文 2020-05-18 11:33:08 凯文不上班

让我们一起啃算法----两数相加

两数相加(Add-Two-Numbers) 这是 LeetCode 的第二题,题目挺常规的,题干如下: 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807来源:力扣 解题思路 这个题目的解法类似我们小时候算两个多位数的加法:从低位开始相加,大于等于10时则取值的个位数,并向前进1。只不过现在多位数用链表来表示了并且最后的值用链表返回了而已。 根据上面...阅读全文

博文 2020-04-20 15:33:51 三斤和他的朋友们

Go 和 PHP 基于两组数计算相加的结果

文链接:go letcode,作者:三斤和他的喵 php 代码个人原创 两数相加(Add-Two-Numbers) 这是 LeetCode 的第二题,题目挺常规的,题干如下: 给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807来源:力扣 解题思路 这个题目的解法类似我们小时候算两个多位数的加法:从低位开始相加,大于等于10时则取值的个位数,并向前进1...阅读全文

博文 2020-04-16 20:32:42 hxd_

Go关键字defer的特性

Go里面,流程控制语句中有一个defer的关键字,翻译过来就是延迟的意思。下面用代码说话。 func deferFunc() { defer fmt.Println("后打印") fmt.Println("先打印") } defer在函数执行完毕之后,才会执行,所以,我们经常在释放资源或异常处理等需要收尾的场景下会用到defer。 不过defer也有一些“坑”,大家需要注意一下。 func printNumbers() { for i := 0; i < 5; i++ { defer func() { fmt.Print(i) // 输出55555 }() } } 上面例子中,defer是在for循环全部执行完毕之后才会执行,所以i已经变成了5,正确做法是下面这样 func printNum...阅读全文

博文 2020-02-26 15:32:40 iuoui

LeetCode|371. 两整数之和

题目描述 等级: 简单 不使用运算符 + 和 - ,计算两整数a 、b之和。 示例1: 输入: a = 1, b = 2 输出: 3 示例2: 输入: a = -2, b = 3 输出: 1 思路 对于位运算的考察。 在位运算中,异或操作获取的是两个数的无进位和,异或:相同为0,不同为1。如, 2^3 0010 ^ 0011 ------- 0001 我们知道,2+3=5,5的二进制是0101。前面已经知道了无进位和,下面获取进位的数:看a&b 2&b 0010 & 0011 -------- 0010 发现结果左移1位就是最终结果的进位数: 0010 << 1 = 0100 0100再异或0001: 0100 ^ 0001 ------- 0101 这样循环操作,直到进位数为0。 答案 f...阅读全文

博文 2019-12-06 11:32:40 clawhub

Golang interface

1_CdjOgfolLt_GNJYBzI-1QQ.jpeg 接口概念 接口 即一组方法定义的集合,定义了对象的一组行为,由具体的类型实例实现具体的方法。换句话说,一个接口就是定义(规范或约束),而方法就是实现,接口的作用应该是将定义与实现分离,降低耦合度。习惯用“er”结尾来命名,例如“Reader”。接口与对象的关系是多对多,即一个对象可以实现多个接口,一个接口也可以被多个对象实现。 ​接口(interface) 是Go语言整个类型系统的基石,其他语言的接口是不同组件之间的契约的存在,对契约的实现是强制性的,必须显式声明实现了该接口,这类接口称之为“侵入式接口”。而Go语言的接口是隐式存在,只要实现了该接口的所有函数则代表已经实现了该接口,并不需要显式的接口声明。 接口的作用 ​接口是实现...阅读全文

博文 2020-04-09 18:32:49 frederick_hou