Go语言基础 | 青训营笔记

74 阅读3分钟

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

一、简介

Go 即Golang,它很容易用于构建简单、可靠和高效的软件。Go不仅拥有静态编译语言的安全和高性能,而且又达到了动态语言开发速度和易维护性。有人形容Go 语言:Go = C + Python , 说明Go 语言既有C 语言程序的运行速度,又能达到Python 语言的快速开发。

安装Go语言

访问 go.dev/1. 点击 Download ,下载对应平台安装包,安装即可

配置 Go 语言开发环境

可以选择安装 VS Code , 或者 Goland ,对于 VS Code,需要安装 Go 插件

二、基本语法

2.1 基础语法

package main

import (
	"fmt"
)

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

2.2 变量

常见的变量类型包括字符串、整型、浮点型、布尔型,大部分使用方式与C语言类似。两种声明方式:

var name =
name:=

	var a = "initial"
	var b, c int = 1, 2
	var d = true
	var e float64
	f := float32(e)
	g := a + "foo" // 可以通过加号拼接

常量将var改成const即可

const s string = "constant"
	const h = 500
	const i = 3e20 / h

2.3 if else 语句

注意:与c语言不同,if 后面无括号

if 7%2 == 0 {
		fmt.Println("Yes")
	} else {
		fmt.Println("No")
	}

2.4 循环

只有for循环,没有while循环。可以用continue继续循环,也可以用break跳出循环。

for i := 0; i < 9; i++ {
	fmt.Println(i)
}

2.5 switch语句

        //走完一个分支即跳出
        a := 2
	switch a {
	case 1:
		fmt.Println("one")
	case 2:
		fmt.Println("two")
	default:
		fmt.Println("other")
	}
        
	// 可以在case里面写条件分支,比if else嵌套更加清晰
	t := time.Now()
	switch {
	case t.Hour() < 12:
		fmt.Println("Yes")
	default:
		fmt.Println("No")
	}

2.6 数组:

变量类型在后面。数组的长度是固定的,所以在实际应用中,我们更多使用切片。

var a[5]int

2.7 切片

可以在任何时刻更改长度,用make来创建切片:

	s := make([]string, 3)
	s[0] = "a"
	s[1] = "b"
	s[2] = "c"
        
	//用append来追加
	s=append(s,"e","f")
	//取出元素
	fmt.Println(s[2:5])//左闭右开 2~4
	fmt.Println(s[:5])//0~4
	fmt.Println(s[2:])//2~

2.8 map

用make来创建map:

m := make(map[string]int)//key的类型string,value的类型int
m["one"]=1
m["two"]=2

2.9 range遍历

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

2.10函数

注意变量类型后置

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

2.11 指针

相比于c语言里的指针,此处的指针用途非常有限。比如试图将一个变量加2:

func add2(n int){
	n+=2//无用
}
func add2ptr(n *int){
	*n+=2//运用指针
}
func main(){
	n:=5
	add2ptr(&n)//需要加上&符号
	fmt.Println(n)
}

2.12 结构体

//定义结构体user
type user struct{
	name string
	password string
}
// 初始化
a:=user{name:"Liu",password: "2004"}

2.13 字符串操作

a:="hello"
strings.Contains(a,"ll")//a里面是否包含另一个字符串 true
strings.Count(a,"l")//字符串计数 2
strings.Index(a,"ll")//查找字符串位置 2
strings.Repeat(a,2)//重复 hellohello
len(a)//计算长度

2.14 字符串格式化:一概用%v

n:=123
fmt.Printf("n=%v\n",n)

2.15 时间处理

//使用time.Now()快速获取当前时间
t=time.Now()