持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第9天,点击查看活动详情
GO语言基础语法
今天学习了一下字节的GO语言内部课,加深了一下对GO语言基础语法的知识。在此就分享一下我经常忘记的一些GO语言语法
字符串操作
字符串操作基本都是在string包中,我们直接列举一些方法来描述
- Contains:检测第一个参数字符串中是否含有第二个参数中的内容,返回bool类型,如果有则返回true,无则返回false
- Count:检测第一个参数中有几个第二个参数中的内容,返回int类型
- HasPrefix:检测第一个参数开头是否为第二个参数,返回bool类型
- HasSuffix:检测第一个参数结尾是否为第二个参数,返回bool类型
- Index:返回第二个参数在第一个参数中首次出现的位置的下标,返回int类型
- Join:插入字符串连接符号,用第二个参数进行连接
- .........还有很多,希望大家还是自己去尝试或者查资料。
- 代码如下:
a:="hello"
fmt.Println(strings.Contains(a,"ll")) //true
fmt.Println(strings.Count(a,"l")) //2
fmt.Println(strings.HasPrefix(a,"he")) //true
fmt.Println(strings.HasSuffix(a,"llo")) //true
fmt.Println(strings.Index(a,"llo")) //2
fmt.Println(strings.Join([]string{"he","llo"},"-"))//he-llo
fmt.Println(strings.Repeat(a,2))//hellohellofmt.p
fmt.Println(strings.Replace(a,"e","E",-1))//hEllo
fmt.Println(strings.Split("a-b-c","-"))//[a b c ]
fmt.Println(strings.ToLower(a)) //hello
fmt.Println(strings.ToUpper(a))//HELLO
fmt.Println(len(a))//5
fmt.Println()
JSON处理
在结构体中的元素类型后面使用json:"",表示当使用json展示时,使用的是json:后面的为key值。
- Marshal:json编码序列化,当直接返回其打印的结果时为16进制的一串数字,使用string()方法再打印则为json的内容
- MarshalIndent:让数据读起来更舒服,因为它能使数据格式化输出,每个 JSON 元素都将在以前缀开头的新行开始,后跟一个或多个缩进副本。
- Unmarshal:反序列化编码
type userIfo struct {
Name string
Age int `json:"age"`
Hobby []string
}
func main() {
a:=userIfo{Name: "大傻子",Age: 11,Hobby: []string{"Golang","JAVA"}}
//json编码序列化
buf,err:=json.Marshal(a)
if err !=nil{
panic(err)
}
fmt.Println(buf) //16进制
fmt.Println(string(buf))//字符串
buf,err=json.MarshalIndent(a,"","\t")
if err !=nil{
panic(err)
}
fmt.Println(string(buf))
var b userIfo
err=json.Unmarshal(buf,&b)
if err!=nil{
panic(err)
}
fmt.Printf("%v\n",b)
}
时间处理
时间处理是我们比较常用的一些方法,一般在time包中。
- Now():获取当前时间
- Data:在指定位置的正确时区中找到与yyyy-mm-dd hh:mm:ss + nsec纳秒等效的日期时间
- Sub():使用第一个时间点出第二个时间可计算出时间差,将它复制给另一个变量,变量可使用Minutes()或者Seconds()来决定用分或秒来表示
- Parse:第一个参数表示时间格式,常量最好使用2006-01-02 15:04:05为格式,第二个参数就是设置的时间。
- now.Unix():时间戳
func main() {
now:=time.Now() //获取当前时间
fmt.Println(now)
t:=time.Date(2022,3,27,1,25,36,0,time.UTC)
t2:=time.Date(2022,3,27,2,30,36,0,time.UTC)
fmt.Printf("%v\n%v\n",t,t2)
fmt.Println(t.Year(),t.Month(),t.Day(),t.Hour())
fmt.Printf(t.Format("2006-01-02 15:04:05" ))
diff:=t2.Sub(t) //相差多久
fmt.Println(diff) //1h5m0s
fmt.Println(diff.Minutes(),diff.Seconds())//65 3900
t3,err:=time.Parse("2006-01-02 15:04:05","2022-03-27 01:25:36")
if err!=nil{
panic(err)
}
fmt.Println(t3)
fmt.Println("t",t,"t3",t3)
fmt.Println(t3==t) //ture
fmt.Println(now.Unix()) //时间戳
}
数字解析
一般都是将string类型解析为int类型,若不是string类型,可转换为string再转int类型,一般数字解析在strconv包中
- ParseFloat():前者为string类型的浮点数,后面是转换的位数
- ParseInt():前者为string类型的整型,后面是转换的位数
- Atoi():自动转换成对应的整型或浮点型,当无法转换的string则会报错
func main() {
f,_:=strconv.ParseFloat("1.234",64)
fmt.Println(f)//1.234
n,_:=strconv.ParseInt("111",10,64)
fmt.Println(n)//111
n,_=strconv.ParseInt("0x1000",0,64)
fmt.Println(n)//4096
n2,_:=strconv.Atoi("123")
fmt.Println(n2)//123
n2,err:=strconv.Atoi("AAA")
fmt.Println(n2,err)//返回错误
}
进程信息
- os.Args:在cmd命令行输入的方法
- os.Getnv("PATH"):查看PATH中的环境变量
- exec.Command:快速启动子进程....
func main() {
fmt.Println(os.Args)
//查看环境变量配置
fmt.Println(os.Getenv("PATH"))
//配置环境变量
fmt.Println(os.Setenv("AA","BB"))
//启动子进程,快速获取输入输出
buf,err:=exec.Command("grep","127.0...0.1","/etc/hosts").CombinedOutput()
if err!=nil{
panic(err)
}
fmt.Println(string(buf))
}