Go语言的特点及优势

一、Go语言设计初衷(为什么设计Go语言?)

1.1、设计Go源是为了解决当时Google开发遇到的困难:

  • 大量的C++代码,同时有引入了Java和Python

  • 成千上万的工程师

  • 数以万计的代码

  • 分布式的编译系统

  • 数百万的服务器

1.2、Google开发中的痛点

  • 编译慢

  • 失控的依赖

  • 每个工程师只是用了一个语言里面的一部分

  • 程序难以维护(可读性差,文档不清晰等)

  • 更新的花费越来越长

  • 交叉编译困难

1.3、Go语言的特色

  • 没有继承多态的OO

  • 强制一致类型

  • interface不需要显示声明(Duch Typing)

  • 没有异常处理(Error is value)

  • 基于首字母的可访问特性

  • 不用import或者变量引起编译错误

  • 完整而卓越的标准库包

二、Go语言的优势

1.学习曲线容易

Go语言语法简单,包含了类C语法,因为Go语言容易学习,所以一个普通的大学生花几个星期就能写出来可以上手的,高性能的应用。

2.效率:快速的编译时间,开发效率和运行效率高

开发过程中相当于Java和C++呆滞的编译速度,Go的快速编译时间是一个主要的效率优势。Go拥有接近C的运行效率和接近PHP的开发效率

3.出身名门,血统纯正

4.自由高效:组合的思想,无侵入式的接口

5.强大的标准库

这包括互联网应用,系统编程和网络编程。网络层,系统层的库非常实用。

6.部署方便:二进制文件,Copy部署

7.简单的并发

8.稳定性

Go语言主要有静态语言,天生并发,内置GC(垃圾回收),安全性高,语法简单,编译快速这几个特性,这决定了Go的三个高富帅特性:运行快,开发快和部署快。

9.Go语言能开发什么?

  • 服务器编程,以前你如果使用C或者C++做的那些事情,用Go来做很合适,例如:处理日志,数据打包,虚拟机处理,文件系统。

  • 分布式系统,数据库代理等,例如ETCD

  • 网络编程,这一块目前应用最广,包括:Web应用,API应用,下载应用,而Go内置的net/http包基本上把我们平常用到的网络功能都实现了

  • 数据库操作

  • 开发云平台,目前过内外很多云平台在采用Go开发

三、Golang安装配置

3.1 下载适合自己电脑的Golang

https://golang.org/dl/
https://www.studygolang.com/dl

3.2 Goland 下载

# 官网
https://www.jetbrains.com/go/download/#section=windows
   
# 如果打不开goland的网站,点击下面的这一个网站
https://www.glxxw2018.com/study/blog/detail/apWOUsSh0N.html

四、HelloWorld程序解释及Go 编码规范

目录:

  • 第一个HelloWorld程序解释

  • Go语言编码规范

  • Go语言关键字及保留字

  • Go程序结构组成

4.1HelloWorld程序解释

4.1.1第一个HelloWorld程序

package main

import "fmt"

func main(){

/* 这是第一个简单的程序 */

fmt.Println("Hello,World!")

}

4.1.2 程序解释

  • 第一行代码package main定义了包名。必须在源文件中注释的第一行指明这个文件属于哪个包,如:package main package main表示一个可独立执行的程序,每个Go应用程序都包含一个名为main的包。

  • 下一行import "fmt"告诉Go编译器这个程序需要使用fmt包,fmt包实现了格式化IO(输入/输出)的函数。

  • 下一行func main()是程序入口。main函数是每一个可执行程序所必须包含的。一般来说都是在启动后第一个执行的函数,如果有main()函数则会先执行init()函数

  • 下一行/*...... */是注释。在程序执行时将被忽略。单行注释是最常见的注释形式,你可以在任何地方使用以//开头的单行注释。。多行注释也叫块注释,均以 / * 开头,并以 * /结尾。且不可以嵌套使用,多行注释一般用于文档描述或代码片段。

  • 下一行fmt.Println(...)可以将字符串输出到控制台,并在最后自动增加换行符\n。使用fmt.Print("Hello,World\n")可以得到相同的结果。

4.2 Go语言编码规范

4.2.1 注释

  • 单行注释是最常见的注释形式,你可以在任何地方使用以//开头的单行注释

  • 多行注释也叫块注释,均以/* 开头,并以*/结尾,且不可以嵌套使用,多行注释一般用于文档描述或注释成块的代码片段。

4.2.2 标识符

  • 标识符用来命名变量,类型等程序实体。一个标识符实际上就是一个或是多个字母(A~Z和a~z)数字(0~9),下划线组成的序列,但是第一个字符必须是字母或者下划线为不能是数字。

  • Go不允许在标识符中使用@,$和%等标点符号。

  • Go是一种区分大小写的编程语言,因此,Manpower和manpower是两个不同的标识符。

  • 以下是无效的标识符:

    • 1xy(以数字开头)

    • case(Go语言关键字)

    • chan(Go语言关键字)

    • x+y(运算符是不允许的)

4.2.3 Go语言的空格

  • Go语言中变量的声明必须使用空格隔开。如:var age int;

  • 语句中适当使用空格能让程序更容易阅读。

  • 在变量与运算符间加入空格,程序看起来更加美观,如:

    • a = x +y 

