一、go语言:
1.什么是go语言?(特点)
1.高性能,高并发
2.语法简单(感觉有点像python)
3.丰富的标准库,完善的工具链。(方便便捷)
4.静态编译(不同于python),编译速度非常快
5.跨平台
6.可垃圾回收
2.字节为什么用?
最初是python,团队不是java背景,go容易学。
RPC框架?
远程过程调用,用于微服务架构与分布式系统,个人理解意思是不同的机器上的方法互相调用
3.开发环境
goland
4.基础语法
package 程序的入口包
fmt 输出
变量声明:
变量两种:
var a (类型)=
a :=
小数不能舍弃小数部分强转为整数
常量没有确定的类型,会根据上下文确定类型
但不是动态编译
const a (类型)=
上面两处(类型)均可省略
条件、循环以及遍历
if 后必须跟大括号{ }
只有for循环没有while,不用加括号()
switch-case可以不用写break,case可以使用任意变量类型,switch后不写变量可以用case写条件分支(代替if-else)
遍历:
num:=[ ]int{2,3,4}
for i,num := range nums{ }
i是索引或key,num为value
数组:
var a [k](类型)
var a [k](类型)=[k](类型){a,b,c} 注意var声明时初始化的方式
a :=[k](类型){a,b,c}
{ }必备,可以不初始化
切片:
s :=make([ ]string,3)
s[1]="123"
s=append(s,"d")
会扩容并赋值给原变量
copy(a,b)
a在初始化后b复制为a
map:
m := make(map[key类型]value类型)
delete(m,key)
不同:遍历map是无序的。
函数:
func add(a int,b int) int{ }
返回类型写在最后,原生支持返回多个值,一般第一个值是结果,第二个值是错误信息。
exists(a int)(v string,ok bool){ }
指针:
主要作用只是传参时区分是拷贝还是原变量地址 传递加&,接收加*
结构体:
type name struct{ name string }
结构体方法-》其他语言的类成员函数
func (u user) add(a int) bool{ }
此处user带指针才能修改结构体
错误处理:
同上,函数返回两个值,(v *user ,err error)
字符串操作:
import "strings"
字符串格式化:
fmt.Printf("a=%v\n",a)
不同:都用%v
同: %.2f的类似用法
JSON处理:
buf,err = json.Marshal(a)序列化为16进制
打印时 string(buf) 强转将16进制转为字符串形式
err = json.Unmarshal(buf,&b)反序列化为结构体b
时间处理:
import "time"
now :=time.Now() 默认CST
now :=time.Date(2022,3,27,1,25,36,0,time.UTC)
now.Year()/now.Day()......
diff=t1.Sub(t2)
diff.Minutes()/diff.Seconds()
time,err :=time.Parse("时间字符串的示例","时间")
(其中第一个参数layout的时间必须是"2006-01-02 15:04:05"这个时间,不管格式如何,时间点一定得是这个)
time.Unix()获取时间戳
字符串与数字转换:
import "strconv"
ParseFloat("1.2345",64)
ParseInt("11",10,64) 10进制,64位精度
Atoi("123") 数字->字符串
进程信息:
fmt.Println(os.Args) 进程信息
os.Getenv("PATH") 获取环境变量
os.Setenv("AA","BB") 写入环境变量
exec.Command("grep","127.0.0.1","/etc/hosts").CombinedOutput()
执行子进程并获取其输出