Go by example
aeolus_pu
这个作者很懒,什么都没留下…
展开
-
go语言介绍
go是一种强类型、静态类型语言。原创 2016-02-02 17:32:07 · 673 阅读 · 0 评论 -
Reading Files
packagemainimport ( "bufio" "fmt" "io" "io/ioutil" "os")func check(e error) { if e != nil { panic(e) }}func main() { dat, err := iout翻译 2016-02-01 11:47:17 · 385 阅读 · 0 评论 -
Collection Functions
packagemainimport "strings"import "fmt"//Returns the first index of the target string t, or -1 if no match is found.func Index(vs []string, t string) int { for i, v := range vs {转载 2016-01-29 18:01:50 · 414 阅读 · 0 评论 -
defer
packagemainimport "fmt"import "os"func main() { f := createFile("/tmp/defer.txt") defer closeFile(f) writeFile(f)}func createFile(p string) *os.File { fmt.Print翻译 2016-01-28 17:59:58 · 321 阅读 · 0 评论 -
Atomic Counters
packagemainimport "fmt"import "time"import "sync/atomic"import "runtime"func main() { var ops uint64 = 0 for i := 0; i 50; i++ { go func() { for {翻译 2016-01-28 11:08:27 · 320 阅读 · 0 评论 -
rate limiting
packagemainimport "time"import "fmt"func main() { requests := make(chan int, 5) for i := 1; i 5; i++ { requests i } close(requests) limiter := time.Ti转载 2016-01-28 10:05:56 · 468 阅读 · 0 评论 -
Worker Pools
packagemainimport "fmt"import "time"func worker(id int, jobs chan int, results chan int) { for j := range jobs { fmt.Println("worker", id, "processling job", j) time翻译 2016-01-26 15:47:23 · 356 阅读 · 0 评论 -
tickers
packagemainimport "time"import "fmt"//timers用于在某一时你想做某些事情时,tickers用于在某一时间段内重复做某事func main() { ticker := time.NewTicker(time.Millisecond * 500) go func() { for t := ran翻译 2016-01-26 14:10:33 · 499 阅读 · 0 评论 -
timer
packagemainimport "time"import "fmt"/* 我们常常想在某一时刻或某一个区间执行go代码,go提供了timer和ticker特性使这两个任务变得容易。 */func main() { /* timers在未来代表一个单独的事件。你需要告诉timer你想等待多长时间,他将提供一个需要关注的通道,timeer需要等待2秒*/翻译 2016-01-26 11:38:07 · 300 阅读 · 0 评论 -
Closing Channels
packagemainimport "fmt"func main() { jobs := make(chan int, 5) done := make(chan bool) go func() { for { j, more := jobs if more {翻译 2016-01-25 17:55:28 · 406 阅读 · 0 评论 -
Reading Files
packagemainimport ( "bufio" "fmt" "io" "io/ioutil" "os")func check(e error) { if e != nil { panic(e) }}func main() { dat, err := iout翻译 2016-02-01 14:21:16 · 341 阅读 · 0 评论 -
Line Filters
packagemainimport ( "bufio" "fmt" "os" "strings")func main() { scanner := bufio.NewScanner(os.Stdin) for scanner.Scan() { ucl := strings.ToUppe翻译 2016-02-01 14:32:49 · 377 阅读 · 0 评论 -
Writing Files
packagemainimport ( "bufio" "fmt" "io/ioutil" "os")func check(e error) { if e != nil { panic(e) }}func main() { d1 := []byte("hello\ngo\n"翻译 2016-02-01 14:53:49 · 378 阅读 · 0 评论 -
Number Parsing
packagemainimport "strconv"import "fmt"func main() { f, _ := strconv.ParseFloat("1.234", 64) fmt.Println(f) i, _ := strconv.ParseInt("123", 0, 64) fmt.Println(i)翻译 2016-02-01 17:54:00 · 352 阅读 · 0 评论 -
URL Parsing
packagemainimport "fmt"import "net"import "net/url"func main() { s := "postgres://user:pass@host.com:5432/path?k=v#f" u, err := url.Parse(s) if err != nil { pan翻译 2016-02-01 17:33:34 · 407 阅读 · 0 评论 -
exit
packagemainimport "fmt"import "os"func main() { defer fmt.Println("!") os.Exit(3)}翻译 2016-02-01 16:58:24 · 325 阅读 · 0 评论 -
Signals
packagemainimport "fmt"import "os"import "os/signal"import "syscall"func main() { sigs := make(chan os.Signal, 1) done := make(chan bool, 1) signal.Notify(sigs, syscal翻译 2016-02-01 16:48:14 · 403 阅读 · 0 评论 -
Exec'ing Processes
packagemainimport "syscall"import "os"import "os/exec"func main() { binary, lookerr := exec.LookPath("ls") if lookerr != nil { panic(lookerr) } args := []s翻译 2016-02-01 16:29:05 · 402 阅读 · 0 评论 -
Spawning Processes
packagemainimport "fmt"import "io/ioutil"import "os/exec"func main() { datecmd := exec.Command("date") dateout, err := datecmd.Output() if err != nil { panic(er翻译 2016-02-01 16:17:38 · 446 阅读 · 0 评论 -
Environment Variables
packagemainimport "os"import "strings"import "fmt"func main() { os.Setenv("F00", "1") fmt.Println("F00", os.Getenv("F00")) fmt.Println("BAR:", os.Getenv("BAR")) fmt翻译 2016-02-01 15:59:57 · 320 阅读 · 0 评论 -
Command-Line Flags
packagemainimport "flag"import "fmt"func main() { wordptr := flag.String("word", "foo", "a string") numbptr := flag.Int("numb", 42, "an int") boolprr := flag.Bool("fork",翻译 2016-02-01 15:59:06 · 789 阅读 · 0 评论 -
Command-Line Arguments
packagemainimport "os"import "fmt"func main() { argsWithprog := os.Args argswithoutProg := os.Args[1:] arg := os.Args[3] fmt.Println(argsWithprog) fmt.Println(翻译 2016-02-01 15:07:01 · 590 阅读 · 0 评论 -
Non-Blocking Channel Operations
packagemainimport "fmt"func main() { messages := make(chan string) signals := make(chan bool) select { case msg := messages: fmt.Println("received message", ms翻译 2016-01-25 17:42:55 · 381 阅读 · 0 评论 -
timeout
packagemainimport "time"import "fmt"func main() { c1 := make(chan string, 1) go func() { time.Sleep(time.Second * 2) c1 "result 1" }() select {翻译 2016-01-25 13:45:54 · 313 阅读 · 0 评论 -
Multiple Return Values
package mainimport "fmt"//return返回多值,这特性是go的惯用习惯,如返回时返回两个value,一个结果,一个错误标识。func vals() (int, int) { return 3, 7}func main() { // 两个变量接受函数的返回值 a, b := vals()原创 2016-01-21 15:41:01 · 391 阅读 · 0 评论 -
variadic functions
package mainimport "fmt"//variadic functions 可变参数函数func sum(nums ...int) { //输出函数参数值 fmt.Println(nums, "") total := 0 // for range 遍历参数值 for _, num := range原创 2016-01-21 15:40:15 · 327 阅读 · 0 评论 -
for
package mainimport "fmt" //除了这三种方式,还有其他方式 等到range、channel和其他数据结构时再学习func main() { //最通用流行方式,单个条件 i := 1 for i 3 { fmt.Println(i) i = i + 1 }原创 2016-01-21 15:39:28 · 261 阅读 · 0 评论 -
if...else
package mainimport "fmt"func main() { // if .. else .. if 7%2 == 0 { fmt.Println("7 is even") } else { fmt.Println("7 is odd") } // if ..原创 2016-01-21 15:37:58 · 329 阅读 · 0 评论 -
switch
package mainimport "fmt"import "time"func main() { i := 2 fmt.Println("write", i, "as") switch i { case 1: fmt.Println("one") case 2:原创 2016-01-21 15:36:58 · 241 阅读 · 0 评论 -
array
package mainimport "fmt"func main() { //定义一个int型数组 var a [5]int fmt.Println("emp", a) //数据项赋值 a[4] = 100 //打印数组 fmt.Println("set:", a) //打印元素原创 2016-01-21 15:36:03 · 207 阅读 · 0 评论 -
slice
package mainimport "fmt"func main() { //创建一个空的slices s := make([]string, 3) fmt.Println("emp", s) //slice赋值 s[0] = "a" s[1] = "b" s[2] = "c"原创 2016-01-21 15:35:01 · 253 阅读 · 0 评论 -
Closures--闭包
package mainimport "fmt"// 闭包 不管是否是局部变量还是全局变量,调用闭包,闭包中的变量都有效//闭包格式func intSeq() func() int { i := 0 //匿名函数 return func() int { i += 1 return i原创 2016-01-21 15:34:05 · 249 阅读 · 0 评论 -
struct --结构体
package mainimport "fmt"//定义结构体 结构体是个变化的type person struct { name string age int}func main() { //初始化struct结构体 fmt.Println(person{"BOb", 20}) fmt.P原创 2016-01-21 14:40:39 · 316 阅读 · 0 评论 -
function
package mainimport "fmt"// 传递两int型值,返回他们的和func plus(a int, b int) int { return a + b}func plusplus(a int, b int, c int) int { return a + b + c}// 像其他语言一样调用翻译 2016-01-21 15:42:01 · 241 阅读 · 0 评论 -
range
package main// range 如何遍历slice,遍历map映射一样import "fmt"func main() { // range遍历求和 nums := []int{2, 3, 4} sum := 0 for _, num := range nums { sum += num翻译 2016-01-21 15:42:44 · 319 阅读 · 0 评论 -
map
package mainimport "fmt"func main() { // map 定义 m := make(map[string]int) //map赋值 m["k1"] = 7 m["k2"] = 14 //map输出 fmt.Println("map:", m) //m原创 2016-01-21 15:43:24 · 305 阅读 · 0 评论 -
select
packagemainimport "time"import "fmt"func main() { //创建两个通道 c1 := make(chan string) c2 := make(chan string) //创建开启通道 go func() { time.Sleep(time.Second *翻译 2016-01-25 11:38:02 · 298 阅读 · 0 评论 -
channel directions
packagemain//channel directions//通道作为函数参数,你需要指明通道是作为发送还是接受。//这种指明提高了程序类型的安全import "fmt"func ping(pings chan string, msg string) { pings msg}// 通道作为参数func pong(pings cha翻译 2016-01-25 10:18:18 · 372 阅读 · 0 评论 -
Channel Synchronization
packagemainimport "fmt"import "time"func worker(done chan bool) { fmt.Print("working...") //暂停 time.Sleep(time.Second) fmt.Println("done") done true}func翻译 2016-01-22 17:31:20 · 386 阅读 · 0 评论 -
buffer channel
packagemainimport "fmt"func main() { messages := make(chan string, 2) messages "buffered" messages "channel" fmt.Println(messages) fmt.Println(messages)}翻译 2016-01-22 16:49:18 · 352 阅读 · 0 评论