开学第一课:Go 语言入门指南:基础语法和常用特性解析| 豆包MarsCode AI刷题

112 阅读3分钟

开学第一课:Go 语言入门指南:基础语法和常用特性解析**| 豆包MarsCode AI刷题**

1.1 什么是Go语言

  • Go语言是Google出品的通用型计算机编程语言

1.2 Go语言的特性

  1. 高性能、高并发: 性能直追C艹,不需要寻找经过高度性能优化的第三方库即可开发高并发应用程序。
  2. 语法简单学习曲线平缓 :在C语言上进行了优化。
  3. 丰富的标准库 :标准库有很高的稳定性和兼容性保障。
  4. 完善的工具流 :内置了完整的单元测试、性能测试框架。
  5. 静态链接 :所有的编译结果都是静态链接的,只需要拷贝编译后的唯一可执行文件,即可部署运行,镜像体积可以非常小。增加几行代码可以一秒内完成编译(增量编译)。
  6. 跨平台
  7. 垃圾回收 :类似JAVA写代码时,无需考虑内存释放。

1.3 环境安装与配置##

  • 环境配置:

go.dev

studygolang.com

goproxy.cn

  • 编译器:VScode

1.3 代码实例

package main

import (
	"strings"
	"unsafe"
)

const (
	a = "a12hjhvjhj"
	b = len(a)
	c = unsafe.Sizeof(a)
)

func main() {
	const Pi = 3.14159
	var arr = [3]int{1, 2, 3}
	var d = 1
	var ptr *int = &d

	println(*ptr, ptr, d, &d)
	println(a, b, c)
	print(arr[0])
	println(a[:])

	println(strings.Split(a, "h"))
	println(strings.Replace(a, "h", "2", 2))
}
// 运行:
// go run hello.go
//记得写完以后要保存才能命令行运行

2.1 基础语法——变量

  • 字符串
  • 整形
  • 浮点型
  • 布尔型
类型备注
字符串可以用+进行拼接,可以用=判断相等
整型
浮点型
布尔型

2.2 基础语法 - if else

package main

import "fmt"

func main() {
	if 10%2 == 0 {
		fmt.Println("偶数")
	} else {
		fmt.Println("奇数")
	}

  • go里的if语句没有小括号
  • go内的if语句不能和大括号内的语句在同一行

2.3 基础语法 - for循环

package main

import "fmt"

func main() {
	for {
		fmt.Println("死循环")
	}
	for j:=7;j<9;j++ {
		fmt.Println(j)
	}
	for k:=0;k<10;k++{
		if k%2==0 {
			continue
		}
	}
	i:=1
	for i<=3{
		i=i+1
	}
}
  • go语言只有一种循环类型:for

2.4 基础语法 - switch

  • go的switch区别于C艹,在执行完一个case语句后不会接着执行,会直接跳出switch语句,不需要像c艹一样每一个语句后面都加continue
  • go的switch功能更加强大,变量可以 是函数,字符串,结构体等等

2.5 基础语法 - 数组

package main

import "fmt"

func main() {
	var a [5]int
	a[4] = 100
	b := [5]int{1, 2, 3}
	fmt.Println(b)
	var twoD [2][3]int
	for i := 0; i < 2; i++ {
		for j := 0; j < 3; j++ {
			twoD[i][j] = i + j
		}
	}
	fmt.Println(twoD)
}

  • 开发业务数组用的少,因为长度是固定的,一般是用切片

2.5 基础语法 - 切片

package main

import "fmt"

func main() {
	s := make([]string, 3)
	s[0] = "a"
	s[1] = "b"
	s[2] = "c"
	fmt.Println(len(s))
	s = append(s, "d")
	s = append(s, "e", "f")
	fmt.Println(s)
	c := make([]string, len(s))
	copy(c, s)
	fmt.Println(c)
	fmt.Println(c[2:5])
}
  • 区别于python,go的切片不能使用负索引,所以只能通过len()方法获取列表长度,然后减,进行类似功能

2.5 基础语法 - map

  • 又名hash或者字典
package main

import "fmt"

func main() {
	m := make(map[string]int)
	m["one"] = 1
	m["tow"] = 2
	fmt.Println(m)
	delete(m, "one")
	fmt.Println(m)
	m2 := map[string]int{"one": 1, "zero": 0}
	fmt.Println(m2)
}

2.5 基础语法 - range

package main

import "fmt"

func main() {
	nums := []int{2, 3, 4}
	for i, num := range nums {
		println(i, ":", num)
	}

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