
go
少女,你的代码掉了
头秃少女的日常思考
展开
-
如何手写一个简单的加减乘除的ast树
首先我们需要知道到底怎么给一个树排序的基本规则优先级高的要放在最下面的位置,新节点优先级低于当前比较的节点向上调整直到达到优先级合适的位置,优先级等于或大于当前节点的优先级则向下调整更新。尽量将所有的带有operator的节点放在左边举个例子4 * 1 / 2 + 3 - 2首先我们解析到第一个符号第二个符号是÷,因为除法和惩罚是同等优先级的,所以在经过判断之后,优先级一致向下调整这里要说明的是一个运算当中因为运算符优先级是不一样的所以一个数字应该与哪个符号结合也是问题那么11 / 2中原创 2020-08-01 21:07:12 · 685 阅读 · 0 评论 -
Go 语言结构体初始化的一些规则
Go语言的风格Go是一门看似简单但是依旧有自己的倔强的语言,对于一些小的细节,在初次学习的以后需要作详细的比较的尝试才可以逐渐熟练的使用这门语言。Go的结构体初始化列一下一个结构体结构type MyStruct struct { Num int Name string}正常的初始化有哪些//1.只声明,后做初始化var s MyStructs.Name = "xiaoming"s.Num = 20//2. 初始化的以后希望给变量赋值var s MyStruct = MySt原创 2020-07-24 20:44:02 · 581 阅读 · 0 评论 -
go test benchmark
benchmark使用方式func Benchmark(b * testing.B) { //与预测无关的代码 b.ResetTimer() for i := 0; i < b.N ; i++ { // 测试代码 } b.StopTimer() //与测试无关的代码}指令方式go test -bench=.go test -bench=. -benchmem ...原创 2019-12-09 17:22:51 · 156 阅读 · 0 评论 -
go 用channel实现对象池并且与sync.Pool对比
标题对象池的实现原料channelselect对象本身import ( "time" "errors" ) type MyObject struct { Value interface{}}type ObjectPool struct { objectChan chan *MyObject}//初始化程序func PoolInit(size int) (...原创 2019-12-09 15:49:11 · 529 阅读 · 0 评论 -
go 单例模式
go的单例模式可以使用系统自带的sync的包。import "sync"type Singleton struct {}var one sync.Oncevar SingletonInstance * Singletonfunc (this* Singleton) getInstance() *Singleton{ one.Do(func() { SingletonIns...原创 2019-12-07 23:55:14 · 96 阅读 · 0 评论 -
go 写个协程池 慎入写的不好
##思路讲解开辟几个固定的协程可供调度,这个大小也是可以指定的channel的作用,用于唤醒协程处理并发关系协程执行的函数结构的存储问题###threadPool的数据结构type ThreadPool struct { ch chan int /*channel*/ size int threadNum int tasks *list.List /*list容器,需要...原创 2019-12-07 18:58:36 · 160 阅读 · 0 评论 -
8 go中的结构体struct
go里面的结构体其实和c++差别不太大,但是仍然有go的特色1.结构体的定义type Human struct{ name string age int weight int}type Student struct{ Human //匿名字段,表示human里面的所有的字段都包含在内 speciality string}2.结构...原创 2019-09-13 13:11:24 · 152 阅读 · 0 评论 -
7 go中的异常处理
go中的异常处理有三个关键字defer panic recoverdefer是用来解决异常发生之后有关资源的释放问题,抛出异常之后仍然会执行defer所作用的函数,可以用原来释放资源。panic是用来抛出异常然后如果没有捕获异常的处理,就会导致程序终止。应该养成比较好的习惯,就是每一个资源打开之后就使用defer关闭资源import( ”fmt“)func main...原创 2019-09-13 13:09:43 · 223 阅读 · 0 评论 -
6 go中defer关键字的用法
defer关键字defer是go里面处理异常的一个关键字,应用场景类似于java里面的finally,使用的时候就是所有的其他的正常的函数进程执行完毕之后都要执行defer。也就是被defer修饰的函数或者语句都是等到所有的作用域内部的函数执行完毕才会执行。而且defer修饰的语句应该是以压栈的方式存储在某一个指令栈里面,先放进去的后执行。func main{ for...原创 2019-09-13 13:08:01 · 250 阅读 · 0 评论 -
5 go中的range
C++11里面开始使用的range的便利方法,go肯定有而且更加的简单粗暴赋予了更多的功能Go 语言范围(Range)Go 语言中 range 关键字用于 for 循环中迭代数组(array)、切片(slice)、通道(channel)或集合(map)的元素。在数组和切片中它返回元素的索引和索引对应的值,在集合中返回 key-value 对的 key 值。package main...原创 2019-09-13 12:57:59 · 192 阅读 · 0 评论 -
4 go的函数
函数的定义函数的结构func [function name] (paramters , ...) (return type) {}//func add(a int , b int)func add(a, b int) int { //代表两个变量是一样的类型 return a + b}func swap(a , b int) (int int) { return...原创 2019-09-13 12:56:36 · 194 阅读 · 0 评论 -
3 go中数组和切片之间的区别
数组数组的概念之前在c里面就有所以并不会很陌生,但是仍然有些区别。数组是内置(build-in)类型,是一组同类型数据的集合,它是值类型,通过从0开始的下标索引访问元素值。在c++里面我们使用数组在传参的时候传递的都是指针,但是在go里面对数组进行赋值或者是穿参都是传值的行为。所以效率会有所降低。数组的长度也是其类型的一部分,通过内置函数len(array)获取其长度。定义的方法...原创 2019-09-13 12:53:39 · 277 阅读 · 0 评论 -
2 golang中变量的定义
个人理解的是,go里面的变量和const修饰的常量其实是不同的概念,做了一个彻底的区分。对变量的定义:引入了关键字var对变量进行声明var a intvar b stringvar c float64var e [4] int // 数组var f [] int //数组切片var f * int //正确var v1 int = 5 //正确var v2 = 5...原创 2019-09-13 12:50:03 · 199 阅读 · 0 评论 -
1 go语言介绍的简单的示例
Go语言的语言特性1.2.1 并发编程Go 语言引入了goroutine,它是 Go 实现快速高效的并发编程的关键。通过调用 go 关键字,我们就可以让函数以 goroutine 的方式进行运行,也就是以协程为单位进行运行。协程比线程更加的轻量级,也更节省系统资源,这使得我们可以创建大量的 goroutine,从而进行轻松且高质量的并发编程。同时,goroutine 内部采用管道chann...原创 2019-09-13 12:45:30 · 457 阅读 · 0 评论