Go 语言入门指南:基础语法 | 青训营

43 阅读3分钟

 1.1什么是Go语言 

  1. 高性能、高并发 
  2. 语法简单、学习曲线平缓
  3. 丰富的标准库 
  4. 完整的工具链 
  5. 静态链接 
  6. 快速编译 
  7. 跨平台
  8. 垃圾回收 Java和C的结合体 

 2入门 

2.1安装Golang 

2.2基础语法 

  • 入口包 package main 

  • 变量类型 

  • 控制语句:

  •  ifelse语句: 

  •  for循环:直接死循环,c循环,while型循环

  • switch分支语句:可以使用任何变量类型,可以取代ifelse语句,不需要有break来终止,它会自动终止跳出 

  •  数组:var a [5]int 

  •  切片(使用更多):要把append结构赋值回去 

  •  slice原理:存储的是 长度 容量 指向数组的指针 执行append操作的时候如果容量不够会发生扩容 并返回一个新的slice 所以必须要赋值回去;

  • 可以使用make来指定slice长度;

  • 使用copy在两个slice之间进行拷贝数据:c := make([]string,len(s)) copy(c,s) s[2:5]表示从索引为2到第6个元素但是不包括第6个(索引从0开始); 

  • 不使用make直接声明并初始化:

    good := []string{"g","o","o","d"}    fmt.Println(good) 
    
  •  map:使用make创造一个空map:m:=make(map[string]int) //中括号内是key的类型,int是value的类型;

  • 写入kv对:m["one"] = 1 m["two"] = 2 

  • 读取kv对:m["one"]

  • 判断map中是否含有某个kv对:r,ok := m["unknow"] fmt.Println(r,ok)

  • 删除kv对:delete(m,"one")

  • 不使用make直接声明并初始化:m2 := map[string]int{"one":1,"two":2} 

  • range:快速遍历,使代码更加遍历:返回索引和对应的值;

  • 遍历数组语法:

    nums := []int{2,3,4}    
    sum:=0    
    for i,num := range nums{
    sum += num   
        if num == 2 {     fmt.Println("index",i,"num",num)    }} 
    
  • 遍历map语法: 

    m := map[string]string{"a":"A","b":"B"}
    
        for k, v := range m {
            fmt.Println(k,v) // b B;a A
        }        
        for k := range m{
            fmt.Println("key",k)//key a;key b
        } 
    
  •  函数:语法:func 函数名() 函数返回值类型{函数体} (注意:函数返回值类型是或制,可以为多个,第一个为真正返回信息,第i个为错误信息) 

  •  指针:操作有限,对传入的参数进行修改 

  •  结构体:

    type user struct{
    name string   password string }
    
  • 可以全部定义和初始化,也可以只指定一部分;

  • 使用. 进行读取结构体内的值;

  • 使用指针可以对结构体进行修改 

  •  结构体方法:

  •   type user struct{    name string    password string}func (u user) checkPassword(password string) bool{    return u.password == password}func (u *user) resetPassword(password string) {    u.password = password}func main() {    a := user{name: "ken", password: "barbie"}    a.resetPassword("1024")    fmt.Println(a.checkPassword("1024"))  //true
    
  •  错误处理:可以清晰的知道哪个函数发生了错误,可以用简单的ifelse去处理错误;

  • 在函数返回值类型中加一个error,代表函数可能会返回一个错误,要返回两个值都要返回,如果没有错误就返回一个nil,有错误就返回一个new error eg:return nil,errors.New("Not Found") 

  • 调用有返回错误的函数时,接收变量后边要加上一个err变量,然后要判断err是否存在,不存在才可以进行下一步操作 

  •  字符串操作:

  •  字符串格式化:

  •  JSON处理:

  • Golang中JSON操作非常简单,对于已有的字段,只要保证每个字段的第一个字母大写(即Golang里面的公开字段),就可以使用json.Marshal进行序列化操作,同时也可以使用Unmarshal进行反序列化;

  • 可以将大写字母变小写 对应字段中加上一个json tag就行 

  •  时间处理

  •  数字解析:strconv.ParseInt("111",10,64) 字符串,进制(0表示自动推测),精度 

  •  进程信息