`

golang 小程序两例

阅读更多
都是golang的小例子 因为不能高亮的原因就选择了code=c
package main

import(
        "fmt"
        "time"
        "strconv"
)

var c chan int

func ready(w string, sec int) {
        time.Sleep(int64(sec) * 1e9)
        fmt.Println(w,"is ready!")
        c <- 1
}

func main() {
        c = make(chan int)
        for k := 0; k < 10; k ++ {
                go ready(strconv.Itoa(k) + " thread",k)
        }
        fmt.Println("I'm watiting, but not too long")
        var i int
        L: for {
                select {
                        case <-c:
                                i ++
                                if i > 9 {
                                        break L
                                }
                }
        }
}


package main

import (
        "fmt"
)

func main() {
        ch := make(chan int)
        quit := make(chan bool)
        go shower(ch, quit)

        for i := 0; i < 10; i++ {
                ch <- i
        }
        quit <- false
}

func shower(c chan int, quit chan bool) {
        for {
                select {
                        case j := <-c:
                                fmt.Printf("%d\n", j)
                        case <- quit:
                                break
                }
        }
}



    func toString(any interface {} ) string {  
            switch any.(type) {  
                    case string:  
                            return any.(string)  
                    case int:  
                            return strconv.Itoa(any.(int))  
                    case bool:  
                            return strconv.Btoa(any.(bool))  
                    default:  
                            panic("the type "+reflect.TypeOf(any).String()+" is not support ")  
            }     
            return ""  
    }  



func main() {
        cmd := exec.Command("ps","-e","-opid,ppid,comm")
        output ,_ := cmd.Output()
        child := make(map[int]*vector.IntVector)
        for i, line := range strings.Split(string(output), "\n") {
                if i == 0 || len(line) == 0 { 
                        continue
                }   
                field := strings.Fields(line) 
                p, _ := strconv.Atoi(field[0])
                pp, _ := strconv.Atoi(field[1])
                if  child[pp] == nil {
                        child[pp] = new (vector.IntVector)
                }   
                child[pp].Push(p)
        }   
        sortpp := make([]int,len(child))
        i := 0
        for k, _ := range child {
                sortpp[i] = k 
                i ++
        }   
        sort.Ints(sortpp)
        for _, pp := range sortpp {
                length := child[pp].Len()
                fmt.Printf("Pid %d has %d child", pp, length)
                if length == 1 { 
                        fmt.Printf(": %v\n", []int(*child[pp]))
                } else {
                        fmt.Printf("ren: %v\n", []int(*child[pp]))
                }   
        }   
}


package main

import(
	"time"
)

func main() {
	var c1 = make(chan int)
	var c2 = make(chan int)
	go func() {
	time.Sleep(3e9)
		c1 <- 1
//		c2 <- 2
	}()

	select {
	case <-c1:
		println("read from chan c1")
	case <-c2:
		println("read from chan c2")
//	default:
//		println("defalut")
        }
	println("select over")
}


output:
read from chan c1
select over
分享到:
评论

相关推荐

    Golang学习应用Go轻松学.zip

    Go轻松学,可以让你随时随地浏览Go提供的独特功能,本应用提供了翔实的测试例程序,100%测试通过。并且可以根据反馈持续更新。在这里,变量,函数,结构体,指针,并行计算,包和测试都有详细的讲解,另外独特的关键...

    carbon-golang资源

    碳元素主要以两种同素异形体形式存在,即石墨和金刚石。除此之外,碳元素还能够形成多种化学性质非常稳定的化合物,这种特性使得碳元素成为了生命存在的基础。碳元素的一个重要特性是其能够与自身或者其他元素形成...

    golang 40行代码实现通用协程池

    标题中提到的关键知识点是“golang 40行代码实现通用协程池”,这说明文章介绍的内容是如何利用Go语言(golang)在非常少的代码行数(40行)内创建一个通用的协程池来管理并发任务。在理解了这一概念之后,我们可以...

    基于pythongolang 异步生态开发的个人博客.zip

    在本例中,一个以Python和Go语言为基础的异步生态被用于构建一个个人博客系统,这一过程涉及到从后端服务的设计到前端用户界面的实现的每一个步骤。 Python作为一种广泛使用的高级编程语言,拥有强大的库支持和简洁...

    文件加密解密工具(文件夹下多文件加密解密)

    在这个场景中,我们有一个名为“小锁匠”的小程序,它专门用于批量处理文件夹下的多个文件进行加密和解密操作。该程序的特性使得用户可以快速、方便地对不同类型的文件进行安全保护,无需逐个处理。 首先,我们要...

    面试题,涵盖golong、mysql、redis、MongoDB、RabbitMQ、Kafka、Docker等等

    Channel 分为无缓冲和有缓冲两种类型,无缓冲 Channel 在发送或接收值时会阻塞,直到有另一个 Goroutine 准备好接收或发送值;而有缓冲 Channel 可以预先存放一定数量的元素而不阻塞。 #### 2. Golang 的并发安全性...

    go用gtk2.0开发所需要的DLL

    1. 安装MSYS2:首先,下载并安装适合你系统的MSYS2版本(本例中是64位)。 2. 更新MSYS2:打开MSYS2终端,执行`pacman -Syu`更新包管理系统和安装必要的依赖。 3. 安装MinGW-w64 GCC编译器:输入`pacman -S mingw-w...

    cursoAlura

    《Go语言深度解析——以"cursoAlura"项目为例》 在编程领域,Go语言,又称Golang,是由Google开发的一种静态类型、编译型、并发型且具有垃圾回收功能的编程语言。它旨在提高开发者的生产力,同时保持系统的高效运行...

Global site tag (gtag.js) - Google Analytics