zoukankan      html  css  js  c++  java
  • Go学习例子(五)

    21、Embedding

    Go 支持嵌入结构和接口,以表达更无缝的类型组合

     

    $ go run embedding.go
    co={num: 1, str: some name}
    also num: 1
    describe: base with num=1
    describer: base with num=1

    22、Errors

    在 Go 中,通过显式、单独的返回值传达错误是惯用的。这与Java和Ruby等语言中使用的异常以及C中有时使用的重载单个结果/错误值形成鲜明对比。Go的方法可以很容易地看到哪些函数返回错误,并使用与任何其他非错误任务相同的语言结构来处理它们。

    errors.New使用给定的错误消息构造一个基本值。

    $ go run errors.go
    f1 worked: 10
    f1 failed: can't work with 42
    f2 worked: 10
    f2 failed: 42 - can't work with it
    42
    can't work with it

    23、Goroutines

    Goroutine是一个轻量级的执行线程。

    您还可以为匿名函数调用启动 goroutine。

    现在,我们的两个函数调用在单独的 goroutines 中异步运行。等待它们完成(对于更可靠的方法,请使用WaitGroup)。

    当我们运行这个程序时,我们首先看到阻塞调用的输出,然后是两个goroutine的输出。goroutines 的输出可能是交错的,因为 goroutine 由 Go 运行时同时运行。

     

    $ go run goroutines.go
    direct : 0
    direct : 1
    direct : 2
    goroutine : 0
    going
    goroutine : 1
    goroutine : 2
    done

    24、Channels

    通道是连接并发沟槽的管道。您可以将值从一个 goroutine 发送到通道中,然后将这些值接收到另一个 goroutine 中。

    使用 创建新频道。通道按其传达的值键入。make(chan val-type)

    使用语法将值发送到通道中。在这里,我们从一个新的goroutine发送到我们上面制作的频道。channel <-"ping"messages

    语法从通道接收值。在这里,我们将收到上面发送的消息并将其打印出来。<-channel"ping"

    当我们运行程序时,消息通过我们的通道成功地从一个goroutine传递到另一个goroutine。"ping"

    默认情况下,发送和接收块,直到发送方和接收方都准备就绪。此属性允许我们在程序结束时等待消息,而无需使用任何其他同步。

    $ go run channels.go 
    ping

    25、Channel Buffering

    默认情况下,通道是无缓冲的,这意味着它们只有在有相应的接收()准备接收发送值时才会接受发送()。缓冲通道接受有限数量的值,而没有相应的接收器来接收这些值。chan <-<- chan

    在这里,我们一个最多缓冲2个值的字符串通道。make

    由于此通道是缓冲的,因此我们可以将这些值发送到通道中,而无需相应的并发接收。

    稍后,我们可以像往常一样接收这两个值。

    $ go run channel-buffering.go 
    buffered
    channel
  • 相关阅读:
    tfrecord汇总
    python2中的编码的问题
    python multiprocessing的问题
    转载,ubuntu shell ~/.bashrc /etc/bash.bashrc
    singleton模式 Python
    目标检测 tensorflow(预训练模型)
    functools.partial 小记
    python 踩坑小计 virtualenv-site-packages
    python3.6 _tkinter module问题 python源码重新编译
    windows核心编程之网络编程入门篇
  • 原文地址:https://www.cnblogs.com/biao/p/15628119.html
Copyright © 2011-2022 走看看