4.2.4 语句的结尾

  • 在Go程序中,一行代表一个语句结束,Go语言中是不需要类似于Java需要分号结尾,因为这些工作都将由Go编译器自动完成。

  • 如果打算将多个语写在同一行,它们则必须使用分号";"人为区分,但在实际开发中并不鼓励这种做法。

4.2.5 可见性规则

  • Go语言中,使用大小写来决定标识符(常量,变量,类型,接口,结构或函数)是否可以被外部包所调用。

  • 以一个大写字母开头,那么使用这种形式的标识符的对象就可以被外部包的代码所使用(使用时程序需要先导入这个包),如同面向对象语言中的public

  • 如果以小写字母开头,则对包外时不可见的,但是他们在整个包的内部时可见并且可用的,像面向对象语言中的private

五、Go程序结构组成

5.1 Go一般结构

// 当前程序的包名

package main

// 导入其他包

import . "fmt"

// 常量定义

const PI = 3.14

// 全局变量的声明和赋值

var name = "gopher"

// 一般类型声明

type newType int

// 结构的声明

type gopher struct{ }

// 接口的声明

type golang interface{ }

// 由main函数作为程序入口点启动

func main() {

Println("Hello,World!")

}

5.2 Go文件的基本组成部分

  • 包声明

  • 引入包

  • 函数

  • 变量

  • 语句 & 表达式

  • 注释

5.3 Go文件结构组成

5.3.1 Go程序是通过package来组织的

  • 只有package名称为main的包可以包含main函数

  • 一个可执行程序有且仅有一个main包

  • 通过import关键字来导入其他非main包

  • 可以通过import关键字单个导入,也可以同时导入多个

5.3.2 程序一般由关键字,常量,变量,运算符,类型和函数组成。

5.3.3 程序中可能会使用到这些分隔符: 括号(),中括号[]和大括号{}

5.3.4 程序可能会使用到这些标点符号:

  • 点 .

  • 逗号 ,

  • 分号 ;

  • 冒号 :

  • 省略号 (三个点) ...

5.3.5 通过const关键字来进行常量的定义。

5.3.6 通过在函数体外部使用var关键字来进行全局变量的声明和赋值

5.3.7 通过type关键字来进行结构(struct)和接口(interface)的声明

5.3.8 通过func关键字来进行函数的声明

Q_Go1的更多相关文章

随机推荐

  1. PrepareStatement对象进行批处理的典型步骤顺序

    https://www.yiibai.com/jdbc/preparestatement-batching-example.html 以下是使用PrepareStatement对象进行批处理的典型步骤 ...

  2. mybatis+mysql 通过sql脚本生成mapper的部分内容

    SQL mysql SELECT concat('<if test="', COLUMN_NAME, ' != null"> ', COLUMN_NAME, ',< ...

  3. SpringCloud学习之Bus消息总线实现配置自动刷新(九)

    前面两篇文章我们聊了Spring Cloud Config配置中心,当我们在更新github上面的配置以后,如果想要获取到最新的配置,需要手动刷新或者利用webhook的机制每次提交代码发送请求来刷新 ...

  4. servlet-api api文档获取请求参数

    1.假如有个get请求后面带有的参数如下: a=b&a2=b2&a3=b3&a4=b4. 如果想获取所有的key,value.这个时候可以根据request的getQueryS ...

  5. WOJ 1538 Stones II 转化背包问题

    昨天是我负责这个题目的,最后没搞出来,真的给队伍拖后腿了. 当时都推出来了 我假设最后结果是取了m个物品,则我把这个m个物品按取的先后编号为 k1 k2 k3 k4...km 则最终结果就是 (k1. ...

  6. Microsoft SQL Server Management Studio连接后报“ viewInfo (Microsoft.SqlServer.Management.SqlStudio.Expl”

    解决办法: 在路径:C:\Users\你的用户名\AppData\Local\Temp\”新建文件夹并命名为2,如果已经有 2 则看清楚是否是文件而不是文件夹,删掉文件改为文件夹: 如果是找不到\Us ...

  7. SQL基础教程(第2版)第5章 复杂查询:5-1 视图和表

    本章将以此前学过的SELECT语句,以及嵌套在SELECT语句中的视图和子查询等技术为中心进行学习.由于视图和子查询可以像表一样进行使用,因此如果能恰当地使用这些技术,就可以写出更加灵活的 SQL 了 ...

  8. ansible-playbook权限提升多种方式

    ansible-playbook 可以方便快速的批量执行部署和运维任务,对于不同的场景和服务器,需要使用不同的权限提升方式. 最佳实现:为了提高playbook的兼容性,跟功能没有直接关系的权限提升脚 ...

  9. UIWindow statusBar消失

    1.新建UIWindow 程序崩溃 报无根控制器错误 Xcode7环境下,新建UIWindow需添加rootViewController 2.新建UIWindow后 statusBar消失 Info. ...

  10. MySQL--通过.frm和.ibd对mysql数据恢复

    转载:http://bbs.csdn.net/topics/392114182 例如说 现在要恢复user表1.先建立和之前user表一样的表结构.就是执行create table user .... ...