收藏此站 联系我们 网站
当前位置:首页» 行业新闻 » 【建站服务】象山公众号代运营公司-域名申请

【建站服务】象山公众号代运营公司-域名申请

作者: 风兰 . 阅读量: 6 . 发表时间:2022-09-21 05:53:18

网站建设

上往建站提供服务器空间服务商百度快照排名网站托管百度推广运营,致力于设计外包服务与源代码定制开发360推广搜狗推广,增加网站的能见度及访问量提升网络营销的效果,主营:网站公司,百度推广公司电话,官网搭建服务,网站服务企业排名,服务器空间,英文域名等业务,专业团队服务,效果好。


象山公众号代运营公司


网站建设.png

  1. ackage mainimport (    "fmt"    "time")func main() {    
        c := make(chan int, 10)    
        go fibonacci(cap(c), c)    
        for v := range c {        fmt.Println("out:", time.Now())        fmt.Println(v)    }}func fibonacci(n int, c chan int) {    x, y := 0, 1    
        for i :=0; i < n; i++ {        c <- x
            fmt.Println("in:",time.Now())        time.Sleep(100)        x, y = y, x+y
        }    
        close(c)}
    ghppph

       ghppph

      158***02109@163.com

    4年前 (2019-02-13)
  2.    杨毅

      yan***tl@163.com

    52

    关闭通道并不会丢失里面的数据,只是让读取通道数据的时候不会读完之后一直阻塞等待新数据写入

    杨毅

       杨毅

      yan***tl@163.com

    3年前 (2019-04-27)
  3.    Azz

      azz***cret.com

    52

    Channel 是可以控制读写权限的 具体如下:

    go func(c chan int) { //读写均可的channel c } (a)go func(c <- chan int) { //只读的Channel } (a)go func(c chan <- int) {  //只写的Channel } (a)
    Azz

       Azz

      azz***cret.com

    3年前 (2019-04-28)
  4.    gibson1112

      185***72536@163.com

    54

    形象说明一下无缓冲和有缓冲的区别:

    无缓冲是同步的,例如 make(chan int),就是一个送信人去你家门口送信,你不在家他不走,你一定要接下信,他才会走,无缓冲保证信能到你手上。

    有缓冲是异步的,例如 make(chan int, 1),就是一个送信人去你家仍到你家的信箱,转身就走,除非你的信箱满了,他必须等信箱空下来,有缓冲的保证信能进你家的邮箱。

    修改一下上面笔记中的程序如下:

    package mainimport (
        "fmt"
        "time")func sum(s []int, c chan int) {
        sum := 0
        for _, v := range s {
            sum += v    }
        fmt.Printf("sum:")
        fmt.Printf("%#v
    ", sum)
        c <- sum // 把 sum 发送到通道 c
        fmt.Println("after channel pro")}// 通道不带缓冲,表示是同步的,只能向通道 c 发送一个数据,只要这个数据没被接收然后所有的发送就被阻塞func main() {
        s := []int{7, 2, 8, -9, 4, 0}
        c := make(chan int)
        fmt.Println("go [0,3]")
        go sum(s[:len(s)/2], c) //a
    
        //这里开启一个新的运行期线程,这个是需要时间的,本程序继续往下走
    
        fmt.Println("go [3,6]")
        go sum(s[len(s)/2:], c) //b
        fmt.Println("go2 [0,3]")
        go sum(s[:len(s)/2], c) //c
        fmt.Println("go2 [3,6]")
        go sum(s[len(s)/2:], c) //d
    
        /*
        a b c d和main一起争夺cpu的,他们的执行顺序完全无序,甚至里面不同的语句都相互穿插
        但无缓冲的等待是同步的,所以




// 通道不带缓冲,表示是同步的,只能向通道 c 发送一个数据,只要这个数据没被接收然后所有的发送就被阻塞

func main() {

    s := []int{7, 2, 8, -9, 4, 0}

    c := make(chan int)

    fmt.Println("go [0,3]")

    go sum(s[:len(s)/2], c) //a


    //这里开启一个新的运行期线程,这个是需要时间的,本程序继续往下走


    fmt.Println("go [3,6]")

    go sum(s[len(s)/2:], c) //b

    fmt.Println("go2 [0,3]")

    go sum(s[:len(s)/2], c) //c

    fmt.Println("go2 [3,6]")

    go sum(s[len(s)/2:], c) //d


    /*

    a b c d和main一起争夺cpu的,他们的执行顺序完全无序,甚至里面不同的语句都相互穿插

    但无缓冲的等待是同步的,所以接下来a b c d都会执行,一直执行到c <- sum后,开始同步阻塞

    因此after channel pro是打印不出来的, 等要打印after channel pro的时候,main就结束了

    */


    fmt.Println("go3 start waiting...")

    time.Sleep(1000 * time.Millisecond)

    fmt.Println("go3 waited 1000 ms")


    //因为a b c d都在管道门口等着,这里度一个,a b c d就继续一个,这个结果的顺序可能是acbd

    aa := <-c

    bb := <-c

    fmt.Println(aa)

    fmt.Println(bb)

    x, y := <-c, <-c

    fmt.Println(x, y, x+y)

}

结果:


go [0,3]

go [3,6]

go2 [0,3]

go2 [3,6]

sum:sum:sum:17

go3 start waiting...

17

-5

sum:-5

go3 waited 1000 ms

17

17

-5 -5 -10

修改成 make(chan int, 2),同时合并:


fmt.Printf("sum:")

fmt.Printf("%#v ", sum) 

为:


fmt.Printf("sum:%#v ", sum)

可以看到 after channel pro 没有被阻塞了。


结果:


go [0,3]

go [3,6]

go2 [0,3]

go2 [3,6]

go3 start waiting...

sum:-5

sum:17

after channel pro

after channel pro

sum:17

sum:-5

go3 waited 1000 ms

-5

17

17 -5 12

gibson1112

   gibson1112


  185***72536@163.com


3年前 (2019-05-24)

   酷神oL


  916***937@qq.com


7

package main


import "fmt"


func main() {

    ch := make(chan int, 2)


    ch <- 1

    a := <-ch

    ch <- 2

    ch <- 3


    fmt.Println(<-ch)

    fmt.Println(<-ch)

    fmt.Println(a)

}

通道遵循先进先出原则。


不带缓冲区的通道在向通道发送值时,必须及时接收,且必须一次接收完成。


而带缓冲区的通道则会以缓冲区满而阻塞,直到先塞发送到通道的值被从通道中接收才可以继续往通道传值。就像往水管里推小钢珠一样,如果钢珠塞满没有从另一头放出,那么这一头就没法再往里塞,是一个道理。例如上面的例子,最多只能让同时在通道中停放2个值,想多传值,就需要把前面的值提前从通道中接收出去。


因此,上面的输出结果为:


2

3

1

酷神oL

   酷神oL


  916***937@qq.com


3年前 (2019-06-12)

   xiaoxunnn


  860***203@qq.com


7

Go 遍历通道与关闭通道的例子这样改一下,会更清楚:


package main

import (

   "fmt"

   "time"

)

func fibonacci(n int, c chan int) {

   x, y := 0, 1

   for i := 0; i < n; i++ {

      c <- x

      x, y = y, x+y

      time.Sleep(1000*time.Millisecond)   

   }

   close(c)

象山公众号代运营公司


上往建站提供搭建网站域名注册官网备案服务网店详情页设计企业网店专业网络店铺管理运营全托管公司咨询电话,服务器空间,微信公众号托管网页美工排版,致力于域名申请竞价托管软文推广全网营销,提供标准级专业技术保障,了却后顾之忧,主营:虚拟主机网站推广百度竞价托管网站建设上网建站推广服务网络公司有哪些等业务,专业团队服务,效果好。

服务热线:400-111-6878 手机微信同号:18118153152(各城市商务人员可上门服务)


关键词:网站建设,企业网站,网站制作,网页设计,高端网站建设,企业网站制作,网页制作,制作网站,网站设计,高端网页设计,高端网站设计,做网站,自适应网站

全国服务热线
18114747181
二维码
手机端二维码
上往建站
地址:全国各地都有驻点商务 |  网站建设上往建站
在线咨询QQ:1120768800
 
QQ在线咨询
售前咨询热线
18114747181
营销顾问
营销顾问
售后服务热线
400-000-1116
售后服务
售后服务