Go语言学习笔记(三) [控制结构、内建函数]
日期:2014年7月21日 一、控制结构 1、Go中,只有几个控制结构,它没有do或者while循环,有for,灵活的switch语句和if,在switch中可以接受像for那样可选的初始化语句,另外Go中还提供了类型选择和多路通信转接器的select。Go的控制结构的语法和C相比有所不同,它不需要圆括号,但语句体必须总是包含在大括号内。 2、控制结构语法 1)if-else (1)if后紧跟单个条件 例如:if x > 0 { //{必须和if在同一行,这是Go语法规定的,如果换行写,编译就会报错 return y } else { return x } (2)if后接受初始化语句 例如: m1:=7 if n1:=9; n1 >= m1 { fmt.Print("n1 >= m1") }...阅读全文
求救求救,前段转后端,急需恶补算法,求教各位大神,应该看什么书
目前看的是 数据结构(第二版 严薇敏...阅读全文
Go程序结构 GO GO
Go程序的一般结构:Go程序是通过package来组织的(与python类似)只有package名称为main的包可以包含main函数一个可执行程序有且仅有一个mian包通过import关键字来导入其他非main包通过const关键字来进行常量的定义通过在函数体外部使用var关键字来进行全局变量的声明和赋值通过type关键字来进行结构(struct)或接口(interface)的声明通过func关键字来进行函数的声明Go语言的基础组成包声明引入包函数变量语句&表达式注释Go导入package的格式-- 导入包之后,就可以使用格式
Go自学团队:Day 2:函数声明,流程控制
``` package main //go 语言控制结构 import ( "fmt" "math" ) const ( name string = `sunlong` age int = 10 height int = 180 ) func main() { //fmt.Print( name ) //var age int = 10; //使用函数 control_if() var score = control_switch(20) fmt.Print( "\r\n 你的结果是:" ,score ) control_for() } func control_if(...阅读全文
go语言基础,每天一小例--百钱百鸡
案例描述: 中国古代数学家张丘建在他的《算经》中提出了一个著名的“百钱百鸡问题”:一只公鸡值五钱,一只母鸡值三钱,三只小鸡值一钱,现在要用百钱买百鸡,请问公鸡、母鸡、小鸡各多少只? 案例分析: 如果用一百钱只买一种鸡,那么,公鸡最多20只,母鸡最多33只,小鸡最多300只。但题目要求买100只,所以小鸡的数量在0~100之间,公鸡数量在0~20之间,母鸡数量在0~33之间。我们把公鸡,母鸡和小鸡的数量分别设为cock、hen、chicken,通过上述分析可知: (1)0<=cock<=20; (2)0<=hen<=33; (3)0<=chicken<=100; (4)cock+hen+chicken=100; (5)5*cock+3*hen+chicken/3=100。 与此同时,可知母鸡、...阅读全文
几个常见的数据结构的实现
https://github.com/tommyliu1114/LStructur...阅读全文
Python和C语言先学哪个好?
Python和C语言先学哪个好?其实这种纠结并不只是你有,还有800多万的小伙伴在陪你一起纠结。让我来说,答案很简单:选你感兴趣的!我们都知道,兴趣是好老师,所以培养兴趣很重要。而如果你不确定自己对哪个语言更感兴趣,那么可以参考下面的方案:如果你想做技术,走技术路线,那毫无疑问先学C语言百利而无一害。如果还不确定以后的路想怎么走,那无所谓先学Python还是C,随缘吧。如果确定了不想走技术路线,那么请先从Python开始。其实,从两种语言入门,各有各的好处。从C语言开始入门的话,它的语法结构比较严谨,把C语言学透彻了,再学其他的语言就简单多了,可谓是一通全通。C语言是一种面向过程的语言,而Python是一种面向对象的解释型计算机程序设计语言。先了解什么是面向过程,然后去了解什么是面向对象...阅读全文
清晰架构(Clean Architecture)的Go微服务: 程序结构
我使用Go和gRPC创建了一个微服务,并试图找出最佳的程序结构,它可以用作我未来程序的模板。 我有Java背景,并发现自己在Java和Go之间挣扎,它们之间的编程理念完全不同。我写了一系列关于在项目工作中做出的设计决策和取舍的文章。 这是其中的第一篇, 是关于程序结构的。 程序结构的资源 Go的标准程序结构的最佳资源可能是Github上的标准Go程序结构¹,但它不适合我的项目。在阅读了Sylvain Wallez的文章²之后,我终于得到了一些关于其背后原因的信息。 Go起初是专为API和网络服务器而设计,Github上的大多数Go项目都是以库的形式编写的,因此“标准Go程序结构”可能非常适合。 商业微服务项目是一种完全不同的动物,需要不同的程序结构。但我还是采用了“标准Go程序结构”中适用的...阅读全文
结构体定义时,能grom 和json一起使用么?
求问: type User struct { ID int32 `gorm:"primary_key;AUTO_INCREMENT;not null"` Time int64 Info string `gorm:"type:text;not null"` } type User struct { ID int32 `json:"id"` Time int64 `json:"time"` Info string `json:"info"` } 两个结构体能拼凑成一个么...阅读全文
自适应网站与响应式网站的区别在哪?
自适应网站与响应式网站的区别在哪?两者之间有什么区别吗?对于自适应网站与响应式网站的区别,我想很多人都会有所误解,以为两者是是一样的。其实不是,从网站建设的角度来讲自适应网站建设也是响应式网站建设,响应式网站建设也是自适应网站建设。但是真正的细分起来,自适应网站只是响应式网站的一部分。在这里小编简单化给大家介绍一下。 一、响应式设计与自适应布局的含义: 1、 响应式设计简单来说是一个网站能够兼容多个终端,而不是为每个终端做一个特定的版本。在这里大家可以理解为做一个网站就能适应多种设备,而不用在为每个设备做一个特定的版本,在不同的设备上展现的模式也不一样。响应式可以为不同终端的用户提供更舒适的界面和更好的浏览体验。 2、自适应布局指能使网页自适应显示在不同大小终端设备上新网页设计方式及技术。...阅读全文
Eclipse源码阅读:Go To Resource
Go To Resource是Eclipse的Navigate菜单下的一个子菜单的功能,如下所示: Go To Resource Action是一个RetargetAction,在org.eclipse.ui.ide插件中定义,plugin.xml中关于此action的定义内容为:
数据结构之静态队列go言语实现
package main import ( "fmt" ) type Queue struct { pBase *[6]int pFront,pRear int } func initQueue(q *Queue) { var arr=new([6]int) q.pBase=arr q.pFront=0 q.pRear=0 } func isEmpty(q *Queue) bool { if q.pFront==q.pRear { return true }else { return false } } func isFull(q *Queue) bool { if (q.pRear+1)%6==q.pFront { return true }else { return false } } ...阅读全文
boltdb 源码分析-数据结构-1
boltdb 数据结构 boltdb暴露给用户的数据概念较少,只有以下: Options 初始化boltdb时的相关配置选择; DB 整个boltdb的持有者,跟boltdb相关操作都要通过调用其方法发起,是boltdb的一个抽象; Stats 调用DB.Stats()方法返回的数据结构,内包含一些boltdb内部的计数信息,可以供用户查看; Bucket 类似于表的一个概念,在boltdb相关数据必须存在一个Bucket下,不同Bucket下的数据相互隔离,每个Bucket下 有一个单调递增的Sequence,类似于自增主键; BucketStats Bucket的一些统计信息; Tx boltdb的事务数据结构,在boltdb中,全部的对数据的操作必须发生在一个事务之内,boltdb的并...阅读全文
p2p通信协议族的结构设计
在上文的介绍中,出现了多处有关p2p通信协议的结构类型,比如eth.peer,p2p.Peer,Server等等。这里不妨对这些p2p通信协议族的结构一并作个总解。以太坊中用到的p2p通信协议族的结构类型,大致可分为三层: 第一层处于pkg eth中,可以直接被eth.Ethereum,eth.ProtocolManager等顶层管理模块使用,在类型声明上也明显考虑了eth.Ethereum的使用特点。典型的有eth.peer{}, eth.peerSet{},其中peerSet是peer的集合类型,而eth.peer代表了远端通信对象和其所有通信操作,它封装更底层的p2p.Peer对象以及读写通道等。 第二层属于pkg p2p,可认为是泛化的p2p通信结构,比较典型的结构类型包括代表远端通...阅读全文
golang数据结构之map篇
package main import ( "github.com/sanity-io/litter" ) func main() { var mapInt = make(map[int]int) // add for i := 1; i < 10; i++ { mapInt[i] = i } litter.Dump(mapInt) // update mapInt[3] = 0 litter.Dump(mapInt) // del delete(mapInt, 3) litter.Dump(mapInt) // del when iterator for k, v := range mapInt { if v % 2 == 0 { delete(mapInt, k) } } litter....阅读全文
Go语言结构struct
/*640*60,创建于2013-5-24*/ var cpro_id = "u1290382"; 1.struct 简洁 这个的struct和C语言的很相似,模拟出class的功能,但是不完全的!没有构造函数等! 2.struct的申明 [php] package main import "fmt" type Person struct { Age int Name string } func main() { //初始化两种 a := Person{} a.Age = 2 a.Name = "widuu" fmt.Println(a) b := Person{ Age: 24, Name: "widuu", } fmt.Println(b) } [/php] 3.go指针操作 如下我们要...阅读全文
Go使用用两种方式打印自然数
这道题可以作为笔试题,现在给定下面一个条件 go func() { for i := 1; i < 10; i++ { println(2*i - 1) } }() go func() { for i := 1; i < 10; i++ { println(2 * i) } }() 让你使用多种方式将奇偶合并,并打印自然数,这道题目很简单,思考几秒钟,看看你的实现。。。。。。 好了我的实现比较low,没办法,golang 的代码怎么写都那个怂样。。。 1.第一种方式 package main import ( "fmt" "time" ) var count = 15 func ping(c chan<- int) { for i := 1; i < count; i++ { c <- 2*...阅读全文
Go语言interface底层实现
Go的interface源码在Golang源码的runtime目录中。 Go在不同版本之间的interface结构可能会有所不同,但是,整体的结构是不会改变的,此文章用的Go版本是1.11。 Go的interface是由两种类型来实现的:iface和eface。 其中,iface表示的是包含方法的interface,例如: type Person interface { Print() } 复制代码而eface代表的是不包含方法的interface,即 type Person interface {} 复制代码或者 var person interface{} = xxxx实体 复制代码eface eface的具体结构是: 一共有两个属性构成,一个是类型信息_type,一个是数据信息。 其中...阅读全文
go 速学 - 11 - 结构
目录 结构 概念 创建结构 使用结构 值传递 匿名结构 结构的组合 概念 定义一个组合 使用组合 摘要 定义结构,使用结构,值传递与指针传递,匿名结构,结构的组合 结构 概念 Go 中没有 class 的概念,结构可以完成类似功能 支持指向自身的指针类型成员 支持匿名结构 支持 == 和 != 运算符 创建结构 格式 type
Golang socket数据结构
------ *编程接口* ------ func Listen(net, laddr string) (Listener, error) func (*TCPListener) Accept (c Conn, err error) func (c *conn) Read(b []byte) (int, error) func (c *conn) Write(b []byte) (int, error) -------- *内部数据结构* -------- *Listener与TCPListener* 简单来说,一个是接口,一个是具体实现。因为golang支持tcp、udp等各种协议,天然使用golang的interface。 Listener定义了针对socket操作的各种接口: type...阅读全文
程序猿修仙之路--数据结构之你是否真的懂数组?
但凡IT江湖侠士,算法与数据结构为必修之课。早有前辈已经明确指出:程序=算法+数据结构 。要想在之后的江湖历练中通关,数据结构必不可少。数据结构与算法相辅相成,亦是阴阳互补之法。 开篇 说道数组,几乎每个IT江湖人士都不陌生,甚至过半人还会很自信觉的它很简单。 的确,在菜菜所知道的编程语言中几乎都会有数组的影子。不过它不仅仅是一种基础的数据类型,更是一种基础的数据结构。如果你觉的对数组足够了解,那能不能回答一下: 数组的本质定义? 数组的内存结构? 数组有什么优势? 数组有什么劣势? 数组的应用场景? 数组为什么大部分都从0开始编号? 数组能否用其他容器来代替,例如c#中的List
Golang中JSON的使用
GO Json author: qcliudate: 2015/07/21 Abstrct 介绍go语言中json的使用 json json是一种传输格式,类似与XML,与XML相比可读性略差,但是传输效率高。 GO Json go语言中提供了json的encoder,可以将数据结构转换为json格式。在使用之前,需要导入包 import "encoding/json" Encode 使用 func NewEncoder(w io.Writer) *Encoder 创建一个json的encode。 file, _ := os.Create("json.txt") enc := json.NewEncoder(file) err := enc.Encode(&v) 数据结构v会以json格式写...阅读全文
golang heap container balance request
package main import ( "container/heap" "fmt" "log" "math/rand" "time" ) const ( MaxQueueLength = 10 MaxRequesters = 2 Seconds = 2e9 ) type Request func() func main() { requests := make(chan Request) for i := 0; i < MaxRequesters; i++ { go requester(requests) } NewBalancer(2).Balance(requests) } func requester(work chan Request) { for { time.Sleep(t...阅读全文
Go语言程序结构
Go程序主要由以下几部分组成: 包声明 导入包 函数 变量 语句和表达式 注释 让我们来看看,将打印字的简单 "Hello World" 的代码: package main import "fmt" func main() { /* This is my first sample program. */ fmt.Println("Hello, World!") } 让我们来看看上面的程序的各个部分: 程序包体的第一行定义了这个程序包的名称。这是一个必须声明为Go程序运行在什么包。main包是起始点来运行程序。每个包都有一个与之关联的路径和名称。 下一行import "fmt" 是告诉编译器去包含文件在包fmt的预处理命令。 下一行 func main()主要功能是为程序执行的开始。 下一行/...阅读全文
go语言结构体定义使用
package main import ( "fmt" "sync" ) type Info struct { info map[int]string mu sync.RWMutex } func main() { x := &Info{info: make(map[int]string)} x.Set(1, "golang") s := x.Get(1) fmt.Println(s) } func (s *Info) Get(i int) string { s.mu.RLock() info := s.info[i] s.mu.RUnlock() return info } func (s *Info) Set(i int, name string) bool { s.mu.Lock() ...阅读全文
[golang] 数据结构-直接插入排序
理直接插入排序,也是一种非常简单的排序算法。第一轮先从第二个元素开始,和第一个比较,如果较小就交换位置,本轮结束。第二轮从第三个元素开始,先与第二个比较,如果较小就与第二个交换,交换后再于第一个比较。如此循环直至最后一个元素完成比较逻辑。 复杂度最好的情况下,直接插入排序只需进行n-1次比较,0次的交换。平均下来时间复杂度为 O(n^2)。由于是每个元素逐个与有序的队列进行比较,所以不会出现相同数值的元素在排序完成后交换位置。所以直接插入排序是种稳定的排序算法。 代码 package main import ( "fmt" "math/rand" ) func main() { var length = 10 var tree []int for i := 0; i < length; i+...阅读全文
简单工厂模式
介绍 简单工厂模式属于创建型模式又叫做静态工厂方法模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。 简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。 go 语言没有构造函数一说,所以一般会定义NewXXX函数来初始化相关类。 NewXXX 函数返回接口时就是简单工厂模式,也就是说Golang的一般推荐做法就是简单工厂。 结构图 比如一个生产电脑的工厂,既能生产联想电脑,也生产戴尔电脑,我们用简单工厂模式来实现,如下图: Computer为接口,LenovoComputer,DellComputer分别实现此接口。 ComputerFactory用于根据类型判断是生成联想还是戴尔电脑 图片.png 示例代码 package m...阅读全文
Go语言从入门到精通-03 | 复杂数据类型
有的时候基本的数据类型可能不能满足我们开发的需求,我们可能需要一些数据类型的组合。比如我们要把一个班级里面所有人的平均成绩存在一起,然后计算整个班级的平均成绩。大家想一下,这种情况下应该用什么类型的变量? 数组 接着上面我们举的例子,如果要计算平均成绩怎么办呢?这就用到了数组的概念。数组从字面上理解就是一组数,它是指类型相同的一组数。这组数在内存中是顺序存储的,因此,我们可以通过数组名字的索引来访问其中的数据,而不同定义多个变量。 图1 数组内部结构示意图 如图1是数组内部结构的示意图,我们可以通过数组的索引访问数组内部的数据。通常数组的索引是从0开始的,0表示第一个元素。下面我们给出一个Go语言的具体示例: 上面数组数量,如果有初始化的情况下可以不必指定大小,此时编译器会根据初始化的数据数...阅读全文
35岁IT人该如何规划
现状:学历:大专 数控技术 ;本科 自考计算机及应用。家庭:单身。职业:Golang开发 ,失业中。成都Golang做游戏的多,没有游戏经验。房产:新都地铁口88平房子一处,月还贷2700。车子:家用代步车。规划:职业:1.IT行业写代码,java 做微服务。2.做售前,转销售。(个人性格适合做销售)3.创业(读完MBA)。核心:构建自己的商业系统(开公司):锤炼核心能力,构建人脉圈。改变财务结构(多种收入来源,特别是睡后收入):购入资产,等待升值。终极目标:财务自由,灵魂自由。途径:1.锻炼身体保持健康,穷人生病生不起。我不会赚大钱,但我不生病会省很多钱。2.调整自己。生活是最好的修行,能力如果欠缺就好比必修课,修不过一直重修。我的抗压能力,在高中时紧张就会失眠,发挥失常。3.人生就是问题...阅读全文
程序猿修仙之路--数据结构之你是否真的懂数组?
但凡IT江湖侠士,算法与数据结构为必修之课。早有前辈已经明确指出:程序=算法+数据结构 。要想在之后的江湖历练中通关,数据结构必不可少。数据结构与算法相辅相成,亦是阴阳互补之法。 开篇 说道数组,几乎每个IT江湖人士都不陌生,甚至过半人还会很自信觉的它很简单。的确,在菜菜所知道的编程语言中几乎都会有数组的影子。不过它不仅仅是一种基础的数据类型,更是一种基础的数据结构。如果你觉的对数组足够了解,那能不能回答一下: 数组的本质定义? 数组的内存结构? 数组有什么优势? 数组有什么劣势? 数组的应用场景? 数组为什么大部分都从0开始编号? 数组能否用其他容器来代替,例如c#中的List
LevelDb之manifest文件
从这篇文章开始想写写leveldb的小知识。先了解manifest文件,因为这个文件关系到实例的读取。至于这个文件的内部结构以及如何来的,等会再聊。 if instances[Name], err = leveldb.OpenFile(Dir, instance); err != nil { return errors.New(fmt.Sprintf(`leveldbs: err while open %s : %s`, Dir, err.Error())) } 这段代码在manifest文件损坏的情况下会出现报错,报错内容: ERROR leveldb: manifest corrupted: missing [file=MANIFEST-*******] 报错原因:leveldb在存储过...阅读全文
高频率抽样统计工具 cpustat
cpustat 是一个高频率抽样统计工具,目前支持的平台只有Linux。用来统计CPU的利用率,可以以表格形式或者动态滚动显示数据。   功能结构图: }而 eface代表的是不包含方法的interface,即type Person interface {}或者var person interface{} = xxxx实体efaceeface的具体结构是:一共有两个属性构成,一个是类型信息 _type,一个是数据信息。 其中, _type可以认为是Go语言...阅读全文
Golang初级系列教程-控制结构-defer语句
Golang初级系列教程-控制结构-defer语句 defer 语句是用来在函数返回之前执行特定功能的关键字。有啥用处呢?在编程时,通常需要 allocate/block/lock 资源,但是当程序崩溃时,代码无法执行到 un-allocate/unblock/unlock 资源的地方,可能导致死锁等问题得发生。通过使用 defer 语句,可以保证无论什么情况发生,这些资源总是会被释放的。 在下面的代码中,假设要执行一系列的数据库操作:打开数据库连接,执行操作。之后假设,数据库操作出现异常,程序会立即返回。如果什么也不做,数据库连接将会一直持续,如果使用 defer 语句,可以保证在程序返回之前,数据库连接被正确的关闭。 package main import "fmt" func conn...阅读全文
Go 控制结构
在 Go 中只有很少的几个控制结构 。这里没有 do 或者 while 循环,只有 for。有(灵活的) switch 语句和 if,而 switch 接受像 for 那样可选的初始化语句。还有叫做类型选择和多路通讯转接器的 select。同 C 相比语法有所不同:无需圆括号,而语句体必须总是包含在大括号内。 1、if-else Go 中的 if 和 C 语言中的 if 很相似,区别主要有三点: 执行体必须要有大括号,且左大括号必须和 if(或 else) 在同一行即使只有一条语句; 条件语句不需要圆括号; 条件语句中可以包含初始化语句,通常用于设置一个(局部)遍量。 if x > 0 { // 左括号必须在同一行 return y } else { return x } if f, err...阅读全文
golang学习笔记8:控制结构
if-else 结构if condition1 { // do something}else if condition2 { // do something else}else { // catch-all or default}关键字 if 和 else 之后的左大括号 { 必须和关键字在同一行,如果你使用了 else-if 结构,则前段代码块的右大括号 } 必须和 else-if 关键字在同一行。这两条规则都是被编译器强制规定的。多返回值函数func mySqrt(f float64)(v float64, okbool){iff <0 { return } // error casereturn math.Sqrt(f),true}func main(){t, ok := mySqrt...阅读全文
golang学习记录 1---golang学习方向, 概述
Golang语言的学习方向 Golang 的概述 Golang 的开发工具的介绍 一、Golang语言的学习方向 Golang 语言, 可以简称为go。 1. 方向 区块链研发 Go服务器端 游戏软件 Golang分布式计算 云计算软件 二、Golang 的概述 1. Go 语言的核心开发团队-三个大牛 肯-汤普森 Ken-Thompson 罗布-派克 Rob-Pike Robert-Griesemer 2. Google 创造 Golang 的原因 计算机硬件更新频繁, 不能发挥出多核多CPU的作用 软件越来越复杂, 缺乏一个简单易维护的编程语言 3. Golang 的发展历程 2007 年,谷歌工程师 Rob Pike, Ken Thompson 和 Robert Griesemer 开...阅读全文
golang url 链接地址解析包
golang url 链接地址解析包 url 编码 QueryEscape 将字符地址转为安全地址 func QueryEscape(s string) string p := url.QueryEscape("/user?id=12") // >>> %2Fuser%3Fid%3D12 QueryUnescape 还原QueryEscape 转码 func QueryUnescape(s string) (string, error) URL 类型 URL 结构 type URL struct { Scheme string Opaque string // 编码后的不透明数据 User *Userinfo // 用户名和密码信息 Host string // host或host:port...阅读全文
数据结构-队列链式存储结构的实现(golang)
//队列的链式存储结构的实现 //队列链式存储结构体 type LSQueue struct { front *LSQNode //头指针 rear *LSQNode //尾指针 count int //队列的线性长度 } //队列链式存储结构节点 type LSQNode struct { elem ElemType //储存的数据 next *LSQNode //指向下一个节点的指针 lsQueue *LSQueue //所属队列 } //初始化队列 func InitLSQueue() *LSQueue { lsQueue := new(LSQueue) node := new(LSQNode) node.elem = nil node.next = nil node.lsQueue ...阅读全文
go语言有关结构体的问题
go语言中,对于结构体,如果结构成员一样,但名字不一样,也认为是不同的结构。 package main import "fmt" type person struct { name string age int } type person2 struct { name string age int } func main() { bb := make([]person, 1, 50) bb[0].name = "xiaym" bb[0].age = 35 //cc := bb[:] aa := make([]person2, 1, 50) aa = bb[:] // cannot use bb[:] (type []person) as type []person2 in assignmen...阅读全文
golang解析复杂结构
怎样把以下的结构解析成go的数组或者其他的数据结构,章节可能有很多层不固定,我尝试了几种方式都不成功,对go不熟悉,谢谢 ``` * [第一章](chapter1/readme.md) * [第一节](chapter1/1.1.md) * [第一节1](chapter1/1.1.1.md) * [第二节](chapter1/1.2.md) * [第二章](chapter2/readme.md) * [第一节](chapter2/2.1.md) * [第二节](chapter2/2.2.md) ``...阅读全文
go lang学习笔记——接口
go接口非常强大,除了作为一般的接口使用外。它还是go的运行时多态的基础。更能提供超越boost::any的能力。许式伟的《go语言编程》一书中有对接口的机制作较深入的剖析和介绍。 结合书中描述再加上我自己的理解。整理了一下go接口的数据结构和基本操作的描述。 有必要说明的是,以下结构引用的部分书中代码,并且做了极大的精减,只为了能用最简单的方式描述并理解go接口的实现原理。如果我的理解和实现情况相差千里,还望指正。 类型的数据结构 typedef struct _MemberInfo { const char * tag; // 方法原型 void * addr; // 方法地址(函数入口地址) } MemberInfo; typedef struct _TypeInfo { Member...阅读全文
清晰架构(Clean Architecture)的Go微服务
我用Go和gRPC创建了一个微服务项目,并试图找出最好的程序结构,它可以作为我其他项目的模板。我还将程序设计和编程的最佳实践应用于Go Microservice程序,例如清晰架构(Clean Architecture),依赖注入(Dependency Injection),日志记录,错误处理等。我有Java背景,并发现自己在Java和Go之间挣扎,它们之间的编程理念完全不同。我写了一系列关于在项目工作中做出的设计决策和取舍的文章。 阅读这些文章不需要熟悉Go,但如果你有Go基础绝对会有帮助。如果你不会Go并且无法确定文章中的代码在做什么,那么你需要从这里Go by Example¹(你不必完成里面的所有主题,只需要前面几个)学习一些基本的Go。本系列中的“事务支持”涉及到数据库,需要Go中的...阅读全文
golang 工程中包的使用
同一个包的不同部分是可以放在同一个文件夹下的多个文件中的。 package main import "fmt" /* // 这里放在同一文件中没有任何的问题 type rect struct{ width, height int } func (r *rect) area() int { return r.width * r.height } func (r *rect) perim() int { return 2 * r.width + 2 * r.height } */ func main(){ r := rect{width:10,height:5} fmt.Println("area:",r.area()) fmt.Println("perim:",r.perim()) rp :=...阅读全文
Golang算法和数据结构
排序 2.选择排序 package main import "fmt" //从未排序数组中找到最小元素,将它和数组第1个元素交换,在剩下数组中找到最小元素,与第2个数组交换... func SelectSort(arr *[5]int) { n := len(arr) for i := 0; i < n-1; i++ { min_idx := i for j := i + 1; j < n; j++ { if arr[j] < arr[min_idx] { min_idx = j } } if min_idx != i { arr[i], arr[min_idx] = arr[min_idx], arr[i] } fmt.Printf("第%d次排序 %v\n", i+1, *arr) } ...阅读全文
求教数据结构,golang实现出栈入栈覆盖第一个元素
**这个程序有问题,将元素入栈时,会覆盖第一个元素,最后栈中只留下一个2,求大神解答** ```go package main import ( "log" "fmt" ) type Stack struct { size int64 //栈的容量 top int64 //栈顶 data []interface{} } func MakeStack( size int64) Stack{ s :=Stack{} s.size=size s.data =make([]interface{},size) return s } //入栈,空间不足,逐段升高 func (s Stack) Push(e interface{}) bool{ if s.IsFull(){ log.Printf("栈满,...阅读全文
go语言示例:for语句
go语言唯一的循环结构是for语句。这里有三种基本的for循环结构。 最简单的形式是只有一个单一的条件语句。 一个典型的for语句是具有初始化语句,条件语句,和执行后语句的。 for语句如果没有条件语句会一直循环直到有break语句或者return语句返回的时候。 Plain Text code ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 package main import "fmt" func main() { i := 1 for i <= 3 { fmt.Println(i) i = i + 1 } for j := 7; j <= 9; j++ { fmt.Println(j) } for { fmt.Println("loop"...阅读全文