首页 > 其他分享 >【go语言】1.1.1 Go 语言的历史和背景

【go语言】1.1.1 Go 语言的历史和背景

时间:2023-07-25 09:14:16浏览次数:39  
标签:编程 语言 编程语言 并发 goroutine go Go

Go 语言,也被称为 Golang,是一种静态强类型、编译型的开源编程语言。Go 语言的出现是为了解决当下的软件开发问题,特别是大规模软件系统的开发。

Go 语言的设计者包括 Robert Griesemer、Rob Pike 和 Ken Thompson,他们都是在 Google 工作的资深工程师。他们发现当时的编程语言,无论是编译速度、执行效率,还是并发处理能力,都无法满足 Google 面临的大规模编程问题。

于是,他们在 2007 年开始设计 Go 语言,希望这个新的编程语言能够拥有以下特性:

  • 高效的编译速度
  • 易于使用的静态类型系统和强大的运行时功能
  • 高效的并发处理能力

在 2009 年,Go 语言正式对外公开,并且在 2012 年发布了稳定版本。

Go 语言的设计理念

Go 语言的设计理念是“少即是多”(Less is exponentially more)。这种设计理念体现在 Go 语言的语法设计上,它的语法非常简洁,没有复杂的继承和泛型,也没有异常处理,但这并不影响它的功能性和表达力。

比如,下面这段代码是一个简单的 Go 程序,用来打印 “Hello, World!”:

package main

import "fmt"

func main() {
    fmt.Println("Hello, World!")
}

这个程序非常简单,但是它包含了 Go 语言的一些基本元素,比如包(package)、导入声明(import)、函数(func)和打印语句(Println)。你会发现,Go 语言的语法非常简单易懂。

Go 语言的并发模型

Go 语言的另一个特点是它的并发模型。在很多编程语言中,实现并发编程通常是通过线程和锁,这样做很复杂,容易出错。但是在 Go 语言中,它引入了 goroutine 和 channel,使得并发编程变得更加简单。

goroutine 是一种轻量级的线程,它的创建和撤销的代价非常小。channel 是用来在 goroutine 之间传递数据的,它是线程安全的,可以避免多线程编程时经常出现的数据竞争问题。

以下是一个简单的并发程序,它创建两个 goroutine,分别打印数字和字母:

package main

import (
    "fmt"
    "time"
)

func printNumbers() {
    for i := 1; i <= 10; i++ {
        time.Sleep(100 * time.Millisecond)
        fmt.Printf("%d ", i)
    }
}

func printLetters() {
    for i := 'a'; i <= 'j'; i++ {
        time.Sleep(100 * time.Millisecond)
        fmt.Printf("%c ", i)
    }
}

func main() {
    go printNumbers()
    go printLetters()

    time.Sleep(2000 * time.Millisecond)
}

在这个程序中,printNumbers 和 printLetters 函数都被 go 关键字启动为一个新的 goroutine,这两个 goroutine 会并发执行。

以上就是 Go 语言的历史和背景,以及它的一些基本特性。在接下来的学习中,我们会进一步深入到 Go 语言的各个方面。希望这个介绍对你有所帮助。
推荐阅读:

https://mp.weixin.qq.com/s/dV2JzXfgjDdCmWRmE0glDA

https://mp.weixin.qq.com/s/an83QZOWXHqll3SGPYTL5g

file

标签:编程,语言,编程语言,并发,goroutine,go,Go
From: https://www.cnblogs.com/yaoqian/p/17578809.html

相关文章

  • Go defer 去掉闭包函数,靠谱吗?
    在Go中使用defer时,如果defer语句包含了一个闭包函数,需要特别小心。因为defer语句会在函数返回时执行,而闭包函数可能会捕获外部变量,导致意想不到的结果。在Go中,defer语句中的闭包函数捕获的是变量的地址,而不是变量的值。如果闭包函数在defer执行时才被调用,可能会导致捕获的变量值......
  • 非关语言: 设计模式
    http://www.riabook.cn/doc/designpattern/非关语言:设计模式程式设计是思维具体化的一种方式,是思考如何解决问题的过程,设计模式是在解决问题的过程中,一些良好思路的经验集成,最早讲设计模式,人们总会提到Gof 的著作,它最早将经典的23种模式集合在一起说明,对后期学习程式设计,尤......
  • 初识C语言——7扫雷(低配)
    主程序——text.c:#define_CRT_SECURE_NO_WARNINGS1#include"game.h"game(){ charHide[ACRS][COLS]={'0'}; charShow[ACRS][COLS]={'0'}; //数组初识化 Initialize(Hide,ACRS,COLS,'0'); Initialize(Show,ACRS,......
  • go语言gorm
    ORM对象关系映射(ObjectRelationalMapping,ORM)。指的是对象和关系之间的映射,使用面向对象的方式操作数据库。关系模型和Go对象之间的映射table=>struct,表映射为结构体row=>object,行映射为实例column=>property,字段映射为属性可以认为ORM是一种高级抽象,对......
  • go install 和 go get的区别
    goinstall和goget都是Go语言中的命令行工具,用于处理依赖关系和安装包。它们的主要区别在于功能和使用场景。goinstall:功能:goinstall命令用于编译并安装指定的包或可执行程序到Go语言的工作空间(GOPATH)的bin目录下。如果没有指定包名,则会安装当前目录下的包或可......
  • 饮冰三年-人工智能-Django淘宝拾遗-85-常用的Python格式化工具
       Python代码格式化对于团队协作、代码质量、错误预防以及与Python社区的契合都具有重要意义。好的代码格式化不仅是一种编码规范,更是一种良好的编码习惯,有助于提高整个项目的质量和可维护性。   在团队中,可能有不同的编码规范和自定义的格式化规则。尽管有一些格式......
  • C语言分支与循环(7)--- do...while()循环
    一.do语句的语法do循环语句;while(表达式);我们可以发现do后面的循环语句一定会被执行一次,随后再去执行while()循环语句,去判断表达式,如果为真则返回do语句继续执行,若为假则不进入do语句循环,如以下代码:#include<stdio.h>intmain(void){ inti=0; do { printf("%d",i);......
  • 我的第五次C语言练习
    今天写书上的练习。//第一章练习//intmain(void)//{// intinch;// floatcm;// inch=0;// scanf("%d",&inch);// cm=2.54*inch;// printf("cm=%f\n",cm);// return0;//}发现之前第一章还有练习没写,是将英尺转换为厘米,因为inch乘了个2.54,所以cm是小数,用的是flo......
  • MongoDB 教程二: 添加, 删除,查询 shell命令
       MongoDBShell常用操作命令MonoDB shell命令操作语法和JavaScript很类似,其实控制台底层的查询语句都是用JavaScript脚本完成操作的。 Ø数据库//1、Help查看命令提示helpdb.help();db.yourColl.help();db.youColl.find().help();rs.help();//2、切换/创建......
  • ssh unable to negotiate
    打开~/.ssh/config文件,在文件最开始添加以下配置并保存:Host*HostkeyAlgorithms+ssh-rsaPubkeyAcceptedAlgorithms+ssh-rsa  MacOSVentura系统ssh不再支持ssh-rsa的原因及解决办法https://blog.twofei.com/881/#solution......