- 博客(37)
- 收藏
- 关注
转载 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
翻译 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
翻译 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
转载 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
原创 为何有大量show slave status产生
今天接到同事邮件,某台mysql数据库slave库延迟。第一时间感觉不太可能啊,这台机器性能还是可以的。马上登陆服务器上查看,执行show slave status 后 就卡顿了。直接kill掉本回话后,查看show processlist,发现大量show slave status进程。这些进程是哪里来的呢,发现是监控zabbix脚本发出的请求,马上停掉zabbix客户端监控,发现没有大的改
2016-01-27 22:30:17 616
翻译 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
翻译 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
翻译 timer
packagemainimport "time"import "fmt"/* 我们常常想在某一时刻或某一个区间执行go代码,go提供了timer和ticker特性使这两个任务变得容易。 */func main() { /* timers在未来代表一个单独的事件。你需要告诉timer你想等待多长时间,他将提供一个需要关注的通道,timeer需要等待2秒*/
2016-01-26 11:38:07 300
翻译 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 407
翻译 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
翻译 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
翻译 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
翻译 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
翻译 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
翻译 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
翻译 channel --通道
packagemain// channel是连接goroutine的通道,可以发送值从一个channel到另一个channel。// 也可以接受来自其他channel的信息import "fmt"func main() { //make创建channel messages := make(chan string) //通过 go
2016-01-22 16:13:48 33489
翻译 channel
packagemain// channel是连接goroutine的通道,可以发送值从一个channel到另一个channel。// 也可以接受来自其他channel的信息import "fmt"func main() { //make创建channel messages := make(chan string) //通过 go
2016-01-22 16:02:18 6507
翻译 goroutine
packagemainimport "fmt"func f(from string) { for i := 0; i 3; i++ { fmt.Println(from, ":", i) }}func main() { f("direct") //go并发 关键字go go f("goroutin
2016-01-22 15:52:16 305
翻译 error--
第一次看这个,觉的比较难懂,后续需要继续看packagemainimport "errors"import "fmt"//By convention, errors are the last return value and have type error, a built-in interface.func f1(arg int) (int, error) {
2016-01-21 19:22:25 783
原创 mysql add index演变历程
mysql 5.5之前都是通过copytable方式,跟add column方式一样。5.5开始使用inplace方式,此方式在原表的基础上添加索引,抛开了copytable过程,缩短了添加索引过程,在次过程中表被锁定,只读不能写。5.6之后启用online模式。可以在线读写,完全不阻塞表。沿用5.5的inplace方式,在修改过程中,写入的新数据通过rowlog存放。索引添加完毕,重新回放r
2016-01-21 15:45:27 679
翻译 value
go具有各种各样的数值类型如strings,integers,floats,booleans等等,下面有一些基本的examplesstrings 可以通过+号连接合并一个新string。integers 和floats 都跟其他语言一样,基于基本的运算。booleans 还有你希望的booleans用法如下:package mainimport "fmt"
2016-01-21 15:44:04 310
原创 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
翻译 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
翻译 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
原创 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
原创 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
原创 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
原创 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
原创 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
原创 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
原创 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
原创 Closures--闭包
package mainimport "fmt"// 闭包 不管是否是局部变量还是全局变量,调用闭包,闭包中的变量都有效//闭包格式func intSeq() func() int { i := 0 //匿名函数 return func() int { i += 1 return i
2016-01-21 15:34:05 249
原创 Recursion--递归
package mainimport "fmt"// 经典递归 Recursionfunc fact(n int) int { if n == 0 { return 1 } return n * fact(n-1)}func main() { fmt.Println(fact(7))
2016-01-21 15:33:19 252
原创 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
原创 interface --接口
package mainimport "fmt"import "math"// 定义接口type geometry interface { area() float64 perim() float64}// 定义结构体type rect struct { width, height float64}
2016-01-21 14:38:55 368
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人