Golang Basic - select and channel usage
来源:互联网 发布:图片分析软件 编辑:程序博客网 时间:2024/06/08 16:18
今天学习了一下Golang 的 tag,select 和 channel ,记录在此!
1.tag 的作用
package mainimport ("encoding/json""fmt""reflect")type Accout struct {UserId int `json:"user_id" bson:"user_id"`UserName string `json:"user_name" bson:"user_name"`Password string `json:"pass_word" bson:"pass_word"`}func main() {account := &Accout{UserId: 1, UserName: "justin", Password: "12345"}accountJson, _ := json.Marshal(account)fmt.Println(string(accountJson))t := reflect.TypeOf(account)for i := 0; i < 3; i++ {field := t.Elem().Field(i)fmt.Println(field.Tag.Get("json"))fmt.Println(field.Tag.Get("bson"))}}输出:
{"user_id":1,"user_name":"justin","pass_word":"12345"}user_iduser_iduser_nameuser_namepass_wordpass_word2.select 和 channel
package mainimport ("fmt""strconv""time")func test1() {ch1 := make(chan int, 1)ch2 := make(chan int, 1)ch1 <- 1ch2 <- 1select {case <-ch1:fmt.Println("ch1 pop one element")case <-ch2:fmt.Println("ch2 pop one element")}}func test2() {timeout := make(chan bool, 1)ch := make(chan int, 1)ch <- 1go func() {time.Sleep(3000)timeout <- true}()select {case <-ch:fmt.Println("got value")case <-timeout:fmt.Println("timeout")}}func test3() {taskChan := make(chan string, 3)doneChan := make(chan bool, 1)for i := 0; i < 3; i++ {taskChan <- strconv.Itoa(i)fmt.Println("send: ", i)}go func() {for i := 0; i < 3; i++ {task := <-taskChanfmt.Println("received: ", task)}doneChan <- true}()<-doneChan}func main() {test2()}这里的go function是在新的线程里面执行,而返回的结果可以到主线程中。
0 0
- Golang Basic - select and channel usage
- Golang channel select用法
- Golang goroutine and channel
- Git basic usage and work flow
- golang:channel
- Golang的select/非缓冲的Channel实例详解
- GoLang之协程、channel、select、同步锁
- OGRE中级教程二 RaySceneQueries and Basic Mouse Usage
- Some basic javascript usage
- Basic usage about Canvas
- JSON Basic Usage
- golang 的channel
- [Golang]妙用channel
- [Golang]妙用channel(2)
- golang的channel使用
- Golang Channel用法简编
- Golang Channel 整理
- Golang Channel用法简编
- PythonCookBook-数据结构和算法
- 集成Vitamio来播放网络视频(支持多种格式解码)
- 使用OpenCV训练Cascasde分类器
- js中let和var定义变量的区别
- 关于ORA-01445:无法从不带保留关键字的表的连接视图中选择ROWID或采样
- Golang Basic - select and channel usage
- office高级技能——使用通配符进行查找替换
- Linux 常用命令
- HDOJ1242(BFS)
- Java Web中界面之间传值的实现方法
- java谜题--java运行时修改引用类的静态常量
- 网站DDOS攻击防护实战老男孩经验心得分享 【转】
- Balloons(山东省第一届ACM省赛)
- JAVA 全局变量 声明与定义