go
小辣抓
<WEB /> Developer
展开
-
【golang】位操作符
【golang】位操作符golang和许多高级语言一样,提供了许多位操作符<< >> & &^ | ^其它的位操作符都很熟悉了,左移,右移,按位与,按位或,异或多了一个不怎么熟悉的位运算符&^,这个在官方的说法是 and not,是按位置零看一个小例子x := 5f...原创 2018-04-16 13:00:03 · 803 阅读 · 1 评论 -
【golang】net/http包
【golang】net/http包在golang中,使用net/http包可以轻松的创建一个web服务器。其中,http.listenAndServe是一个很重要的方法,这里说说我踩的一个坑吧。这跟自己的开发背景有关。 listenAndServe接受两个参数,第一个是需要一个字符串形式的服务器地址,比如”localhost:8080”,第二个参数是一个用于分派所有请求的http.Han...原创 2018-06-17 00:19:45 · 1842 阅读 · 0 评论 -
【golang】限制同一时间的并发量
【golang】限制同一时间的并发量go的并发量是很厉害的,goroutine创建的代价极小,其中一个重要的原因是因为go采用了分段栈技术,每一个goroutine只占极小的空间。与此同时,goroutine是语言层面的,减少了内核态到用户态的切换开销,并且goroutine摒弃了一些golang用不到的一些os thread的系统调用,创建代价小。我们可以一瞬间创建很多个goroutin...原创 2018-06-30 18:28:14 · 4787 阅读 · 0 评论 -
【golang】类型转换和类型断言
【golang】类型转换和类型断言 类型断言是什么,类型断言和类型转换有什么区别,这个问题以前我也常常分不清楚。为了帮助和我有一样疑问的人,我决定得写一篇关于这方面的博文,介绍一下golang中的类型断言和类型转换的区别,在JavaScript的超集,也同样有类型断言的概念。这篇简短的博文就是帮助大家解答这个疑问,我会尽量短的说清楚,我理解的类型转换和类型断言的区别是什么。什么是类型转换...原创 2018-06-20 16:37:28 · 5138 阅读 · 2 评论 -
【golang】并发遍历指定目录下的所有文件大小
【golang】并发遍历指定目录下的所有文件大小这篇博文旨在写一个遍历指定目录下的所有文件大小的demo,最后打印出该目录所占的空间大小,还会拿没有使用goroutine的情况下, 计算所花费的时间。先上一个没有使用goroutine的版本package mainimport ( "sync" "time" "fmt" "path/filepat...原创 2018-07-04 17:48:15 · 3232 阅读 · 0 评论 -
【golang】goroutine调度的坑
【golang】goroutine调度的坑今天说说我遇到的一个小坑, 关于goroutine 调度的问题。关于goroutine的调度,网上资料已经一大堆了,这里就不再赘述了。还是简单的说一下我理解的goroutine的调度。goroutine是语言层面的,它和内核线程是M:N的关系,并且用了分段栈,是相当轻量了。如果设置runtime.GOMAXPROCS为1,那么会有一个上下文G,在G...原创 2018-07-05 23:57:50 · 1626 阅读 · 0 评论 -
【golang】不要滥用deferred函数
【golang】不要滥用deferred函数golang中的defer能够很好的做“善后”工作,defer的执行时机是在赋值给返回值之后,ret之前,使用defer会将函数都push到一个函数调用栈里,然后等待执行时机,以FILO的顺序依次执行。在许多场景中都是非常有用的。既然defer这么有用,为什么我们不能滥用defer呢?答案是defer也是有开销的。看一段代码:func m...原创 2018-07-06 16:13:41 · 1264 阅读 · 0 评论 -
【golang】传递任意类型的切片
【golang】传递任意类型的切片前言Golang 是一门类型严格的静态语言。看看下面的代码type MyInt = intvar bar MyInt = 2var foo int = 1虽然上面 foo 和 bar 的底层类型都是一样的,是 int, 但是 bar 和 foo 的类型在语言层面并不一样,因此它们不能互相赋值,这样会引起 panic。所以这样就出现了一个问题,有...原创 2018-11-10 17:53:23 · 3443 阅读 · 1 评论 -
【golang】可变参数
Golang 可变参数很多语言都提供了这个特性,这里不再赘述,但是众所周知的是 Golang 没有可选参数!是的,因为 rest 和 可选参数有的时候是可以替代的,但是 rest 还是有很多的坑。Golang 中的 rest 参数传递后会隐式的在内部创建一个新的切片,所以你可以在内部无所顾及的使用 range 或者直接改变它的元素的值func rest(args ...int){ for...原创 2019-05-01 20:33:17 · 1150 阅读 · 0 评论 -
【golang】实现数组 map 方法
【golang】实现数组 map 方法经常会在项目里用到数组的 map 方法,闲来无事打算在 golang 中实现一下 map 方法。上工具要先上用法numbers := []int{1, 2, 3}// convert to []interface{}interfaceNumbers, err := utils.ToInterface(numbers)utils.Check(err...原创 2019-05-02 20:03:20 · 9329 阅读 · 0 评论 -
【golang】探究io.WriteString
【golang】探究io.WriteString在io包里有一个函数叫writeString,这个函数接收两个参数,第一个参数是实现io.Writer接口的具体对象,第二个参数是需要写入的字符串。嗯,为什么会有这个函数的存在。我们先看看函数io.Writer接口type Writer interface { Write(p []byte) (n int, err err...原创 2018-06-22 19:52:30 · 9939 阅读 · 2 评论 -
【golang】一个包含nil指针的接口不是nil接口
【golang】一个包含nil指针的接口不是nil接口今天拜读go圣经的时候,看到这么一个标题,这是interface的一个坑,作为自己的理解,我直接把它拿过来当作我的这篇博文的标题了当接口作为类型时,可以帮助我们完成多态,对外隐藏实现等。一个接口的零值就是它的运行时类型和运行时的值都为nil。可是尽管这样也会有一些坑存在。先看看go圣经上的一个例子const debug = ...原创 2018-06-12 19:43:39 · 1390 阅读 · 0 评论 -
【golang】浅析rune,byte
【golang】浅析rune,bytegolang内置类型有rune类型和byte类型。需要知晓的是rune类型的底层类型是int32类型,而byte类型的底层类型是int8类型,这决定了rune能比byte表达更多的数。在unicode中,一个中文占两个字节,utf-8中一个中文占三个字节,golang默认的编码是utf-8编码,因此默认一个中文占三个字节,但是golang中的字符串...原创 2018-04-17 10:43:13 · 6846 阅读 · 3 评论 -
【golang】strings.join方法
【golang】strings.join方法最近才开始学习golang,看《the go programming language》中有提到strings的join方法,此方法跟js中的Array.prototype.join方法差不多,都是给数组的每个元素中拼接一个目标字符串,目标字符串为join方法的参数与js不同的是,js是弱类型的语言,因此可以直接为一个number的数组使用joi...原创 2018-04-04 16:37:40 · 19600 阅读 · 2 评论 -
【golang】短变量声明
【golang】短变量声明在golang中可以很方便的用:=来初始化一个变量但是需要注意的是:=是一个变量声明语句,而=是一个赋值语句因此你不能像赋值语句那样去使用它j := 1j := 2 //no new variables on left side of :=简短变量声明语句只有对已经在同级词法域声明过的变量才和赋值操作语句等价,如果变量是在外部词法域声明的,那么简...原创 2018-04-05 14:26:58 · 1818 阅读 · 3 评论 -
【golang】命令行参数 flag
【golang】命令行参数 flag利用flag实现一个简单的echo工具目的为打印传入的字符串,并用传入的指定的分隔符进行分割package mainimport ( "fmt" "flag" "strings")//分隔符var sep *string = flag.String("s"," ","use -s <separato原创 2018-04-05 15:54:37 · 1121 阅读 · 0 评论 -
【golang】变量的几种声明方式
【golang】变量的几种声明方式方式1: 可以显示的指出变量的类型,然后稍后再为其赋值,也可以直接为其赋值var str string = "hello world"var str2 stringstr2 = "hello"直接为变量进行赋值的时候不需要显示的指明变量的类型,compiler会帮助你做类型推断,推断出变量的类型var num = 1 //推断出类型为...原创 2018-04-05 16:22:25 · 3339 阅读 · 0 评论 -
【golang】数组和切片
【golang】数组和切片在golang中,有一个“罕见”的复合类型,叫切片,切片是基于数组的,golang和其它语言不一样,在golang中,数组是不可变的,对数组进行类型转换等操作都会导致golang隐式的申请一块内存,然后将原数组的内容复制到这块内存。数组是不可变的,这就决定了字符串也是不可变的,因为字符串底层就是一个byte数组实现的。在实际的开发当中,我们经常使用的是切片,而...原创 2018-04-18 13:19:20 · 4015 阅读 · 0 评论 -
【golang】unsafe.Sizeof浅析
【golang】unsafe.Sizeof浅析博主也是正在学习golang,在学习过程中遇到了SizeOf的问题。我原先以为,golang中的sizeof和c的sizeof差不多,但是当我开始使用的时候,才发现了许多奇怪的问题slice := []int{1,2,3}fmt.Println(unsafe.Sizeof(slice)) //24上面声明了一个切片,然后打印出sizeof...原创 2018-04-19 15:02:25 · 15263 阅读 · 7 评论 -
【golang】Go实现set类型
【golang】Go实现set类型如何实现setGo中是不提供Set类型的,Set是一个集合,其本质就是一个List,只是List里的元素不能重复。Go提供了map类型,但是我们知道,map类型的key是不能重复的,因此,我们可以利用这一点,来实现一个set。那value呢?value我们可以用一个常量来代替,比如一个空结构体,实际上空结构体不占任何内存,使用空结构体,能够帮我们节...原创 2018-04-19 15:48:19 · 14741 阅读 · 1 评论 -
【golang】golang unrecognized import path
【golang】golang unrecognized import path很久没有更博客了,就是最近太懒了。第二天安装goquery的时候就遇到了这个错,想着拿出来给大家分享一下,希望能帮到大家原因多半是被墙了解决方法方法一:挂VPN,这样能通过代理服务器去拉取方法二:$mkdir -p $GOPATH/src/golang.org/x/$cd $...原创 2018-04-26 11:06:48 · 3587 阅读 · 0 评论 -
【golang】实现一个 html 解析器
【golang】实现一个 html 解析器今天发现 golang 中提供的 xml 包可以方便的帮助我们解析标记语言,所以,我们可以很方便的就实现一个 html 的解析器。先来看一下数据结构type Node interface {}type Element struct { tagName string attrs []xml.Attr children []Node}之所...原创 2019-05-03 17:12:10 · 2447 阅读 · 0 评论