初识Go语言

Go是一种静态强类型、编译型、并发型语言。

一、Go语言的设计思维

尽可能少的方式去处理事情,减少选择的烦恼。

go的特点:

  • 仅有25个关键字,简洁的语法
  • 内置垃圾回收器,大大降低程序员管理内存的负担
  • 去除隐式类型转换、去除指针算法,提高语言健壮性
  • 首字母大小写决定可见性,通过约定而不是声明告诉开发者,提高阅读效率
  • 故意不支持函数默认参数,必须明确每个参数意义,提高设计的清晰度和代码可读性
  • 没有面向对象的类,也没有子类,没有构造函数和析构函数
  • 偏好组合
  • 任何类型都可以拥有方法
  • 接口只是方法的集合,其实现是隐式的(无需implements显示声明)
  • n--、n++都是语句,不是表达式。没有--n、++n
  • 没有三元运算符
  • 内存总是初始化为零值
  • 没有异常
  • 内置字符串、切片、map等类型
  • 内置并发支持,对多核计算机支持友好。goroutine、channel、select就是为并发而生的
  • 官方提供了丰富的工具链,涵盖了编译、编辑、依赖获取、调试、文档、性能分析等诸多方面

二、Vscode开发工具

依赖git:Git官网下载并安装

下载go:The Go Programming Language (google.cn)

vscode:Visual Studio Code - Code Editing. Redefined下载并安装

插件搜索并安装:初识Go语言_第1张图片

 还包括TODO Tree

创建项目并重启vscode

执行项目会提示dlv依赖的安装,install ALL即可(由于是国外的所以需要在系统环境变量中配置GOPROXY,mirrors.aliyun.com找到相关代理地址,后面添加,direct)

不安装dlv,运行go mod init XXXX(随意的项目名称)即会报错(相当于执行F5)go mod管理整个项目

运行项目执行:go run xxx.go

三、语言的发展

1、cpu:控制器、计算器

数据在I里,从I读取到内存以供cpu使用,cup负责从内存加载指令和数据,并把执行结果写入内存,如有必要写到O设备上。

机器语言(二进制)不同设备指令集并不一致->汇编语言(CPU指令集一致:SUB A B)->编译语言(符合ABI规范的二进制文件,os帮加载到内存运行main)

静态语言:运行时结构不可变的语言。

2、高级语言的发展:

  • 非结构化语言

          编号或标签、GOTO,子程序可以有多个入口和出口

          有分支、循环

  • 结构化语言

            任何基本结构只允许是唯一入口和唯一出口

            顺序、分支、循环、废弃GOTO(随意跳转)

  • 面向对象语言

            更加接近人类认知世界的方式,万事万物抽象成对象,对象间关系抽象成类和继承

             封装、继承、多态

  • 函数式语言

             古老的编程范式,应用在数学计算、并行处理的场景。引入到了很多现代高级语言中

             函数是“一等公民”,高阶函数

四、程序(program)

  • 算法+数据结构=程序
  • 数据是一切程序的核心
  • 数据结构是数据在计算机中的类型和组织方式
  • 算法是处理数据的方式,算法有优劣之分

1、命名规范

标识符采用CamelCase驼峰命名法

  • 只在包内可见,采用小驼峰命名
  • 在包外可见,采用大驼峰命名

简单循环变量可以使用i、j、k、v等

条件变量、循环变量可以是单个字母或单个单词,Go倾向于使用单个字母。

常量驼峰命名即可

  • 在其他语言中,常量多使用全大写加下划线的命名方式,Go语言没有这个要求
  • 约定俗成的全大写,例如PI

函数/方法的参数,返回值应是单个单词或单个字母

函数可以是多个单词命名

类型可以是多个单词命名

方法由于调用时会绑定类型,所以可以考虑使用单个单词

包以小写单个单词命名,包名应该和导入路径的最后一段路径保持一致

接口优先采用单个单词命名,一般加er后缀。Go语言推荐尽量定义小接口,接口也可以组合

2、标识符

在编译后看不到,被替换成了内存地址了。

标识符是编程给程序员用的,用来指代内存中的一个值

使用建议:

  • 顶层代码中定义包级标识符

           首字母大写作为包导出标识符,首字母小写作为包内可见标识符

           const定义包级常量,必须在声明时初始化

           var定义包级变量

                        可以指定类型,也可以使用无类型常量定义

                        延迟赋值必须指定类型,不然没法确定零值

  • 有相关关系的,可以批量定义在一起
  • 一般声明时,还是考虑“就近原则”,尽量靠近第一次使用的地方进行声明
  • 不能使用短格式定义 

3、常量

Go语言中,boolean、rune、integer、float、complex、string都是字面常量。其中rune

integer、float、complex常量被称为数值常量

4、短格式

  • 使用:=定义变量并立即初始化
  • 只能用在函数中,不能用来定义全局变量
  • 不能提供数据类型,由编译器来推断

5、零值

变量已经被声明,但是未被显示初始化,这时变量将会被设置成零值

int=0

float=0.0

bool=false

string=""

指针类型为nil

6、_下划线是空白标识符

  1. 下划线和其他标识符使用方式一样,但它不会分配内存,不占名词空间
  2. 为匿名变量赋值 其值会被抛弃,因此,后续代码中不能使用匿名变量的值,也不能用匿名变量为其他变量赋值

7、关键字和预定义表示符不可以随便用做标识符

你可能感兴趣的:(Go,linux,运维,服务器)