把我们不注意和容易遗忘的GO语言语法再学一遍吧!!!

71 阅读4分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 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))
}