【语言学习】Go语言(一)

学习网站:http://c.biancheng.net/view/1.html

一、 Go语言简介

  Go是编译型语言,编译器将源代码编译成二进制格式;编译代码时,编译器检查错误,优化性能并输出可在不同平台上运行的二进制文件。要创建并运行Go程序,需要:

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

  Go自带编译器,无需单独安装编译器。

 

二、Go语言的特性

  静态强类型、编译型、并发型、具有垃圾回收功能的编程语言。

  语法简单、并发模型、内存分配、垃圾回收、静态链接(只须编译后的一个可执行文件,无须附加任何东西就能部署)、标准库、工具链(内置完整测试框架,包括单元测试、代码覆盖率、数据竞争、pprof)

 

三、Go语言为并发而生

早期CPU都是以单核的形式顺序执行,现代计算机拥有多个核,但是大部分编程语言都没有有效的工具让程序可以轻易利用这些资源。编程时需要写大量的线程同步代码来利用多个核,容易导致错误。

Go语言正是在多核和网络化的时代背景下诞生的原生支持并发的编程语言。Go语言的并发是基于goroutine的,goroutine类似于线程,但并非线程。可以将goroutine理解为一种虚拟线程。Go语言运行时会参与调度goroutine,并将goroutine合理地分配到每个CPU中,最大限度地使用CPU性能。

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

程序可以将需要并发的环节设计为生产者模式和消费者模式,将数据放入通道。通道另外一端的代码将这些数据进行并发计算并返回结果。

 

四、哪些项目使用Go语言开发

所有的编程语言都反映了语言设计者对编程哲学的反思。

1、Docker:是一种操作系统层面的虚拟化技术

2、Go:Go语言自己的早期源码使用C语言和汇编语言写成。从Go 1.5版本后,完全使用Go语言自身进行编写。

3、Kubernetes:容器调度服务,用户可以通过Kubernetes集群进行云端容器集群管理。系统会自动选取合适的工作节点来执行具体的容器集群调度处理工作。

4、etcd:分布式、可靠的KV存储系统,由CoreOS开发并维护,通过Raft一致性算法处理日志复制以保证强一致性。

5、beego:极轻量级、高可伸缩性和高性能的Web应用框架。

6、martini:快速构建模块化的Web应用的Go语言框架。

7、codis:国产的优秀分布式Redis解决方案,可以将codis理解成为Web服务领域的Nginx,实现了对Redis的反向代理和负载均衡。

8、delve:调试器。

 

五、哪些大公司正在使用Go语言

Google、Facebook、腾讯、百度。。。

 

六、Go语言适合做什么

 

七、Go语言的其他编程语言的对比

 

 八、Go语言的性能如何

http://benchmarksgame.alioth.debian.org/ 

https://benchmarksgame-team.pages.debian.net/benchmarksgame/index.html

 

九、Go语言标准库强大

Go语言的安装文件里包含一些可以直接使用的包,即标准库。Go语言的编译器也是标准库的一部分,Go语言的标准库以包的方式提供支持。

 

十、Go语言上手简单

Go语法简单易懂,学习曲线平缓。Go是Google公司开发的一种静态型、编译型并自带垃圾回收和并发的编程语言。

 

十一、Go语言代码风格清晰、简单

 

十二、Go语言是怎么完成编译的

 

十七、Go语言工程结构详述

1、一个Go语言项目的目录一般包含以下三个子目录:

  src目录:放置项目和库的源文件;

  pkg目录:放置编译后生成的包/库的归档文件;

  bin目录:放置编译后生成的可执行文件。

 

2、src目录:用于以包(package)的形式组织并存放Go源文件

pkg目录:用于存放通过go install命令安装某个包后的归档文件(归档文件指那些名称以“.a”结尾的文件)

bin目录:通过go install命令完成安装后,保存由Go命令源文件生成的可执行文件。

 

3、源文件

命令源文件:如果一个Go源文件被声明为属于main包,并且该文件中包含main函数,则它就是命令源码文件。命令源文件属于程序的入口,可以通过Go语言的go run命令运行或者通过go build命令生成可执行文件。

库源文件:库源文件则是指存在于某个包中的普通源文件,并且库源文件中不包含main函数。

 

十九、第一个Go语言程序

Go语言以“包”作为管理单位,每个 Go 源文件必须先声明它所属的包,所以我们会看到每个 Go 源文件的开头都是一个 package 声明,格式如下:

package name

其中 package 是声明包名的关键字,name 为包的名字。

  • main 包是Go语言程序的入口包,一个Go语言程序必须有且仅有一个 main 包。如果一个程序没有 main 包,那么编译时将会出错,无法生成可执行文件。
  • main函数是Go语言程序的入口函数,也即程序启动后运行的第一个函数。main 函数只能声明在 main 包中,不能声明在其他包中,并且,一个 main 包中也必须有且仅有一个 main 函数。

二十、Go语言程序的编译和运行

可以通过Go语言提供的go build或者go run命令对Go语言程序进行编译:

  • go build命令可以将Go语言程序代码编译成二进制的可执行文件,但是需要我们手动运行该二进制文件;
  • go run命令则更加方便,它会在编译后直接运行Go语言程序,编译过程中会产生一个临时文件,但不会生成可执行文件,这个特点很适合用来调试程序。
posted @ 2022-07-14 19:34  stay_heart  阅读(120)  评论(0)    收藏  举报