1 go介绍
是Google公司2009年11月正式对外公开的一门编程语言
好多公司:python+go混用, 架构师: 前端、运维、测试、后端各种语言
真正发展也就7、8年时间,很新,云原生的火 ---> docker,k8s
Go上有些坑 --->一直在发展: 支持泛型
Go是静态 强类型 的编译型语言,是区别于解释型语言的弱类型语言
编译型:java、c、c++、c
解释型:python、js、php 等
c、c++ : 不支持跨平台,需要在不同平台 编译成可执行文件再执行
java : 号称跨平台,java字节码运行在虚拟机(jvm)上,需在不同平台装虚拟机(或jdk)
go : 跨平台编译、交叉编译,可在windows平台上编译成linux/mac的可执行文件 在mac上可执行、部署
java: 编译成字节码文件 ---> 需要装jdk,运行在jvm上 ---> 运行
go : 编译成可执行文件 ---> 运行
python、php、nodejs :天然跨平台(解释器跨平台), 运行在解释器上,需在不同平台上装解释器
php、python: 安装各自解释器 ---> 安装所需模块 ---> 运行
跨平台的编译型语言、交叉编译
管道(channel)、切片(slice)、并发(routine)
有垃圾回收的机制
支持面向对象和面向过程的编程模式
2009年11月7日 weekly.2009-11-06
2015年8月19日 go 1.5
实现的架构变化,同时保留了和旧版本的兼容性,本次更新中移除了"最后残余的C代码"。
2018年8月24日 go 1.11
2020年2月 go 1.14
中国的互联网公司基本都会用,有些没用的,都在准备用
-服务端开发,微服务开发、并发、分布式等 运维相关,区块链,云平台
-第一款开源区块链产品是用go写的
很新,生态不完善
云计算和区块链的火,互联网企业高并发的需求
2 开发环境搭建
下载:https://golang.google.cn/dl/
1.17.x ---> 一路下一步
go version
goland
https://download.jetbrains.com/go/goland-2022.2.2.exe?_ga=2.17296255.772214039.1675656980-1569158920.1640582407&_gl=1*11rb9vm*_ga*MTU2OTE1ODkyMC4xNjQwNTgyNDA3*_ga_9J976DJZ68*MTY3NTY1Njk4MC4yLjEuMTY3NTY2MDM5OS4wLjAuMA..
3 基本命令、注意事项
-Go:选择go的安装路径(默认选中了)
-Go(GOPATH):所有的go代码(源码)必须放在该路径下的src文件夹下,否则无法执行
-src : 源码(包含第三方的和自己项目的)
-bin : 编译生成的可执行程序
-pkg : 编译时生成的中间缓存文件
go env
GO111MODULE=空的
GOPROXY=https://goproxy.cn,direct
GOPATH=C:\Users\oldboy\go
GOROOT=c:\go
go build 文件名.go
go run 文件名.go
go get
go version
go fmt
// 单行注释
/*
多行注释
多行注释
*/
go(所有编译型语言)项目要运行,必须有一个入口
go的入口是main包下的main函数
SET CGO_ENABLED=0
SET GOOS=darwin
SET GOARCH=amd64
go build filename.go
SET CGO_ENABLED=0
SET GOOS=linux
SET GOARCH=amd64
go build filename.go
1.在代码中 import "fmt",从哪导入?
2.可能会有第三方包,采用的是go path模式
4 hello world
package main
import "fmt"
func main() {
fmt.Println("hello world")
}
go build s1.go
s1.exe
go run s1.go
5 命名规范
-文件命名:尽量用下划线 python用下划线
-变量命名:推荐用驼峰 python用下划线
-关键字和保留字不能作为变量名
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
内建常量: 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
python中没有 go、c都有goto
java中作为了保留关键字,但是没有作用
6 变量
1 变量类型在定义阶段就确定了,一旦确定,不允许改变
2 变量不可以重复定义
3 变量要先定义再使用
4 变量定义了必须使用,否则报错
5 强类型,不同类型之前不能直接运算(强制类型转换)
package main
import "fmt"
func main() {
var age int = 10
fmt.Println(age)
var age =10
age=100
var name ="lqz"
fmt.Println(age)
fmt.Print(name)
a:=10
fmt.Println(a)
var age int
age=99
fmt.Println(age)
var width,height int = 100, 50
var width,height =100,50
var width,height =100,"lqz"
width,height :=100,";qz"
var name,age,hobby string,int,string="lqz",99,"篮球"
var (
name = "naveen"
age int = 29
height int
)
fmt.Println(name,age,height)
var a int =10
b,a:=99,100
fmt.Println(b)
fmt.Print(a)
}
5 基础数据类型
-有符号整型 包含负整数
-int : 分平台,在32位机器是int32,在64位机器是int64
-int8 : 8个比特位 表示整数范围是:+-2的7次方-1 -127到127 包含0
-int16 : 16个比特位 +-2的15次方减一
-int32 : 32个比特位
-int64 : 64个比特位
-无符号整型 正整数类型
-uint : 分平台,在32位平台是uint32,在64位平台上是uint64
-uint8 : 0--2的8次方-1 定义一个人的年龄
-uint16 : 0--2的16次方-1
-uint32 : 0--2的32次方-1
-uint64 : 0--2的64次方-1
-浮点型(小数) 表示小数点后长度多少位
-float32 : 7位
-float64 : 15位
-复数 实部和虚部
-complex64
-complex128
-byte 与 rune 表示字符对应的两种编码的数字多少
byte : 是uint8的别名 1个byte 刚好是ASCII编码的大小
rune : 是int32的别名 4个byte 刚好是utf-8编码的大小
双引号包裹 " "
反引号包裹 ` `
true 和 false
数字类型 : 0
字符串类型 : 空字符串
布尔类型 : false
byte : int8 8位,最大存储数据量是255,数据范围是-128~127之间
short : int16 16位,最大数据存储量是65536,数据范围是-32768~32767之间
int : int32 32位,最大数据存储容量是2的32次方减1,数据范围是-2的31次方到2的31次方减1
long : int64 64位,最大数据存储容量是2的64次方减1,数据范围为-2的63次方到2的63次方减1
float : float32 32位,数据范围在3.4e-45~1.4e38,直接赋值时必须在数字后加上f或F
double: float64 64位,数据范围在4.9e-324~1.8e308,赋值时可以加d或D也可以不加
6 常量
package main
import "fmt"
func main() {
const 变量名 变量类型 = 变量值
const age int8 = 99
age=199
fmt.Println(age)
const age = 99
age=88
fmt.Println(age)
const name,age = "zhangsan",99
const (
name string ="lqz"
age =99
)
const (
a = 10
b
c = 6
d
e =iota
f
)
fmt.Println(s1,s2,s3,s4,s5)
}
1.const 关键字定义常量,不允许改变
2.定义常量时,第一行必须赋值;若从第二行开始不赋值,则以上一行为基准,以后都是这个值
3.iota的用法: 以行为基准,从0开始,iota放在第几行,就是行数-1,再往后不赋值,都会自增1
4.iota用的最多的情况,就是放在第一行,后面都不用赋值,会自增
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
2022-02-09 路飞学城02--后端常见封装和前端搭建及配置