定时器
Go语言中可以使用time.NewTimer或time.NewTicker来设置一个定时器,这个定时器会绑定在你的当前channel中,通过channel的阻塞通知机器来通知你的程序。
下面是一个timer的示例。
1 | package main |
上面的例程看起来像一个Sleep,是的,不过Timer是可以Stop的。你需要注意Timer只通知一次。如果你要像C中的Timer能持续通知的话,你需要使用Ticker。下面是Ticker的例程:
1 | package main |
上面的这个ticker会让你程序进入死循环,我们应该放其放在一个goroutine中。下面这个程序结合了timer和ticker
1 | package main |
Socket编程
下面是我尝试的一个Echo Server的Socket代码,感觉还是挺简单的。
SERVER端
1 | package main |
CLIENT端
1 | package main |
系统调用
Go语言那么C,所以,一定会有一些系统调用。Go语言主要是通过两个包完成的。一个是os包,一个是syscall包。(注意,链接被墙)
这两个包里提供都是Unix-Like的系统调用,
- syscall里提供了什么Chroot/Chmod/Chmod/Chdir…,Getenv/Getgid/Getpid/Getgroups/Getpid/Getppid…,还有很多如Inotify/Ptrace/Epoll/Socket/…的系统调用。
- os包里提供的东西不多,主要是一个跨平台的调用。它有三个子包,Exec(运行别的命令), Signal(捕捉信号)和User(通过uid查name之类的)
syscall包的东西我不举例了,大家可以看看《Unix高级环境编程》一书。
os里的取几个例:
环境变量
1 | package main |
执行命令行
下面是一个比较简单的示例
1 | package main |
正规一点的用来处理标准输入和输出的示例如下:
1 | package main |
命令行参数
Go语言中处理命令行参数很简单:(使用os的Args就可以了)
1 | func main() { |
在Windows下,如果运行结果如下:
1 | C:\Projects\Go>go run args.go aaa bbb ccc ddd[C:\Users\haoel\AppData\Local\Temp\go-build742679827\command-line-arguments\_obj\a.out.exe aaa bbb ccc ddd] |
那么,如果我们要搞出一些像 mysql -uRoot -hLocalhost -pPwd 或是像 cc -O3 -Wall -o a a.c 这样的命令行参数我们怎么办?Go提供了一个package叫flag可以容易地做到这一点
1 | package main |
执行起来会是这个样子:
1 | #如果没有指定参数名,则使用默认值 |
一个简单的HTTP Server
1 | package main |
Go的功能库有很多,大家自己慢慢看吧。
参考自:
GO 语言简介(下)— 特性