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

Golang 复合数据类型:方法

传统的面向对象编程 在面向对象编程(OOP)中,类与对象是面向对象编程的两个主要方面。一个类(Class)能够创建一种新的类型(Type),其中对象(Object)就是类的实例(Instance)。可以这样来类比:你可以拥有类型 int 的变量,也就是说存储整数的变量是 int 类的实例(对象)。 对象可以使用属于它的普通变量来存储数据。这种从属于对象或类的变量叫作字段(Field)。对象还可以使用属于类的函数来实现某些功能,这种函数叫作类的方法(Method)。这两个术语很重要,它有助于我们区分函数与变量,哪些是独立的,哪些又是属于类或对象的。总之,字段与方法通称类的属性(Attribute)。 方法 在 Golang 中,方法是作用在接收者(receiver)上的一个函数,接收者是某种类...阅读全文

博文 2020-06-03 15:32:41 sunlingbot

golang fmt(格式换 I O接口)

基本模式 fmt 方法可以大致分为 print, scan两类, 根据基础方法可以构建特定方法。 Print 将参数写入字符串或io.writer scan 从字符串或 io.Reader 读取指定数据, 并输出 Print Print 方法的几种模式 基础模式: [name] Print 返回默认格式化的字符串 写入模式: F[name] 返回写入字节 例如: Fprint 字符模式: S[name] 返回字符 例如: Sprint 模板模式: [name]f 根据模板格式化 例如: Printf 换行模式: [name]ln 输出后带换行 例如: Println 模式可组合, 例如 Fprintf, Sprintf Print 默认格式化,返回字符串 func Print(a ...in...阅读全文

[Golang]设计模式实践:组合(Composite)

版权声明:本文为Sunface(孙飞)原创文章,转载请注明出处 https://blog.csdn.net/abv123456789/article/details/44195589 关于本系列这个系列首先是关于Go语言实践的。在项目中实际使用Go语言也有段时间了,一个体会就是不论是官方文档、图书还是网络资料,关于Go语言惯用法(idiom)的介绍都比较少,基本只能靠看标准库源代码自己琢磨,所以我特别想在这方面有一些收集和总结。然后这个系列也是关于设计模式的。虽然Go语言不是一门面向对象编程语言,但是很多面向对象设计模式所要解决的问题是在程序设计中客观存在的。不管用什么语言,总是要面对和解决这些问题的,只是解决的思路和途径会有所不同。所以我想就以经典的设计模式作为切入点来展开这个系列,毕...阅读全文

go中设计模式之结构型模式

外观模式 1. 定义: 外部与一个子系统通信必须通过一个统一的对象进行,为子系统中的一组接口提供一致界面。 2. 代码示例: // 定义对外API type API interface { Test() } func NewAPI() API { return apiImpl{newMod()} } type apiImpl struct { m mod } func (a apiImpl) Test() { a.m.mod() } // 需要交互的内部模块 type mod interface { mod() } func newMod() mod { return modImpl{} } type modImpl struct { } func (m modImpl) mod() { }...阅读全文

博文 2019-06-20 17:03:16 wx5cf612fe3a728

Golang设计模式(工厂模式)

factory.go // factory package factory import ( "errors" "fmt" ) const ( Cash = 1 DebitCard = 2 ) type PaymentMethod interface { Pay(amount float32) string } func GetPaymentMethod(m int) (PaymentMethod, error) { switch m { case Cash: return new(CashPM), nil case DebitCard: return new(DebitCardPM), nil default: return nil, errors.New(fmt.Sprintf("Pay...阅读全文

博文 2019-06-23 12:32:38 FredricZhu

消息队列 NSQ 源码学习笔记 (五)

NSQ 的拓扑结构和生产消费端配置 ### 单机模式部署 NSQD 是可以脱离 nsqlookup 做单机部署的。 由于 nsqd 足够轻量,可以把服务部署在消息发布的服务器上,加快 pub 消息的速度,也能兼顾消费端消息的分发 ### 集群模式 NSQD 是一个SPOF的系统,每个服务可以独立部署。当采用集群模式时,建议开启nsqlookup服务,用于管理多个 nsqd 的服务 一般的消息队列都会提供rebalance 的功能,nsqd 是没有的。 不过可以通过nsq\_to\_nsq 做消息的复制,做服务的主备,当服务挂机后,可以切换到另外的服务器做消费。(中间channel 不会切换,因此可能会重复消费,或者丢一定消息) nsqd 正常情况下,如果配置合理,消息是不会落地的。如果需要落...阅读全文

博文 2020-04-09 11:12:00 lpflpf

作为编程语言,go有什么不同?

随着Go语言自身的逐渐优化及Go语言社区的不断发展壮大,go吸引着越来越多的人们来学习,那么go是怎么样?作为编程语言,go有什么不同? 1.面向接口编程;2.使用组合的编程;3.正交性:语言设计的正交性,保证语言的稳定性和简单性;4.少即是多:有且仅有一种方法把事情做好做对;5.并发语言层面支持:并发更好利用多核,有更强的表现力来模拟真实世界;6.开放性:开源,语言的实现对程序员不是个黑盒子,任何想了解语言实现的人都可以参与进来。 Go 没有像JAVA一样,宗教式的完全面向对象设计;完全面向对象设计就是一刀切的宗教式的设计,但其并不能很好的表述这个世界,这就导致其表现力不足,最后通过设计模式和面向切面等设计技巧来弥补语言方面的缺陷;Go是面向工程的实用主义者,其糅合了面向对象的设计,函数式...阅读全文

博文 2019-11-19 15:56:16 zhouzhou2018

【设计模式】【golang源码】 单例模式(Singleton Pattern)

单例模式目的:对象初始化成本比较高,防止一个被多次初始化。 var ( confOnce sync.Once // guards init of confVal via initConfVal confVal = &conf{goos: runtime.GOOS} ) // systemConf returns the machine's network configuration. func systemConf() *conf { confOnce.Do(initConfVal) return confVal ...阅读全文

博文 2019-10-12 14:32:47 山丘

算法篇序章

1.为什么要学数据结构和算法 IT开发工作中,大部分人是从业务开发为出发点的,而业务开发首要的是需求、功能的实现。在项目的里程碑、发版deadline等目标的驱动下,开发同学们往往挣扎于业务苦海,少有时间去思考性能优化和底层调用,往往一套框架和工具拿来即用,CURD不要太舒服。这样的结果就是一方面,第三方API和框架工具的使用大大提升了开发人员的开发效率,但是另一方面,许多开发人员对底层原理和数据结构知之甚少,一旦工具调用出问题则一脸懵B,所谓的开发工程师,无非是API调用工程师。 工作多年,我经历了多次线上生产的性能问题,这些经历生产上一些性能问题往往都是开发同学在对代码细节上考虑不周引起的,而这些操作往往都是对底层逻辑不熟悉导致的,掌握好这些基础写出更加优秀的程序,排查问题时也知道所以然...阅读全文

博文 2018-11-02 13:34:42 YitaiCloud

Java设计模式学习记录-模板方法模式

前言模板方法模式,定义一个操作中算法的骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。模板方法模式概念介绍模板方法模式,其实是很好理解的,具体理解为,定义一个操作中算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法结构即可冲定义该算法的某些特定步骤。模板方法模式是最为常见的设计模式之一,是基于继承的代码复用技术。架构师定义一套骨架,开发工程师按照骨架去实现具体的逻辑。举例在具体的项目中其实使用模板方法的场景有很多,就举我之间遇到过的一个场景吧,这是一个实际的项目,结合这个项目的中的场景可以引出模板方法模式的使用方法,在一个审批流程的项目,会有很多种的申请单,例如:出差申请单、请假申请单、采购申请单、付款申请单等等。每个申...阅读全文

博文 2018-10-22 17:19:34 Enjoyjava

阿里免费分享Java高级开发

课程介绍 当你已经熟练的掌握了面向对象中的各种概念后,是否会对这些知识是如何使用的产生浓厚的兴趣?本课程主要针对于已经掌握了JAVA核心开发技术的读者准备,讲解了JAVA多线程、常用类库、IO编程、网络编程、类集框架、JDBC等与Java实际应用有关的开发技术。 课程目标 • 掌握Java多线程开发、网络编程、JDBC等 适合人群 • Java开发者 课时列表 • 课时1:Eclipse开发工具(Eclipse简介) • 课时2:Eclipse开发工具(使用JDT开发程序) • 课时3:Eclipse开发工具(debug调试) • 课时4:Eclipse开发工具(junit测试工具) • 课时5:Java基础新特性(可变参...阅读全文

设计模式

课程使用语言 Java 1. Singleton 单例模式 保证在内存中只有一个实例。 1.1 饿汉式 类中定义出来此实例类型变量,并且设置为 私有 静态 和 final 的。(new 出实例。也可以用静态语句块方式定义) 类中将构造方法重写为 private 的,且不做任何事情。(其他人 New 不出来) 提供 public 方法返回此实例。 利用:JVM 每个 class 只会 load 到内存一次。 优点:简单实用,推荐使用。 缺点:类装载时就实例化了。(后来的懒加载是使用的时候加载,无此缺点。) 1.2 懒汉式 特点:什么时候用时什么时候初始化。 先声明一个实例(private static),但不初始化。 重写构造方法为 private 的。 在 getInstance 中判断实例...阅读全文

博文 2020-04-05 02:32:42 Robin92

Golang设计模式——单例模式

要点:sync.Once 的应用高并发场景下读写锁 package singleton import "sync" var ( p *Pet once sync.Once ) func init(){ once.Do( func() { p = &Pet{} }) } func GetInstance() *Pet{ return p } type Pet struct { Name string Age int m sync.Mutex } func (p *Pet)GetName()string{ return p.Name } func (p *Pet) GetAge() int{ return p.Age } func(p *Pet) SetName(name string) { p...阅读全文

博文 2020-05-19 05:33:44 筑梦攻城狮

面向对象的设计过程

前言 我一直认为分享的目的不是炫技。 一是,自我学习的总结。 二是,降低他人的学习成本。 三是,别人对自己学习结果的审核。 同时,本次分享有下面四个要素: 观点 本次分享的观点是一个软件工程中的思维方法,不限于编程语言 探讨 我可能理解错的,或者大家没理解的,欢迎大家积极评论,尽可能多互动,目的增加理解 理解 真的希望大家能理解 运用 最重要的,如果你觉着有帮助,一定要去在实际业务中实战 背景 工作中,几乎大家经常抱怨别人写的代码: 没法改 耦合高 无法扩展 今天就来探讨如何克服上面的问题~ 场景 首先问个问题: 平常工作中来了一个业务需求,我们是如何开始写代码的? 我推测大多数人可能: 1、梳理业务 2、设计数据库、接口、缓存 3、评审 4、于是就开始了 怎么怎么样...如果怎么怎么样.....阅读全文

博文 2019-11-18 23:03:05 TIGERB

代码组件 | 我的代码没有else

嗯,我的代码没有else系列,一个设计模式业务真实使用的golang系列。 系列全集 点这 前言 本系列主要分享,如何在我们的真实业务场景中使用设计模式。 本系列文章主要采用如下结构: 什么是「XX设计模式」? 什么真实业务场景可以使用「XX设计模式」? 怎么用「XX设计模式」? 本文主要介绍「组合模式」如何在真实业务场景中使用。 什么是「组合模式」? 一个具有层级关系的对象由一系列拥有父子关系的对象通过树形结构组成。 组合模式的优势: 所见即所码:你所看见的代码结构就是业务真实的层级关系,比如Ui界面你真实看到的那样。 高度封装:单一职责。 可复用:不同业务场景,相同的组件可被重复使用。 什么真实业务场景可以用「组合模式」? 满足如下要求的所有场景: Get请求获取页面数据的所有接口 前端...阅读全文

博文 2020-04-08 20:34:23 TIGERB

Go语言笔记:变量

变量指向一个内存地址,其中存储了某种类型的值。在静态语言中,此内存存储的变量类型不可变。 Go 中的变量如何声明? Go 变量声明可以指定哪些类型? Go 中如何实现类型的转换和断言? 1. Go 中的变量如何声明 使用 var 关键词声明变量,有以下几种可变形式: 简单的类型声明:var a int 声明并赋初值:var a int = 1 或 var a = 1 同时声明多个变量: var a, b = 1, 2 当声明初始值时,可以不用指定类型,Go 会根据赋值判断并自动定义变量的类型。 以下为变量声明的示例: package main import "fmt" func main() { var a int var b int = 2 var c = 3 var d, e = 4, ...阅读全文

代码组件 | 我的代码没有else

嗯,我的代码没有else系列,一个设计模式业务真实使用的golang系列。 前言 本系列主要分享,如何在我们的真实业务场景中使用设计模式。 本系列文章主要采用如下结构: 什么是「XX设计模式」? 什么真实业务场景可以使用「XX设计模式」? 怎么用「XX设计模式」? 本文主要介绍「组合模式」如何在真实业务场景中使用。 什么是「组合模式」? 一个具有层级关系的对象由一系列拥有父子关系的对象通过树形结构组成。 组合模式的优势: 所见即所码:你所看见的代码结构就是业务真实的层级关系,比如Ui界面你真实看到的那样。 高度封装:单一职责。 可复用:不同业务场景,相同的组件可被重复使用。 什么真实业务场景可以用「组合模式」? 满足如下要求的所有场景: Get请求获取页面数据的所有接口 前端大行组件化的当今...阅读全文

博文 2020-04-11 20:32:47 TIGERB

C++服务端面试准备(2)MySQL相关

声明:本文内容纯属博主自己查找和归纳的个人所需的知识点,仅作参考,如有错误,博主强烈希望您指出。如果您是某个知识点的原创博主,如有需要,可联系本人加上链接。本文内容会根据博主所需进行更新,希望大家多多关照。 MySQL底层数据结构 B+树 存储引擎之二:InnoDB与Myisam InnoDB Myisam 事务 支持 不支持 外键 支持 不支持 锁 表锁、行锁 表锁 总行数 需要扫描整个表 直接读取 文件 .idb数据文件和它的.frm文件,表的大小只受限于操作系统文件的大小,一般为 2GB .frm文件存储表定义。数据文件的扩展名为.MYD (MYData)。索引文件的扩展名是.MYI (MYIndex)。 使用环境 都符合要求的情况下,改动多的时候 都符合要求的情况下,查找多的时候 自...阅读全文

博文 2020-04-07 18:32:47 DX3906