GO
Go语言介绍
Go 即Golang,是Google公司2009年11月正式对外公开的一门编程语言,Go是静态强类型语言,是区别于解析型语言的编译型语言(静态:类型固定 强类型:不同类型不允许直接运算)。
解析型语言:源代码有解析器对代码进行解释执行,类似于python、nodejs、php
编程型语言:源代码编译生成机器语言,然后有机器直接执行机器码即可,类似c \ c++ \ java \ c# \ go
# java
有编译过程,没有直接编译成机器语言,而是字节码,机器不能识别,但java虚拟机:jvm能识别
运行java必须要有jvm
jvm:java虚拟机
jre:java运行时环境
jdk:java开发环境
#python
python是可执行文件,打包python项目或flask项目需要借助pipinstaller模块,详细前往:https://zhuanlan.zhihu.com/p/430490285
如何防止python代码泄露?
- 项目启动后,把源代码删除了,但项目停了就需要重新部署,较繁琐
- 借助pipinstaller,将代码打包成可执行文件
- 做到docker镜像中,运行容器,授予授权码(-e password)
Go语言特性
- 跨平台,是编译性语言
- 语法接近c语言
- 管道(channel),切片(slice),并发(routine)
- 有垃圾回收的机制
- 支持面向对象和面向过程的编程模式
Go语言发展
2009年谷歌公司推出的
2015年8月19日 go1.5 —— 实现的架构变化,同时保留了和旧版本的兼容性,本次更新中移除了”最后残余的C代码”---》以后再写go不用c写了,用go写---》语言的自举
2018年8月24日 go1.11 —— modules和WebAssembly支持 go mod模式 包管理
最新版是 go1.20
Go语言应用
Go语言写的:k8s、docker、七牛( 许式伟,七牛云创始人兼*CEO *)
应用领域
-
服务开发、并发、分布式系统、微服务等方向,自动化运维,区块链
-
内存KV数据库,例如boltDB、levelDB
-
云平台
Go语言发展前景
Go语言将登上语言榜前列,与C和Java并列前三甲
Go语言称霸云计算
Go将统治下一个10年
目前Go语言已经⼴泛应用于人工智能、云计算开发、容器虚拟化、⼤数据开发、数据分析及科学计算、运维开发、爬虫开发、游戏开发等领域。
Go语言简单易学,天生支持并发,完美契合当下高并发的互联网生态
Go开发环境搭建
GO的语言搭建需要go的SDK和go的编辑器
go的SDK---》开发环境----》下载适合电脑go1.20.3.windows-amd64.msi
go的编辑器--》goland(jetbrains系列全家桶),vscode---goland-2023.1.exe
试用30天或破译

第一个helloworld
# 创建项目
# 创建一个go文件
# 写代码
package main // 声明这个go文件是属于哪个包
import "fmt" // 表示导入fmt包,自动导入的,goland自动导入的
func main() {
fmt.Println("helloworld")
}
//解析
package main // 声明这个go文件属于哪个包,main有特殊含义,一个项目要运行必须要有main包,运行的入口是main包下的main函数
// 表示导入fmt包,自动导入的,goland自动导入的,使用了哪个包,编辑器会自动导入
// 包导入,不使用,会报错,编译不过
import "fmt"
// func 定义一个函数 ,main 是函数名,没有参数,没有返回值,整个项目入口
func main() {
// 在控制台输出helloworld
fmt.Println("helloworld") // a... 提示的,意思是传的helloworld实参,给了a
}
// 编译代码---》编译成可执行文件---》默认编译成当前平台可执行文件---》支持跨平台编译---》想编译出linux的---》交叉编译
//编译 go build 文件名----》编译成可执行文件
// 运行(文件名.go),直接运行 双击
// 开发阶段----》编译并运行---》生成可执行文件,不再当前路径,用完就删除
// 编辑器有个快捷运行方式,右键运行
变量命名规范
Go语言中的函数名、变量名、常量名、类型名和包名等所有的命名,都遵循一个简单的命名规则:
- 一个名字必须以一个字母(Unicode字母)或下划线开头,后面可以跟任意数量的字母、数字或下划线
- 大写字母和小写字母是不同的:Name和name是两个不同的变量(区分大小写,但是go的大写有特殊含义)
- 关键字和保留字都不建议用作变量名
关键字:25个,编辑器中会变色
break default func interface select
case defer go map struct
chan else goto package switch
const fallthrough if range type
continue for import return var
保留字:37个
内置常量: true false iota nil
内置类型: int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
float32 float64 complex128 complex64
bool byte rune string error
内置函数: make len cap new append copy close delete
complex real imag
panic recover
总结:
- 建议定义变量,函数名使用------》驼峰式命名方法
- go文件命名:建议使用下划线
变量的定义和使用
-
变量的完整定义
// var关键字 变量名 变量类型 = 变量值 var name string = "kimi" fmt.Println(name) // kimi var age int = 19 fmt.Println(age) //19 -
变量定义了,就必须使用,否则报错
var name string = "kimi" //name declared and not used -
类型推导(不写类型)---》自动推导出kiki是字符串类型
var name = "kimi" var age = 19 fmt.Println(name) //kimi fmt.Println(age) //19 -
虽然是类型推导出来的,但是是有类型的,并且后期不能变换类型
变量只要定义了,类型就固定了,如变量name先定义为字符串,后期就能更改为int
而python是动态强类型语言,是后期可以转换类型
-
简略声明,省略类型,必须使用 :=
name := "kimi" fmt.Println(name) //kimi -
一次性声明多个变量(其实就是基于上面三种变量定义方式的变形)
1.完整定义 //var name, age, gender string = "kimi", "18", "女" var ( name string = "kiki" age int = 18 gender string = "女" ) fmt.Println(name, age, gender) // kimi 18 女 2.类型推导 //var name, age, gender = "kimi", 18, "女" var ( name = "kiki" age = 18 gender = "女" ) fmt.Println(name, age, gender) //kimi 18 女 3.简略声明 name, age, hobby := "kimi", 19, "写代码" fmt.Println(name, age, hobby) //kimi 19 写代码 4.完整定义和类型推导混合 var ( name = "kiki" age int = 18 gender string = "女" ) fmt.Println(name, age, gender) // kimi 18 女 -
变量不能重复定义三种定义方式
var name = "kiki" //var name string = "jim" //不能重复声明变量 //name := "haha" //不能重复声明变量 name, age := "jim", 18 //有新的变量是可以这样重复声明变量 fmt.Println(name, age) //jim 18 -
变量可以先定义在赋值,必须使用完整定义(方式1)
var name string //默认值是空字符串 var age int // 默认值是0 //var age //不行 //name := //不行 //age = 19 // 不行 fmt.Println(name,age) -
简略声明用的多
a :=10 -
查看变量类型 ```go
//a := 99 a := "kimi" fmt.Printf("a的值是:%v,类型是:%T", a, a) //a的值是:kimi,类型是:string