Go语言
文章平均质量分 60
hello_bravo_
这个作者很懒,什么都没留下…
展开
-
67--71 二分查找
67 查找插入位置力扣https://leetcode-cn.com/problems/N6YdxV/func searchInsert(nums []int, target int) int { start:=0 end:=len(nums)-1 for start<=end{ mid:=(start+end)/2 if nums[mid]==target{ return mid }else if nums[mid] >target{ //target在原创 2021-12-05 18:02:08 · 127 阅读 · 0 评论 -
golang--内存管理器
一.前言笔者在经过了前期基础学习后,用go语言来实现自己面临的业务问题已经不再是问题,所以拥有了另一方面的求知欲--go语言自身的各种包,各种机制是如何实现的,本章主要在探究go语言的内存分配器,希望能用本文讲清楚go语言内存分配器的机制,帮助大家更好地理解go语言的运行机制。二.简介不同于c语言使用malloc和free来主动管理内存,golang让程序员避免了这一切繁杂的操作,它通过escape analysis来分配内存,通过garbage collection(gc)来回收内存,本文主要原创 2021-07-25 10:41:39 · 475 阅读 · 2 评论 -
golang 解析 --- 进程,线程,协程
一.背景在并发编程中进程和线程是不可忽略的两个概念,他们很好的完成了操作系统或者服务对于高并发的需求,然而随着时代的进步,协程的概念应运而生,本文旨在解释协程相对于进程和线程在高并发环境下的优势,所以会先介绍进程,线程,最后讲解协程的调度方式。二.详细介绍2.1 进程2.1.1 概念进程基本上是一个正在执行的程序,它是操作系统中最小的资源分配单位。2.1.2 结构当一个程序被加载到内存中并成为一个进程时,它可以分为四个部分——堆栈、堆、文本和数据。下图显示了主内存中进程的简化布局原创 2021-07-17 11:58:19 · 2565 阅读 · 0 评论 -
Go实现设计模式--命令模式
文章目录关于命令模式的例子逻辑关系定义关于命令模式的例子客户点单,创造订单给服务员,服务员将订单给厨师,厨师烹饪。用户使用遥控器,创造命令对象(关电视)给遥控器,遥控对象(电视)关闭。遥控器代码的简单示例:逻辑关系实现遥控器,遥控器有插槽,一个插槽对应一个command对象,插槽的下按对应command对象的命令,这样遥控器不用管这个命令的具体实现,只要调用自己的插槽就可以了。这里的...原创 2020-04-05 20:04:56 · 287 阅读 · 0 评论 -
Go实现设计模式--工厂模式
文章目录定义实例剖析问题1 简单工厂的学习分析1行动1问题2分析2行动2定义定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。实例剖析问题1 简单工厂的学习你有一个披萨店,你的披萨店有orderPizza()函数,用于新建一个披萨,旧的代码如下(此处简化书上的代码)orderPizze(ptype string)pizza{ Pizza ...原创 2020-03-22 16:47:23 · 794 阅读 · 0 评论 -
Go实现设计模式--装饰者(器)模式
文章目录定义介绍代码示例定义动态的将责任附加到对象上。若要拓展功能,装饰者提供了比继承更有弹性的替代方案。介绍意图:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。主要解决:一般的,我们为了扩展一个类经常使用继承方式实现,由于继承为类引入静态特征,并且随着扩展功能的增多,子类会很膨胀。何时使用:在不想增加很多子类的情况下扩展类。如何解决:将具体功能...原创 2020-03-18 23:35:26 · 274 阅读 · 0 评论 -
Go实现设计模式--观察者模式
@TOC定义当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。介绍意图 :定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。主要解决:一个对象状态改变给其他对象通知的问题,而且要考虑到易用和低耦合,保证高度的协作。何时使用:一...原创 2020-03-14 16:14:53 · 400 阅读 · 0 评论 -
Go实现设计模式--策略模式
go语言中有方法和接口方法:在函数的func和函数名间增加一个特殊的接收器类型,接收器可以是结构体类型或非结构体类型。接收器可以在方法内部访问。创建一个接收器类型为Type的methodName方法。func (t Type) methodName(parameter list) {}接口:接口是方法(方法签名,method signature)的集合。当一个类型定义了接口中的所有方...原创 2020-03-12 07:51:04 · 352 阅读 · 0 评论 -
Go语言--Go Moudule系列文章学习
最新发表的GO1.14支持在生产环境中使用Module Support,此文通过阅读官方的系列文档给出我自己的个人总结。Part1 Using Go Modules简单定义,Module是存储在文件树中的Go软件包的集合,其根目录中有go.mod文件。go.mod文件定义模块的模块路径(这也是用于根目录的导入路径)及其依赖关系要求,这些依赖关系是为了能成功build所必须的其他模块。 每个...原创 2020-03-07 14:40:30 · 493 阅读 · 0 评论 -
Go语言--opentracing-go
关于opentracing的简单介绍什么是opentracing?OpenTracing的数据模型opentracing中的跟踪链由span隐性的定义。可别的,跟踪链可以认为是span的有向无环图(DAG),spans之间的边称为References。以下是一个跨度的例子图:解析为时间轴可视化的图:每个span封装以下的状态:(1)操作名称(2)开始时间戳(3)完成时间戳(...原创 2020-02-27 23:12:03 · 2862 阅读 · 0 评论 -
golang知识点--context
概述context包定义了context的类型,该类型在api和进程之间传递deadline,取消信号和其他请求范围的值。向服务器的传入请求应创建一个上下文,而对服务器的传出调用应接受一个上下文。 它们之间的函数调用链必须传播Context,可以选择将其替换为使用WithCancel,WithDeadline,WithTimeout或WithValue创建的派生Context。 取消上下文后,...原创 2020-02-25 16:22:31 · 295 阅读 · 0 评论 -
回调函数学习
回调函数定义回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。机制定制一个回调函数提供函数实现的一方在初始化的时候,将回调函数的函数指针注册给调用者当特定的事件或条件发生...转载 2020-02-24 16:14:29 · 157 阅读 · 0 评论 -
go语言--new与make的区别
new与make的区别:new用来分配内存,不初始化内存,只会将内存置0【返回一个指针,该指针指向新分配的,类型为T的零值】make:只用于slice,map,channel的创建,并返回类型为T(非指针)的已初始化(非0值)的值【这三种类型本质上为引用类型,使用前必须初始化】共同点:都在堆上分配内存,但是行为不同,适用于不同的类型new分配内存make初始化new([]int):返...原创 2020-02-23 15:49:50 · 404 阅读 · 0 评论 -
Defer,Panic,Recover简单应用
Defer概述defer语句将函数调用推送到列表上。 周围函数返回后,将执行已保存的呼叫列表。 Defer通常用于简化执行各种清理操作的功能。例子:func CopyFile(dstName, srcName string) (written int64, err error) { src, err := os.Open(srcName) if err != nil { ...翻译 2020-02-22 16:21:47 · 176 阅读 · 0 评论 -
根据顺序构造二叉树
https://leetcode-cn.com/problemset/all/?search=%E5%89%8D%E5%BA%8F105 前序中序106 中序后序889 前序后序//前序中序func pre_order(leftpre,rightpre,leftin,rightin int,pre,in []int) *TreeNode{ if leftpre>r...原创 2019-09-11 22:09:11 · 572 阅读 · 0 评论 -
动态规划学习总结:golang
动态规划https://blog.csdn.net/qq_41785863/article/details/81457126动态规划0:1背包:import ( "fmt")func main() { var n,v int //n for number //v for package fmt.Scanf("%d %d",&n,&v) w:=make(...原创 2019-06-15 10:55:20 · 493 阅读 · 0 评论 -
GO语言基础及特性
Go预言师强类型语言(静态类型语言) Go语言编写规范: 例子: package main import “fmt” func main(){ fmt.Println(“hello world!”); } (1)package声明,表示该Go代码所属的包,要生成Go的可执行文件,必须建立一个名字为main的包,并且在包中含有一个叫main()的函数(该函数是Go可执行程序的执行原创 2017-05-04 20:43:23 · 787 阅读 · 0 评论 -
Go语言的接口机理
“非侵入式”接口的实现原理 主要用法 (1)从类型赋值到接口 (2)接口查询 (3)接口之间赋值(1)类型赋值给接口 例子package mainimport "fmt"type ISspeaker interface{ Speak()}//接口type SimpleSpeaker struct{ Message string}//类型func (speaker *Simp原创 2017-05-15 18:33:03 · 1495 阅读 · 0 评论 -
Go语言的匿名函数与闭包
匿名函数:由一个不带函数名的函数声明和函数体组成func(a,b int,z float64)bool{ return a*b<int(z)}匿名函数可以直接赋值给一个变量或直接执行闭包: 概念: 闭包是可以包含自由变量(未绑定到特定对象)的代码块,这些变量不在这个代码块内或者任何全局上下文中定义,而是在定义代码块的环境中定义。要执行的代码块(由于自由变量包含在代码块中,所以这些自由变量原创 2017-05-08 16:13:20 · 4608 阅读 · 0 评论 -
Go语言并发
协程:本质上是一种用户态线程,不需要操作系统来进行抢占式调度,且在真正的实现重寄存于线程中,因此,系统开销极小,可以有效提高线程的任务并发性,从而避免多线程的缺点。使用协程的优点是编程简单,结构清晰;缺点是需要语言的支持。 协程最大优势:”轻量级”,可以轻松创建上百万个而不会导致系统资源衰竭,线程和进程最多不超1万个 Go语言支持协程(轻量级线程) (1)Go语言采用消息机制作为通信方式 (原创 2017-05-09 20:03:37 · 364 阅读 · 0 评论 -
GO语言interface
接口特性 (1)接口是一个或多个方法签名的集合 (2)只要某个类型拥有该接口的所有方法签名,即算实现该接口,无需显示声明实现了哪个接口,称为Structural Typing (3)接口只有方法声明没有实现,没有数据字段 接口实现的例子package mainimport "fmt"type USB interface{ Name() string Connect()}type P原创 2017-06-04 20:53:21 · 346 阅读 · 0 评论 -
GO语言的reflection
PS:我是看视频学习的,然后这是视频地址 http://video.tudou.com/v/XMTc4OTcwMjY4NA==.html 如果大家有需要可以直接去看,感觉讲的满全面的优点:反射可大大提高程序的灵活性,使得interface有更大的发挥空间 反射使用TypeOf和ValueOf函数从接口中获取目标对象信息 基本应用的一个例子package mainimport "fmt"im原创 2017-06-04 21:43:58 · 555 阅读 · 0 评论 -
GO http的一些初级小例子
第一个简单例子package mainimport "io"import "log"import "net/http"func sayHello(w http.ResponseWriter,r *http.Request){ io.WriteString(w,"Hello world,this is version one.") }func main(){ //set原创 2017-06-06 19:11:20 · 918 阅读 · 0 评论 -
GO语言slice
切片slice 本身不是数组 作为变长数组的替代方案,可以关联底层数组的局部或全部 为引用类型 可以直接创建或者从底层数组获取生成 创建使用make([]T,len,cap) len是元素的数量,cap是获取容量(cap可以省略)var s1 []int 这就是一个slice,里面没有三个点或者数字,有的话就是数组 slice如果是引用的已有数组的一段,那么当我们的slice改变的时原创 2017-06-03 22:12:02 · 313 阅读 · 0 评论 -
GO语言function
Go语言不支持嵌套,重载和默认参数 但是 (1)无需声明原型 (2)不定长度变参 (3)多返回值 (4)命名返回值参数 (5)匿名函数 (6)闭包函数形式 返回值仅仅一个那么返回值就不用小括号可以直接用 func name(参数)(返回值){}多返回值例子package mainimport "fmt"func A()(int,int,int){ a,b,c:=1,2,3原创 2017-06-04 10:37:20 · 654 阅读 · 0 评论 -
GO语言结构体
Go语言的struct和C语言的很相似 简单的struct定义package mainimport "fmt"type test struct{ Name string Age int}func main(){ a:=test{"yc",22} fmt.Println(a) }或者package mainimport "fmt"type test struct{ Nam原创 2017-06-04 11:36:40 · 1995 阅读 · 1 评论 -
Go语言二维数组的传参
用Go语言实现动态规划问题的时候在二维数组的传参改变这个地方有了点疑惑,差了会儿资料,然后达到了目的(其实还是想知道切片的话可不可以二维),所以记录一下package mainimport "fmt"//n=7func matrixChainOrder(p []int,m *[7][7]int,s *[7][7]int,n int){ for i:=0;i<n;i++{ m[i]原创 2017-05-31 15:41:54 · 4719 阅读 · 0 评论 -
Go语言简单源代码剖析
https://github.com/beego/samples/tree/master/WebIM 项目在github上面的地址 是beego提供的一个应用小项目,只是对本人第一次剖析go语言的一个小记录,也算自己剖析代码的思路记录,希望对他人也能有所帮助 (1)阅读readme文档,知晓项目大致内容,项目用到的各种配置文件 (2)查看main包文件WebIM.goimport (原创 2017-07-07 16:31:19 · 4845 阅读 · 0 评论 -
私有网络(腾讯云)
私有网络(VPC)概念:概念:私有网络是指用户在腾讯云上建立的一块逻辑隔离的网络空间(如右图所示)。在私有网络内,用户可以自由定义网段划分、IP地址和路由策略。与基础网络相比,私有网络更适合有网络自定义配置需求的场景。作用:托管你在云上的服务资源优势:完全掌握你的私有网络环境,包括自定义网段划分,IP地址和路有策略等,并通过网络ACL和安全组等实现多层安全防护。私有网络特色:(原创 2017-07-17 17:26:13 · 9839 阅读 · 0 评论 -
GO语言并发
Go语言高并发优势的原因: goroutine每个实例占据的栈内存极小,故减少了创建和销毁的开销,是制造Go号称的高并发的根本原因。并发不是并行 并发:主要由切换时间片来实现”同时”运行 并行:直接利用多核实现多线程的运行,但是Go可以设置使用核数,以发挥多核计算机的能力goroutine奉行通过通信来共享内存,而不是共享内存来通信当main()结束的时候他不会管你的线程是否结束package原创 2017-06-05 22:34:25 · 1163 阅读 · 0 评论 -
GO语言map
map 类似于哈希表或者字典,以key-value形式存储数据 key必须是支持==或!=比较运算的类型,不可以是函数,map或slice 可以用slice或者数组,则这俩有限,最后才用map 使用make创建 map的简单操作package mainimport "fmt"func main(){ var m1 map[int]string m1=map[int]string原创 2017-06-04 09:35:29 · 437 阅读 · 0 评论 -
GO语言method
方法就相当于类的行为,对应于固定的结构体package mainimport "fmt"type A struct{ Name string } type B struct{ Name string } func (a A)Print(){ fmt.Println("A")}func (b B)Print(){ fmt.Println("B")}func main()原创 2017-06-04 18:26:05 · 349 阅读 · 0 评论 -
Go语言网络编程
1.Dial函数 (1)函数原型 func Dial(net,addr string) (Conn,error) net:网络协议的名字 addr:IP地址或域名,端口号以”:”的形式跟随在地址或域名后 例子: TCP链接 conn,err:=net.Dial(“tcp”,”192.158.0.10:2100”) UDP链接 conn.err:=net.Dial(“udp”,”19原创 2017-05-11 17:14:43 · 449 阅读 · 0 评论