初识Go语言

学习链接

对标

  • Python 等动态语言的开发速度
  • C/C++ 等编译型语言的性能与安全性

Go是编译型语言

Go 使用编译器来编译代码。编译器将源代码编译成二进制(或字节码)格式;在编译代码时,编译器检查错误、优化性能并输出可在不同平台上运行的二进制文件。Go 自带了编译器,无须单独安装。
Go的运行步骤

  1. 使用文本编辑器创建 Go 程序;
  2. 保存文件;
  3. 编译程序;
  4. 运行编译得到的可执行文件。

特性

  • 并发模型:运行时用 Goroutine 运行所有的一切,Go语言从底层原生支持并发
  • 内存分配: Go 选择了 tcmalloc,它本就是为并发而设计的高性能内存分配组
  • 垃圾回收:指针运算被阻止

goroutine

goroutine类似于线程,但并非线程。可以将 goroutine 理解为一种虚拟线程。Go语言运行时会参与调度 goroutine,并将 goroutine 合理地分配到每个 CPU 中,最大限度地使用 CPU 性能。

多个 goroutine 中,Go语言使用通道(channel)进行通信,通道是一种内置的数据结构,可以让用户在不同的 goroutine 之间同步发送具有类型的消息。这让编程模型更倾向于在 goroutine 之间发送消息,而不是让多个 goroutine 争夺同一个数据的使用权。

package main

import (
        "fmt"
        "math/rand"
        "time"
)

// 数据生产者
func producer(header string, channel chan<- string) {
     // 无限循环, 不停地生产数据
     for {
            // 将随机数和字符串格式化为字符串发送给通道
            channel <- fmt.Sprintf("%s: %v", header, rand.Int31())
            // 等待1秒
            time.Sleep(time.Second)
        }
}

// 数据消费者
func customer(channel <-chan string) {
     // 不停地获取数据
     for {
            // 从通道中取出数据, 此处会阻塞直到信道中返回数据
            message := <-channel
            // 打印数据
            fmt.Println(message)
        }
}

func main() {
    // 创建一个字符串类型的通道
    channel := make(chan string)
    // 创建producer()函数的并发goroutine
    go producer("cat", channel)
    go producer("dog", channel)
    // 数据消费函数
    customer(channel)
}

代码分析

第 03 行,导入格式化(fmt)、随机数(math/rand)、时间(time)包参与编译。
第 10 行,生产数据的函数,传入一个标记类型的字符串及一个只能写入的通道。
第 13 行,for{} 构成一个无限循环。
第 15 行,使用 rand.Int31() 生成一个随机数,使用 fmt.Sprintf() 函数将 header 和随机数格式化为字符串。
第 18 行,使用 time.Sleep() 函数暂停 1 秒再执行这个函数。如果在 goroutine 中执行时,暂停不会影响其他 goroutine 的执行。
第 23 行,消费数据的函数,传入一个只能写入的通道。
第 26 行,构造一个不断消费消息的循环。
第 28 行,从通道中取出数据。
第 31 行,将取出的数据进行打印。
第 35 行,程序的入口函数,总是在程序开始时执行。
第 37 行,实例化一个字符串类型的通道。
第 39 行和第 40 行,并发执行一个生产者函数,两行分别创建了这个函数搭配不同参数的两个 goroutine。
第 42 行,执行消费者函数通过通道进行数据消费。

安装

https://studygolang.com/dl
https://www.yuque.com/xieguang/kubgyn/lhfi56

hello world

package main

import "fmt"

func main() {
	fmt.Println("Hello, World!")
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值