在google开发时,开发人员为了解决当时在Google开发上遇到的一些问题,go语言应运而生。当时遇到了编译慢,大量C++、python、java等待吗,花费时间长,服务器数目太过庞大等问题。
以下是笔者在接触go语言时所记录的一些笔记与归纳。
Go 作为一门语言致力于使事情简单化。它并未引入很多新概念,而是聚焦于打造一门简单的语言,它使用起来异常快速并且简单。其唯一的创新之处是 goroutines 和通道。Goroutines 是 Go 面向线程的轻量级方法,而通道是 goroutines 之间通信的优先方式。Go语言在以下方面具有着相当不错的表现:高效并发编程,没有异常处理和函数多返回值以及编译速度快等。Go支持多范式,如程序,功能和并发。它的语法传统上来自C语言,但它已经做了很多修改,以改进简单性和安全性等功能。Go语言的性能与 Java 或 C++相似,比python快了将近30倍。当前我们使用 Go 编写的最大微服务的编译时间只需 6 秒。相较于 Java 和 C++呆滞的编译速度,Go 的快速编译时间是一个主要的效率优势,并且go语言具有一个强大的生态系统。Go 有着强大的工具支持,面向 Redis、RabbitMQ、PostgreSQL、Template parsing、Task scheduling、Expression parsing 和 RocksDB 的稳定的库。Go 的生态系统相比于 Rust、Elixir 这样的语言有很大的优势。因此笔者开始使用go语言,并在此做一个简单的入门。
- Hello World
学习一种编程语言,毫无疑问,都是从“Hello World”开始入门。
package main
import "fmt"
func main() {
fmt.Println("Hello, world!")
}
笔者在初识这段代码时,粗略地将Println中的P小写了,因此导致了程序报错。并且笔者在刚开始运行这段代码时使用了错误的包,导致程序无法运行,main()这个函数所在的包的名称必须命名为main。“fmt"这个包可视化了输入和输出的函数。像其他语言一样Println是换行打印,Print是直接打印。
- 结构体
变量的结构可以在开头进行一个总体的声明。采用驼峰命名法,首字母根据访问控制大写或者小写。struct声明和初始化格式采用多行。
type User struct{
Username string //用户名
Id int //学号
Age int //年龄
}
- 接口
命名规则与结构体规则相似。单个函数的结构名以“er”作为后缀
type register interface{
Regist (p [] byte) (n int, err error)
}
-
关键字
break default fune interface select
case defer Go map Struct
chan else Goto package Switch
const fallthrough if range Type
continue for import return Var -
注释
分为单行注释和多行注释。Go语言提供给/**/此类C++风格注释。也可以用//来注释。结构体和接口都应有注释。 -
var
定义变量,然后进行赋值。
var num int
num=3
使用格式为 var + 变量名 + 类型(包括int, string等,这里不进行展开),如果没有赋值,例如上述代码,若未声明num=3,则默认num为0。可以不直接声明类型。
var name="ABC"
var id=1025712
省略var进行简单定义,使用:=
name := "ABC"
id := 1025712
- 定义常量
常量是个标识符,在程序运行时不会被修改
const Website = "www.baidu.com"
const PI = 3.1415926
- 特殊常量
iota是一个特殊常量,是一个可以被编译器修改的常量。
const(
A=iota
B=iota
C=iota
)
每运行一次iota,则累加一,初始值为0。
const(
A=iota
B //1
C //2
D="abc" //3
E //4
F=100 //5
G //6
H=iota //7
)
const(
I=iota //0
)
-
特殊字符转义
\n换行
\t制表符
\r回车 -
逻辑运算符
&& 与逻辑运算符。
||或逻辑运算符
!非逻辑运算符
a := true
b := false
c := true
res1 := a && b
res2 := a || b
res3 := a && b && c
res4 := a || b || c
- 输入与输出(IO)
使用fmt包
Print() //打印
Printf() //格式化打印
Println() //打印之后换行
格式化打印占位符:
%w 原样输出
%T 打印类型
%t boll类型
%s 字符串
%f 浮点
%d 10进制的整数
%b 2进制的整数
%o 8进制
%c 打印字符
%p 打印地址
输入主要指读取键盘内容:
fmt包下scan类型函数
fmt.Scanln(&A,&B)