Go基础语法 | 青训营笔记

33 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天

1.什么是go语言

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

2.go语言的安装

1. Go下载 - Go语言中文网 - Golang中文社区 (studygolang.com)下载安装包

2.安装完成后用命令行go version 检查安装版本,是否已经完成安装

3.创建环境变量:GOROOT,GOPATH 点击我的电脑-属性-环境变量-新建即可 

GOROOT:GO的安装目录

GOPATH:GO语言项目存储的路径   需要包含 src ,pkt, bin三个文件夹

4.利用 go env 来检查环境变量是否配置完成

5.开发工具goland去官网下载即可

3.基础语法理解

3.1利用控制台打印Hello,World!

打印函数在fmt包中,要想使用首先导入fmt包

package main

import "fmt"

func main() {
   fmt.Println("Hello World !")
}

image.png

3.2swich语法

switch case 选择分支,根据switch后的条件进行选择 注:go中的switch case 选择分支与java,c当中有所不同,go中执行完所选分支之后就会进行退出,而如果分支中没有break,java,c是执行完之后继续向下执行,如果想让go语言中执行完之后继续往下执行的话可以是用fallthough穿透进行无条件继续往下执行

package main

import (
   "fmt"
)

func main() {

   a := 2
   switch a {
   case 1:
      fmt.Println("one")
   case 2:
      fmt.Println("two")
   case 3:
      fmt.Println("three")
   case 4, 5:
      fmt.Println("four or five")
   default:
      fmt.Println("other")
   }

   
}

image.png

3.3切片内容讲解

切片(slice)就是一种截取索引片段的技术,借助切片技术,我们可以十分灵活地处理序列类型的对象。 Slice的创建:

var s []int 

当想要创建固定长度的Slice时可以用make,例如创建一个长度为8,底层数组为10的整型数组

s:=make([]int810)

Slice的扩展:

  1. 可以向后扩展,不可以向前扩展
  2. s[i]不可以超越len(s),向后扩展不可以超过底层数组的cap(s)
package main

import "fmt"

// Slice 切片
//使用Slice 传递的时候这样用 arr[:]

func main() {
   arr := [...]int{0, 1, 2, 3, 4, 5, 6, 7}
   s := arr[2:6]
   fmt.Println("s:", s)
   fmt.Println("arr[2:6]", arr[2:6])
   fmt.Println("arr[2:]", arr[2:])
   fmt.Println("arr[:6]", arr[:6])
   fmt.Println("arr[:]", arr[:])

   //Slice的传递是引用传递
   fmt.Println("未更新前的arr[2:6]", arr[2:6])
   updateSlice(arr[2:6])
   fmt.Println("updateSlice:arr[2:6]", arr[2:6])
   updateSlice(arr[:])
   fmt.Println("updateSlice arr[:]", arr[:])

   //Slice的扩展
   fmt.Println("Extending Slice")
   s1 := arr[2:6]
   s2 := s1[3:5] //s1[0:3]   s2相当于s1[3],s1[4],按理说会导致越界
   fmt.Println("s1的值为", s1)
   fmt.Println("s2的值为", s2)
   fmt.Printf("s1=%v,len(s1)=%d,cap(s1)=%d\n",
      s1, len(s1), cap(s1))
   fmt.Printf("s2=%v,len(s2)=%d,cap(s2)=%d\n",
      s2, len(s2), cap(s2))
   fmt.Println(s2[:3])
  
}

func updateSlice(arr []int) {
   arr[0] = 100
}

image.png

image.png

3.4map内容讲解

package main

import "fmt"

// map的使用
func main() {
   //map的创建map[k]v
   m1 := map[string]string{
      "name":   "ccmouse",
      "course": "goland",
      "site":   "imooc",
   }
   m2 := make(map[string]int)
   var m3 map[string]int
   fmt.Println(m1, m2, m3)

   fmt.Println("Traversing map")
   //遍历map函数
   for s, s2 := range m1 {
      fmt.Println(s, s2)
   }

   fmt.Println("Getting values")
   courseName, ok := m1["course"]
   fmt.Println(courseName, ok)
   if caseName, ok := m1["case"]; ok {
      fmt.Println(caseName, ok)
   } else {
      fmt.Println("key does not exist")
   }
   //用value ,ok:=m[key]去判别key是否存在
   fmt.Println("Deleting values ")
   name, ok := m1["name"]
   fmt.Println(name, ok)
   //用delete可以删除map中的元素
   delete(m1, "name")
   name, ok = m1["name"]
   fmt.Println(name, ok)//打印map函数当中的内容
}

运行结果如下图所示

image.png

image.png

image.png