Go语言基础语法二 | 青训营

74 阅读3分钟

Go语法基础

11.错误处理

Go语言的error类型是一个接口,包含error方法,用来返回一个字符串。

type error interface {
    Error() string
}

在Go语言中,可以使用一个单独的返回值来传递错误信息。可以很清晰的知道是哪个函数返回了错误,并使用if else来处理错误。 在函数的返回值类型后面加一个error,就会返回错误。

package main

import (
   "errors"
   "fmt"
)
//在函数的返回值类型后面加一个error
func div(dividend int, divisor int) (int, error) {
   if divisor == 0 {
      return 0, errors.New("被除数为0")//出现错误输出
   }
   return dividend / divisor, nil//error默认值为nil
}

func main() {
   res1, err := div(4, 2);
   if err != nil {
      fmt.Println(err.Error())
   } else {
      fmt.Println("4/2 = ", res1)
   } //打印 4/2 = 2

   res2, err := div(1, 0);
   if err != nil {
      fmt.Println(err.Error())
   } else {
      fmt.Println("1/0 = ", res2)
   }//打印 被除数为0
}

12.字符串操作

  • Contains判断字符串中是否包含另一个字符串
  • Count字符串计数
  • HasPrefix是否以指定字符串开头
  • HasSuffix是否以指定字符串结尾
  • Index查找某个字符串位置
  • Join连接多个字符串
  • Repeat重复多个字符串
  • Replace替换字符串
  • Split将指定的分隔符切割字符串,并返回切割后的字符串切片。
  • ToLower将字符串转换为小写字母
  • ToUpper将字符串转换为大写字母
  • len 字符串长度
package main
import (
  "fmt"
  "strings"
)

func main(){
  a := "baimiao"
  fmt.Println(strings.Contains(a,"bai")) //true
  fmt.Println(strings.Count(a,"i")) //2
  fmt.Println(strings.HasPrefix(a,"bi")) //false
  fmt.Println(strings.HasSuffix(a,"iao"))  //true
  fmt.Println(strings.Index(a,"mi")) //3
  fmt.Println(strings.Join([]string{"bai","miao"},"-")) //bai-miao
  fmt.Println(strings.Repeat(a,2))  //baimiaobaimiao
  fmt.Println(strings.Replace(a,"miao","mao",-1)) //baimao
  fmt.Println(strings.Split("bai&miao","&"))  //[bai mmiao]
  fmt.Println(strings.ToLower("BAI")) //bai
  fmt.Println(strings.ToUpper(a)) //BAIMIAO
  fmt.Println(len(a)) //7

}

13.字符串格式化

在Go语言中可以用%v来打印任意变量,不需要区分字符串数字,%+v打印详细结果,%#v则更详细。

package main
import (
  "fmt"
)
type point struct {
    x ,y int
  }

func main(){
  p := point {1, 2}
  fmt.Printf("s=%v\n", p) //s={1 2}
  fmt.Printf("s=%+v\n", p) //s={x:1 y:2}
  fmt.Printf("s=%#v\n", p) //s=main.point{x:1, y:2}

  f := 3.1415926
  fmt.Printf("%.2f\n", f) //3.14
}

14.JSON处理

JSON(Javascript Object Notation)是一种轻量级的数据交换语言,以文字为基础,具有自我描述性且易于让人阅读。JSON由于比XML更小、更快,更易解析,以及浏览器的内建快速解析支持,使得其更适用于网络数据传输领域。 对于Go语言中的JSON处理,可以使用encoding/json包。这个包提供了一组函数和方法,用于将Go数据类型编码为JSON格式,或将JSON解码为Go数据类型。

要将Go数据类型编码为JSON,可以使用json.Marshal函数。

package main

import (
	"encoding/json"
	"fmt"
)

type User struct {
	Name string
	Age int
	Hobby string
}

func main()  {
	stu := User{"miao", 18, "tennis"}
	data, err := json.Marshal(&stu)
	if err != nil {
		fmt.Printf("序列化错误 err=%v\n", err)
		return
	}
	fmt.Println("序列化后: ", string(data))
}//序列化后: {"Name":"miao","Age":18,"Hobby":"tennis"}

15.时间处理

在Go语言中,常用获取当前时间就是time.Now()

package main
 
import (
 "fmt"
 "time"
)
 
func main() {
 fmt.Println(time.Now())
 t := time.Now()
 //获取基本字段
 fmt.Println(t.Date())      // 2023 July 30
 fmt.Println(t.Year())      // 2023
 fmt.Println(t.Month())     // July
 fmt.Println(t.ISOWeek())   // 2023 30
 fmt.Println(t.Clock())     // 13 25 40
 fmt.Println(t.Day())       // 30
 fmt.Println(t.Weekday())   // Sunday
 fmt.Println(t.Hour())      // 13
 fmt.Println(t.Minute())    // 25
 fmt.Println(t.Second())    // 40
 fmt.Println(t.Nanosecond())// 510359993
 fmt.Println(t.YearDay())   // 211
}

16.进程信息

package main

import(
  "fmt"
  "os"
  "os/exec"
)
func main(){
fmt.Println(os.Args) //获取go程序运行时写入的命令行参数
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))
fmt.Println("hello")
}