Go语言中文网 为您找到相关结果 26

go语言选择语句 switch case

根据传入条件的不同,选择语句会执行不同的语句。下面的例子根据传入的整型变量i的不同而打印不同的内容: switch i { case 0: fmt.Printf("0") case 1: fmt.Printf("1") case 2: fallthrough case 3: fmt.Printf("3") case 4, 5, 6: fmt.Printf("4, 5, 6") default: fmt.Printf("Default") } 运行上面的案例,将会得到如下结果:  i = 0时,输出0;  i = 1时,输出1;  i = 2时,输出3;  i = 3时,输出3;  i = 4时,输出4, 5, 6;  i = 5时,输出4, 5, 6;  i = 6时,输出4,...阅读全文

博文 2015-07-29 03:00:01 osfipin

golang 速度限制,time.Tick(time.Second*2) channel,隔2秒后继续执行

package main import ( "fmt" "time" ) func main() { requests := make(chan int, 5) for i := 1; i <= 2; i++ { requests <- i } close(requests) limiter := time.Tick(time.Millisecond * 200) for req := range requests { //会循环两次,前面往requests channel中发送了两个值 <-limiter //执行到这里,需要隔 200毫秒才继续往下执行,time.Tick(timer)上面已定义 fmt.Println("request", req, time.Now()) } burs...阅读全文

博文 2015-04-18 03:00:00 benlightning

golang轮询机制select的理解

func main() { c := make(chan int) quit := make(chan int) go func() { for i := 0; i < 10; i++ { fmt.Println(<-c) } quit <- 0 }() fibonacci(c, quit) } //select的轮询机制 func fibonacci(c chan int, quit chan int) { x, y := 0, 1 for { select { // select轮询机制 case c <- x: x, y = y, x+y case <-quit: fmt.Println("quit") return } } } main中执行fibonacci函数时候,select有...阅读全文

博文 2015-07-24 16:00:01 webyh

go-redis 发布/订阅

go-redis 发布/订阅 最近golang 的项目开始使用redis 对于redis 真的是接触少,而且是golang版本的 只能是看着文档一点一点的入手了 连接初始化 RedisClient = redis.NewClient(&redis.Options{ Addr: "localhost:6379", Password: "", // no password set DB: 0, // use default DB }) 发布 //参数1 频道名 字符串类型 //参数2 发送的内容 他是个 interface{} 类型 因为我要和前端对接 所以data是我转的json字符 err := RedisClient.Publish("message", data).Err() if er...阅读全文

博文 2019-03-07 16:34:50 ChunShan

golang 按任意键继续

package main import ( "fmt" ) import ( termbox "github.com/nsf/termbox-go" ) func init() { if err := termbox.Init(); err != nil { panic(err) } termbox.SetCursor(0, 0) termbox.HideCursor() } func main() { fmt.Println("hello") pause() fmt.Println("world.") } func pause() { fmt.Println("请按任意键继续...") Loop: for { switch ev := termbox.PollEvent(); ev.Typ...阅读全文

博文 2016-08-12 00:00:02 CodyGuo

go-if、for、switch、goto、break、continue

if语句: package main import "fmt" func main() { //if后面没有括号 if 1 < 2 { fmt.Println("1<2") } var a = 10 //初始化表达式-a的作用范围只在if语句块 if a := 1; a > 1 { fmt.Println("a > 1") fmt.Println(a) } else { fmt.Println("! a > 1") fmt.Println(a) } fmt.Println(a) } 输出如下: 1<2 ! a > 1 1 10 for语句: package main import "fmt" func main() { //第1种形式无限循环 a := 1 for { a++ if a > ...阅读全文

博文 2016-09-13 08:00:02 u013210620

Go_os

这两天阅读了下Golang的标准包os的文档把里面的方法看了个大概 记录一些比较容易混淆的 os.Lstat() os.Stat() 两者都是返回FileInfo 唯一的区别是如果是一个 symbolic link name前者返回的是 symbolic link 的FileInfo 后者则返回symbolic link 所指向文件的FileInfo os.Sync() 将要写入磁盘的内容立即提交 写入到磁盘 在StackOverflow上找到的一段话 解释的不错 You'll notice that an os.File doesn't have a .Flush() because it doesn't need one because it isn't buffered. Writes...阅读全文

博文 2016-03-02 12:00:02 u012807459

关于session,求帮忙找找错

登陆时进入loginin,密码正确后创建session,返回true。网页端拿到true后跳转到第二张页面,验证session,此时从firebug上就看不到请求,拿到的session也为空,很奇怪,不知道哪里错了。想请大家帮忙看看 func sessionCreate(w http.ResponseWriter, r *http.Request, username string) { //创建session state := string(random.NewRandomEx()) //生成服务器端随机数 fmt.Println("state:", state) sidBytes, err := id.NewSessionId() //生成客户端随机数 if err ...阅读全文

golang 按任意键继续

package main import ( "fmt" ) import ( termbox "github.com/nsf/termbox-go" ) func init() { if err := termbox.Init(); err != nil { panic(err) } termbox.SetCursor(0, 0) termbox.HideCursor() } func main() { fmt.Println("hello") pause() fmt.Println("world.") } func pause() { fmt.Println("请按任意键继续...") Loop: for { switch ev := termbox.PollEvent(); ev.Typ...阅读全文

博文 2016-08-31 05:00:02 CodyGuo

Go基础系列:指定goroutine的执行顺序

Go channel系列: channel入门 为select设置超时时间 nil channel用法示例 双层channel用法示例 指定goroutine的执行顺序 当关闭一个channel时,会使得这个channel变得可读。通过这个特性,可以实现一个goroutine执行顺序的技巧。 如果一个goroutine A依赖于另一个goroutine B,在goroutine A中首先通过读goroutine B来阻塞自己,直到goroutine B关闭自身之后,goroutine A才会继续运行。这样,goroutine B就先于goroutine A运行。 下面是一个指定goroutine执行顺序的示例,它保证的顺序是A()-->B()-->C()。 package main impo...阅读全文

博文 2018-11-23 09:12:14 f-ck-need-u

go基本语法学习笔记之流程控制

条件判断 //实例 func fn01(x int) int { var a int if a = 4; x == 0 { x = a + x return 5 } else { return x } } 条件语句不需要使用括号将条件包含起来();无论语句体内有几条语句,花括号{}都是必须存在的;左花括号{必须与if或者else处于同一行;在if之后,条件语句之前,可以添加变量初始化语句,使用;间隔 选择语句 //实例 func fnswitch(y int64) int64 { switch y { case 12: fmt.Println("y is ", y) case 14: y += 54 fmt.Println("y is ", y) fallthrough case 15, 1...阅读全文

博文 2016-01-18 16:00:06 wolgame

Golang学习笔记-1.9 for循环

本文系第九篇Golang语言学习教程 Go语言只有For这一种循环语句。For循环有三种形式,只有其中一种使用分号。 与其他语言for类似 for init; condition; post { } 和while类似 for condition { } 和其他语言for {;;}类似 for { } init:一般为赋值表达式,为循环变量赋初值 condition:循环控制条件,关系表达式或逻辑表达式 post:一般为赋值表达式,给循环变量增量或减量 下面通过几个例子来理解循环 例1 package main import "fmt" func main(){ for i :=1; i <=10; i++{ //i=1,且i<=10,每次循环+1 fmt.Printf(" %d", i) }...阅读全文

博文 2018-07-18 00:34:46 xunk1900

Go语言之continue/break label

发自自己的公众号(灰子学技术)原文链接:https://mp.weixin.qq.com/s/kjGZsMJJdpOJbxlC1gs29w一、写在前面的话:最近碰到了,Go语言一个比较有趣的语法continue label和break label,这种语法C/C++却没有,但是却有与之类似的goto。不过C/C++中一般不喜欢也不推荐使用goto,原因是goto语句跳来跳去,很容易将代码的可读性降低,并且很容易出错,所以C/C++都不推荐使用goto语句。至于Go为何保留goto语句,想来是因为goto语句的另外一件好处吧,就是对深层次的函数调用或者递归调用,可以直接跳出来。二、内容介绍本文提到的continue label和break label于goto语句有些类似,但是两者使用却不相同...阅读全文

Go之旅-Switch

## Go之旅-Switch switch支持初始化语句,注意要用分号结束。后跟条件表达式,如果省略条件表达式,默认为true。不需要显示执行break语句,case执行完毕后自动终端。多个匹配条件,其中一个条件符合即可。case执行中断后,如果需要继续执行下一个case块的内容,在下一个case块结尾执行fallthrough并且可以在fallthrough前使用break语句阻止。但不继续继续后续case块。 ```golang package main import ( "fmt" ) func main() { // 简单声明几个变量 a, b, c, d := 1, 2, 3, 4 switch x := 2; x { // switch支持...阅读全文

Go for循环

9. 循环 循环语句是用来重复执行某一段代码。 for 是 Go 语言唯一的循环语句。Go 语言中并没有其他语言比如 C 语言中的 while 和 do while 循环。 for 循环语法 for initialisation; condition; post { } 初始化语句只执行一次。循环初始化后,将检查循环条件。如果条件的计算结果为 true ,则 {} 内的循环体将执行,接着执行 post 语句。post 语句将在每次成功循环迭代后执行。在执行 post 语句后,条件将被再次检查。如果为 true, 则循环将继续执行,否则 for 循环将终止。(译注:这是典型的 for 循环三个表达式,第一个为初始化表达式或赋值语句;第二个为循环条件判定表达式;第三个为循环变量修正表达式,即此处...阅读全文

Go 语言之switch

发自自己的公众号(灰子学技术)原文链接:https://mp.weixin.qq.com/s/NpAmTMncDabMHcLwoyYegA一、区别switch语句是语言里面非常常见的语句,但是Go语言和C++对它的使用,却实在是迥异,差距非常之大。1.先从写法上面,C++中,switch之后紧跟括号,Go后面没有括号,甚至可以省略。2.switch后的变量类型,C++中必须是整型或者可以默认转换成整型的数据类型,Go中可以是任何类型。3.C++中case后面一般要跟break来终止当前case,否则继续执行下一个case的代码。Go语言中,默认没有break,会直接结束当前case,如果想要于下一个case合并,需要新增fallthrough关键字。二、例子这里的例子,以Go为主。1.字符串...阅读全文

【001:go语言的一些语法基础】

1. 循环语句 Go只有for一个循环语句关键字,但支持3种形式 初始化和步进表达式可以是多个值 条件语句每次循环都会被重新检查,因此不建议在条件语句中 使用函数,尽量提前计算好条件并以变量或常量代替 左大括号必须和条件语句在同一行 1.1 for 的无限循环 1 for { 2 //break; 3 //等同 while 4 } 1.2 for 带条件表达式 1 if a <= 3 { 2 //操作 a 3 } 1.3 for 经典样式 1 for i := 0; i < 3; i++{ 2 //code 3 } 1.2 switch 选择 可以使用任何类型或表达式作为条件语句 不需要写break,一旦条件符合自动终止 如希望继续执行下一个case,需使用fallthrough语句 支持一...阅读全文

博文 2016-06-20 09:00:31 yexiaopeng

关于copy函数,目标和源处于相同地址时,会继续执行拷贝吗?

func copy(dst, src []Type) int 如果dst == src,我记得C++中memcpy如果二者相同则不执行拷贝,因为拷不拷贝结果都一样。 golang会这样吗?我用下列代码试了一下,结果不管dst和src是否相同,执行效率都一样,t3-t2和t2-t1基本接近。是不是能说明不管怎样,copy都执行了拷贝?哪位大神能提供一下源码? func TestSomething() { a_size := uint32(1024 * 1024) copy_size := uint32(1024 * 1024) r := rand.New(rand.NewSource(time.Now().UnixNano())) a := make([]by...阅读全文

go语言第四天

5.0 控制结构 这章挺简单,程序也离不开控制和循环语句,按照每个语言的要求来就行了,没有什么特别的 ,让我们看看go的分支和循环是什么样的 关键字 if 和 else 之后的左大括号 { 必须和关键字在同一行,如果你使用了 else-if 结构,则前段代码块的右大括号 } 必须和 else-if 关键字在同一行。这两条规则都是被编译器强制规定的 if condition { // do something } if condition { // do something } else { // do something } if condition { // do something } else { // do something } if initialization;conditio...阅读全文

golang channel 的使用

本文对channel使用中的几个疑惑,以例子的形式加以说明。 普通channel 缺省情况下,发送和接收会一直阻塞着,直到另一方准备好. 例如: package main import ( "fmt" "time" ) var ch1 chan bool func main(){ ch1 = make(chan bool) go reader() go writer() select { } } func writer() { time.Sleep(10*time.Second) for { ch1 <- true fmt.Println("write one ...") } } func reader() { for { select { case <-ch1: fmt.Println("...阅读全文

博文 2017-12-04 15:00:01 lanyangsh

从零开始学golang-RedBlackTree-Delete-fix2

因为之前写的有点乱,回头自己想想有点问题,又重新撸了一边 ```go //n = delete node n=black //根据红黑树 特性 推论出 如下结构 // n=b //nil nil //在这种情况下,删除n 将使得 整个tree 不平衡 少了一个黑节点嘛 //所以思想是 从隔壁挪一个黑色过来 或者 重新染色 func (tree *Tree) fix2(n *node) { red := false black := true // p // n=b s // nil nil sl sr //case1 如果到了根节点 设置为黑色 if n.p == nil { n....阅读全文

如何发送给客户端响应之后程序继续执行

写PHP的时候遇到一个问题 *如何在把响应发送给客户端之后,继续执行后续任务? * 在stackoverflow上找到解决方案,如下 https://stackoverflow.com/questions/15273570/continue-processing-php-after-sending-http-response 想知道,如何在Golang中实现这种需求,google了一会没能找到,汗... 求助,能赐几行代码更好,多谢:...阅读全文

golang循环跳转语句

golang循环跳转语句 跳转语句 goto break continue 三个语法都可以配合标签使用 标签名区分大小写,若不使用会造成编译错误 break与continue配合标签可用于多层循环的跳出 goto是调整执行位置,与其他2个语句配合标签使用的结果不同 break func main() { LABEL1: for { for i := 0; i < 10; i++ { if i > 3 { fmt.Println(i) break LABEL1 } } } fmt.Println("执行结束") } 输出结果 API server listening at: 127.0.0.1:5587 4 执行结束 Process exiting with code: 0 添加LABEL1标...阅读全文

博文 2019-07-30 03:32:39 iXiAo9

golang-101-hacks(23)——io.Reader接口

注:本文是对golang-101-hacks中文翻译 io.Reader 是一个基础性的 且使用非常频繁的接口 type Reader interface { Read(p []byte) (n int, err error) } 对于实现了io.Readerr的接口类型,可以将它想象成一个管道。将内容写入管道的一端,通过实现了' Read() '方法的类型从管道的另一端读取内容。无论是普通文件,还是网络套接字。只要实现了io.Readerr的接口的类型,都可以读取其内容。 如下例所示 package main import ( "fmt" "io" "log" "os" ) func main() { file, err := os.Open("test.txt") if err != n...阅读全文

博文 2019-06-28 02:02:40 羊羽shine

Go的条件语句「遇到问题该怎么办?先假设、后执行」

IF 条件语句 package main import "fmt" func main() { var A, B int = 520, 1314 if A > B { fmt.Println("A > B") } if A < B { fmt.Println("B < A") } fmt.Println("程序到此运行结束......") } /* 输出: B < A 程序到此运行结束...... */ 复制代码上面我们声明两个 int 变量 A = 520 和 B = 1314 第一个 IF 语句后面跟着的是 A > B,这个结果得出 False,在这里 A 是小于B的,所以括号里的内容不执行 第二个 IF 语句后面跟着的是 A < B,这个结果得出 True,所以执行 IF 括号中的内容...阅读全文

博文 2020-03-30 16:34:22 陈九礼