Go基础语法|青训营笔记

302 阅读4分钟

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

Go语言的特点

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

//简单的http服务器
package main

import "net/http"

func main()  {
    http.Handle("/",http.FileServer(http.Dir(".")))//把斜杠指向一个静态路由的实现
    http.ListenAndServe(":8080",nil)//增加8080端口,启动服务器
}

配置开发环境

安装Golang or 配置集成开发环境(VSCode下载Go插件)

基础语法 - Hello World

package main//mian包的一部分,程序的入口包(入口文件)

import "fmt"//导入fmt包,作用:格式化输入输出

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

fmt包主要用于格式化输入输出。函数如Printf,Dprintf,Fprintf等,可以格式化输出字符串,Scanf,Sscanf,Fscanf等,可以读取格式化字符串

基础语法 - 变量

变量声明的两种方式:

1,使用var关键字

var age int
var name string

2,通过简写的方式声明变量,如:

age := 18
name := "John"

基础语法 - if else

Go与C++、java不同,if后面没有括号,形如:if x < 25。如果加上括号,编辑器会在运行前自动去掉。

使用示例:

   if num := 9; num < 0 {
      fmt.Println(num, "is negative")
   } else if num < 10 {
      fmt.Println(num, "has 1 digit")
   } else {
      fmt.Println(num, "has multiple digits")
   }

Go中if-else语句括号位置被严格限制,改动会出现语法错误

基础语法 - switch

switch语句中的变量可以是任何类型,可以是一个常量或者一个变量,在每个case后面可以跟多个值,用逗号隔开

Go中的switch语句也支持在条件判断语句前执行简单的语句,这样就可以在一个switch语句中处理多个条件

使用示例:

   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")
   }

基础语法 - 数组

Go数组跟其他语言都差不多,如长度固定等

基础语法 - 切片

切片 (slice) 是一种对数组的抽象,可以让你动态地管理数组中的元素。切片是一个指向底层数组的指针,并且包含了指针、长度和容量这三个属性

切片的初始化如:

var slice []int = array[0:5]

切片可通过下标访问数组中的元素,且支持切片赋值和切片比较操作。 切片可以通过内置函数make()来创建,如:

//make([]type, len, cap)
//cap可缺省
s := make([]string, 3)

切片也可以通过内置函数append()来动态地增加元素。

slice := []int{1,2,3}
slice = append(slice, 4, 5)//slice = [1 2 3 4 5]

基础语法 - map

Go语言中的map是一种内置数据结构,用于存储键值对。键必须是可比较的数据类型(如字符串、整数等),值可以是任何数据类型。map可用于统计字符串中单词出现次数或维护用户信息数据库等任务。可以使用make函数创建新的map

map遍历时完全无序的,不会按照字母或者插入顺序,与C++中unordered_map类似

m := make(map[string]int)
package main

import "fmt"

func main() {
   m := make(map[string]int)
   m["one"] = 1
   m["two"] = 2
   fmt.Println(m)           // map[one:1 two:2]
   fmt.Println(len(m))      // 2
   fmt.Println(m["one"])    // 1
   fmt.Println(m["unknow"]) // 0

   r, ok := m["unknow"]
   fmt.Println(r, ok) // 0 false

   delete(m, "one")

   m2 := map[string]int{"one": 1, "two": 2}
   var m3 = map[string]int{"one": 1, "two": 2}
   fmt.Println(m2, m3)
}

基础语法 - range

在 Go 中,range 关键字用于遍历数组、切片、字符串、map 和通道中的元素。对于数组、切片和字符串,它将返回每个元素的索引和值。对于 map,它将返回每个键和值。对于通道,它将返回每个从通道中接收到的值。

package main

import "fmt"

func main() {
   nums := []int{2, 3, 4}
   sum := 0
   for i, num := range nums {
      sum += num
      if num == 2 {
         fmt.Println("index:", i, "num:", num) // index: 0 num: 2
      }
   }
   fmt.Println(sum) // 9

   m := map[string]string{"a": "A", "b": "B"}
   for k, v := range m {
      fmt.Println(k, v) // b 8; a A
   }
   for k := range m {
      fmt.Println("key", k) // key a; key b
   }
}

基础语法 - 函数

Go中函数与其他语言中的类似,但函数定义时的格式有所不同
func, 函数名称,参数和返回值
Go语言函数支持多个返回值,可更加灵活的使用和定义函数

package main

import "fmt"

func add(a int, b int) int {
   return a + b
}

func add2(a, b int) int {
   return a + b
}

func exists(m map[string]string, k string) (v string, ok bool) {
   v, ok = m[k]
   return v, ok
}

func main() {
   res := add(1, 2)
   fmt.Println(res) // 3

   v, ok := exists(map[string]string{"a": "A"}, "a")
   fmt.Println(v, ok) // A True
}