分类目录归档:Go
GO中参数传递的理解
针对字符、数组、切片、struct在函数调用中,使用的是传值还是传引用?做一下汇总
GO中值交换的原理
Go中的net/url包学习笔记
GO中的net/url包,实现对URL的处理。
1、对URL进行编码和解码
func QueryEscape(s string) string
QueryEscape函数对s进行转码使之可以安全的用在URL查询里。
func QueryUnescape(s string) (string, error)
QueryUnescape函数用于将QueryEscape转码的字符串还原。它会把%AB改为字节0xAB,将’+’改为’ ‘。如果有某个%后面未跟两个十六进制数字,本函数会返回错误。
Go中net包中的方法
本文章是学习Go中net包的一篇笔记,记录 net 包的一些方法的使用。
1、func SplitHostPort(hostport string) (host, port string, err error)
函数将格式为”host:port”、”[host]:port”或”[ipv6-host%zone]:port”的网络地址分割为host或ipv6-host%zone和port两个部分。
如何优雅地关闭Go channel
几天前,我写了一篇文章来说明golang中channel的使用规范。在reddit和HN,那篇文章收到了很多赞同,但是我也收到了下面几个关于Go channel设计和规范的批评:
- 在不能更改channel状态的情况下,没有简单普遍的方式来检查channel是否已经关闭了
- 关闭已经关闭的channel会导致panic,所以在closer(关闭者)不知道channel是否已经关闭的情况下去关闭channel是很危险的
- 发送值到已经关闭的channel会导致panic,所以如果sender(发送者)在不知道channel是否已经关闭的情况下去向channel发送值是很危险的
Goroutine Channel Select 的用法和理解
-
了解进程、线程、协程
本文不详细解释这三个名词的意思,下面有一篇文章,不懂的同学可以参考看看:http://www.cnblogs.com/work115/p/5620272.html
-
Goroutine的使用
Goroutine 奉行通过通信来共享内存,而不是共享内存来通信。使用goroutine很简单,只需要用到一个关键字go,我们用一段代码来示例一下如何使用go关键字
Goroutine和channel的详细理解(三)
-
Go语言并发的设计模式和应用场景
以下设计模式和应用场景来自Google IO上的关于Goroutine的PPT:https://talks.golang.org/2012/concurrency.slide
Goroutine和channel的详细理解(二)
-
Go语言的并发和并行
不知道你有没有注意到一个现象,还是这段代码,如果我跑在两个goroutines里面的话:
var quit chan int = make(chan int) func loop() { for i := 0; i < 10; i++ { fmt.Printf("%d ", i) } quit <- 0 } func main() { go loop() // 开两个goroutine跑函数loop, loop函数负责打印10个数 go loop() for i := 0; i < 2; i++ { <- quit } }
Goroutine和channel的详细理解(一)
如果不是我对真正并行的线程的追求,就不会认识到Go有多么的迷人。
Go语言从语言层面上就支持了并发,这与其他语言大不一样,不像以前我们要用Thread库 来新建线程,还要用线程安全的队列库来共享数据。
以下是我入门的学习笔记。
Go新建文件权限与设置不符
问题:
fileName := "/Users/my/tests/perm_file" f, _ := os.OpenFile(fileName, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0666) f.Close()
上述代码是打开一个文件,如果文件不存在则创建一个新文件,同时权限设置为0666(-rw-rw-rw-),但实际生成的文件权限可能与你认为的不一致:
Go中的os包之目录和文件(file)的操作
go中对文件和目录的操作主要集中在os包中,下面对go中用到的对文件和目录的操作,做一个总结笔记。在go中的文件和目录涉及到两种类型,一个是 type File struct,另一个是type Fileinfo interface,来看下这两种类型的定义:
GO中new 和 make的区别
GO中断言interface类型的方法
Go中的各种变量类型转换
从PHP转向GO,最不能适应的是GO是强类型语言,变量的申明需要指定其类型,相同的变量之间才可以做算术、关系、逻辑等运算。
Go中的time包
参考的地址:http://studygolang.com/static/pkgdoc/pkg/time.htm
在Go的时间处理,都是针对type Time 的处理,所以在处理时间之前需要有 Time 类型的变量。
Go 推荐的开源代码
Go的web应用需要注意的点
fmt.Fprintf(w, “hello world!”)
w.Write([]byte(“test”))
http.Redirect(w, r, “124.100.com/test/a/b/”,301)
io.WriteString(w, “hello, world!hello, world!\n”)
GO中的互斥锁与读写锁
在本节,我们对Go语言所提供的与锁有关的API进行说明。这包括了互斥锁和读写锁。我们在第6章描述过互斥锁,但却没有提到过读写锁。这两种锁对于传统的并发程序来说都是非常常用和重要的。
编译型语言、解释型语言、静态类型语言、动态类型语言概念与区别
最近在研究Python和Erlang。反复提到动态类型语言、动态语言、解释型语言这些概念。这些概念很生涩,在这里做一个总结。