自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 收藏
  • 关注

转载 Go异常处理

首先很抱歉,由于搬家,最近太多事情要处理,导致文章更新比较慢。这篇文章,我们讲Go中的异常处理。Go提供了两个内置函数 panic()和recover()用于异常处理。Go中,对异常处理的整体原则是:多用errors包,少用panic。对于可预见的错误,比如网络连接失败等,一般都使用errors,只有重大错误才会使用panic。记住一个大原则:panic会导致程...

2015-08-30 15:32:00 203

转载 Go内建函数copy

Go内建函数copy:func copy(dst, src []Type) int用于将源slice的数据(第二个参数),复制到目标slice(第一个参数)。返回值为拷贝了的数据个数,是len(dst)和len(src)中的最小值。看代码:package main import ("fmt") func main()...

2015-08-30 15:30:00 152

转载 Go内置函数cap

func cap(v Type) int返回指定类型的容量,根据不同类型,返回意义不同。数组: 元素个数 (和len(v)一样).数组指针: *v的元素个数 (和len(v)一样).Slice: the maximum length the slice can reach when resliced;如果v==nil, cap(v) 值为0;Channel: chan...

2015-08-30 15:28:00 270

转载 Go中iota是什么

Go iota是一个比较奇怪的存在,它只能用在const的申明中,是一个从0开始的行数索引器。看代码package mainimport ( "fmt")const ( i = iota j = iota k l)func main() { fmt.Println("i=", i...

2015-06-04 05:42:00 172

转载 go builtin包

Go builtin包提供了go预先声明的函数、变量等的文档。这些函数变量等的实现其实并不是在builtin包里,只是为了方便文档组织。这些内置的变量、函数、类型无需引入包即可使用。默认提供的有:1、常量:true,false,iota关于iota,请参考周一的文章“go iota用法”2、变量nil3、函数func append(s...

2015-06-04 05:39:00 262

转载 Go随机数

Go math/rand包用于生成随机数。代码:package mainimport "fmt"import "math/rand"func main() { fmt.Println(rand.Intn(100)) //产生0-100的随机整数 fmt.Println(rand.Float64()) //产生0.0-1.0的随机...

2015-06-01 21:47:00 74

转载 Go 只读/只写channel

Go中channel可以是只读、只写、同时可读写的。//定义只读的channelread_only := make (<-chan int)//定义只写的channelwrite_only := make (chan<- int)//可同时读写read_write := make (chan int)定义只读和只写的channel...

2015-06-01 21:46:00 335

转载 Go pprof性能监控

Go net/http/pprof包提供了一个在WEB项目中使用的性能监控的工具,使用时只需要引用包:_"net/http/pprof"然后就可以在浏览器中访问地址:http://localhost:port/debug/pprof/来查看性能信息。最简单的示例:package mainimport ( "net/http" _ "...

2015-06-01 21:45:00 96

转载 go os/exec执行外部程序

Go提供的os/exec包可以执行外部程序,比如调用系统命令等。最简单的代码,调用pwd命令显示程序当前所在目录:package mainimport ( "fmt" "os/exec")func main() { pwdCmd := exec.Command("pwd") pwdOutput, _ := pwd...

2015-06-01 21:44:00 281

转载 Go signals 信号

Go中通过os/signals包,可以接受系统信号。package mainimport "fmt"import "os"import "os/signal"import "syscall"func main() { sigs := make(chan os.Signal, 1) signal.Notify(sigs, sysc...

2015-06-01 21:43:00 118

转载 Go 环境变量相关操作

Go语言中os包提供了一些环境变量的操作封装。包括:设置环境变量:Setenv获取环境变量:Getenv删除指定的环境变量:Unsetenv获取所有环境变量:Environ清除所有环境变量:Clearenv请看示例代码:package main import "os"import "fmt" func main() ...

2015-06-01 21:42:00 231

转载 Go命令行参数解析flag包

go语言提供的flag包可以解析命令行的参数,代码:package main import ("flag""fmt") func main() {//第一个参数,为参数名称,第二个参数为默认值,第三个参数是说明username := flag.String("name", "", "Input your us...

2015-06-01 21:40:00 80

转载 go sync.once用法

欢迎关注go语言微信公众号 每日go语言 golang_everydaysync.once可以控制函数只能被调用一次。不能多次重复调用。示例代码:package mainimport ( "fmt" "sync" "time")func main() { o := &sync.Once{} go do(o) go...

2015-05-18 21:13:00 78

转载 使用go语言编写IOS和Android程序

go语言目前已可以用来开发android和ios手机app。相关资料:1、IOShttps://groups.google.com/forum/?utm_medium=email&utm_source=footer#!topic/golang-china/zEh_pdSLHDs需要能访问google源码:https://bitbucket.org/minux...

2015-05-18 21:09:00 276

转载 go map的使用

欢迎关注go语言微信公众号 每日go语言 golang_everydaygo中map用于存储健值对。map格式:map[KeyType]ValueType声明一个map,键为字符型,值为int型:m := make(map[string]int)map中添加值:m["a"] = 1获取map中值:fmt.Println(m["a"]...

2015-05-18 21:03:00 73

转载 go runtime.Gosched()的作用分析

untime.Gosched()用于让出CPU时间片。这就像跑接力赛,A跑了一会碰到代码runtime.Gosched()就把接力棒交给B了,A歇着了,B继续跑。看代码:package main import ("fmt""runtime") func say(s string) {for i := 0; i &...

2015-05-02 21:28:00 479

转载 go中的读写锁RWMutex

读写锁是针对于读写操作的互斥锁。基本遵循两大原则:1、可以随便读。多个goroutin同时读。2、写的时候,啥都不能干。不能读,也不能写。解释:在32位的操作系统中,针对int64类型值的读操作和写操作不可能只由一个CPU指令完成。如果一个写的操作刚执行完了第一个指令,时间片换给另一个读的协程,这就会读到一个错误的数据。RWMutex提供四个方法:...

2015-05-02 21:26:00 117

转载 go互斥锁Mutex

go mutex是互斥锁,只有Lock和Unlock两个方法,在这两个方法之间的代码不能被多个goroutins同时调用到。看代码:package main import ("fmt""sync""time") var m *sync.Mutex func main() {m = new(...

2015-05-02 21:24:00 93

转载 go import使用及. _的作用解析

go中import用于导入包。导入之后就可以使用包中的代码。比如:import("fmt")在代码中就可以使用fmt包中的方法,如:fmt.Println("hello world")1、使用点操作引入包时,可以省略包前缀:import(. "fmt")注意上面 fmt前多了 . 字符。代码中使用时:Pri...

2015-04-20 07:45:00 151

转载 利用channel在goroutins之间控制同步和传递数据

在java等代码中,我们查询数据库的操作:sql = "select * from ....";result = db.query(sql)for(item in result){.....}但是在go语言中,这么做就有些土了,我们可以利用channel天生的队列和线程同步的特性来实现。这也是go和其它语言很明显的思维区别。db的封装:package ...

2015-04-20 07:44:00 155

转载 Go循环引用问题

在Go中,不支持循环引用,即package a引用了packageb以后,package b就不能引用package a了。最简单的场景:package a中定义context.go用来保存上下文信息,同时package a调用了package b,另一方面,package b需要使用上下文信息,就得引用package a。这就会导致循环调用。转载于:https://www....

2015-04-20 07:42:00 740

转载 从nsq中学习如何优雅的退出go 网络程序

退出运行中的程序,可以粗暴的kill -9 $PID,但这样会破坏业务的完整性,有可能一个正在在执行的逻辑半途而费,从而产生不正常的垃圾数据。本文总结在go语言中,如何能优雅的退出网络应用,涉及的知识包括:signal,channel,WaitGroup等。从这里:https://gobyexample.com/channel-synchronization 可以简单了解到,在g...

2015-03-31 17:07:00 173

转载 Go中的指针与函数接收器

Go中使用*号表示指针,但是没有指针算数,不能对其进行加减。同时内存管理都由Go来负责,不需要拖动释放内存。Go中的函数接收者,可以为值类型,也可以是引用类型。看代码:package main import ("fmt") type Rect struct {X, Y,Area,Length float64}...

2015-03-20 21:47:00 210

转载 Go中简单的文件读写

Go中的ioutil包可以方便的实现文件读写。代码:package main import ("fmt""io/ioutil") func main() {filename := "test.txt"data := []byte("hello")ioutil.WriteFile(filename, d...

2015-03-20 21:44:00 177

转载 Go时间戳和日期字符串的相互转换

Go语言中,获取时间戳用time.Now().Unix(),格式化时间用t.Format,解析时间用time.Parse。看实例代码:package main import ("fmt""time") func main() {//获取时间戳timestamp := time.Now().Unix()...

2015-03-19 10:00:00 1541

转载 Go字典

字典(map)是Go语言内置的数据结构,一组键值对的无序集合。看代码:package main import "fmt" func main() { //使用make申请一个map,键为string类型,值为int类型m := make(map[string]int) //设置值m["k1"] =...

2015-03-19 09:57:00 85

转载 Go append方法

append用来将元素添加到切片末尾并返回结果。看代码:package mainimport "fmt"func main() {x := []int {1,2,3}y := []int {4,5,6}//注意下面这两个区别fmt.Println(append(x,4,5,6))fmt.Println(append(x,y...));}...

2015-03-13 09:04:00 85

转载 Go字符串函数

下面的代码中,列出了Go官方包中常见的字符串函数。package main import s "strings"import "fmt" //为打印函数起个小名儿,比较有特点的用法var p = fmt.Println func main() { p("Contains: ", s.Contains(...

2015-03-11 09:14:00 93

转载 Go defer延迟执行

defer用于延迟执行,可以类比于java或c++中的析构函数。查看一段示例代码:func Contents(filename string) (string, error) {//打开文件f, err := os.Open(filename)if err != nil {return "", err}//使用延期调用,由...

2015-03-10 13:47:00 60

转载 Go返回参数命名

Go语言中可以为返回值定义名称。代码实例:package main import "fmt" func add1(a int, b int) int {return a + b} //将返回值取名为sumfunc add2(a int, b int) (sum int) {sum = a + b...

2015-03-10 13:45:00 131

转载 Go语言类型switch

switch还可以用于判断变量类型。使用方式为T.(type),即在变量后加上.(type)。见代码:package main import ("fmt") func main() {var a interface{}a = "abc" switch t := a.(type) {case s...

2015-03-07 21:33:00 167

转载 Go语言中如何写Get和Set方法

首先我们要知道,在Go中方法名首字母大写是要导出的方法(也就是公有方法,public),而小写则是不导出的方法(私有的,private)。Go官方不提供对Get、Set方法的自动支持。对是否设置Get Set方法的推荐做法,见代码:package main import "fmt" type Foo struct {name...

2015-03-06 10:00:00 1953

转载 Go原子计数

通过原子计数可以在多线程情况下,对同一个数值进行加减操作,一般用于状态同步。先看代码:package main import "fmt"import "time"import "sync/atomic"import "runtime" func main() { // 定义一个整数var ops ...

2015-03-04 10:56:00 108

转载 Go channel同步

我们可以使用Channel来同步不同goroutines的执行。看下面的代码:package main import "fmt"import "time" //这个函数会在新的goroutine中运行,执行结束时会给done channel中传入值true//注意到中间有sleep了一秒func worker(done ch...

2015-03-04 10:54:00 63

转载 Go实现线程池

本文通过代码讲解如何实现一个线程池。代码(来自https://gobyexample.com/)及注释如下:package main import "fmt"import "time" //这个是工作线程,处理具体的业务逻辑,将jobs中的任务取出,处理后将处理结果放置在results中。func worker(id int, jo...

2015-03-03 09:11:00 648

转载 Go语言工程结构

Go是一门推崇软件工程理念的编程语言。Go的代码必须放在GOPATH目录下,它应该包含三个子目录:src:用于以代码包的形式组织并保存Go源码文件。应该分为三类:库源码文件、命令源码文件、测试源码文件。pkg:用于存放由go install命令构建安装后的代码包(库源码文件)的“.a"归档文件。与GOROOT目录下的pkg功能类似,区别在于,工作目录中的pkg目录专门用...

2015-03-03 09:08:00 80

转载 Go语言示例-函数返回多个值

Go语言中函数可以返回多个值,这和其它编程语言有很大的不同。对于有其它语言编程经验的人来说,最大的障碍不是学习这个特性,而是很难想到去使用这个特性。简单如交换两个数值的例子:package main import "fmt" func swap(a int, b int) (int, int) {return b, a}...

2015-03-03 09:07:00 433

转载 Go语言参数中的三个点是干什么的

Go语言函数中有三个点...表示为可变参数,可以接受任意个数的参数。示例代码:package main import "fmt" func Greeting(prefix string, who ...string) {fmt.Println(prefix)//接收到who是一个数组,可以用for遍历。for _, na...

2015-03-03 09:06:00 461

转载 go语言示例-Timer计时器的用法

计时器用来定时执行任务,分享一段代码:package main import "time"import "fmt" func main() {//新建计时器,两秒以后触发,go触发计时器的方法比较特别,就是在计时器的channel中发送值timer1 := time.NewTimer(time.Second * 2)...

2015-03-03 09:03:00 117

转载 Go语言的类型转化

Go语言要求不同的类型之间必须做显示的转换。转化分为类型转换和接口转化。类型转换的思路是:X类型需要转换为Y类型,语法是T(x). 如果对于某些地方的优先级拿不准可以自己加()约束,变成(T)(X)。如:*Point(p) // 和 *(Point(p))一样(*Point)(p) // p 转换成 *Point(func())(x) // x 转换成unc()...

2015-03-03 09:02:00 73

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除