【青训营】Go语言的基本语法

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

一、 配置Go语言及其开发环境

在这里插入图片描述
在这里插入图片描述
Mac配置http://t.zoukankan.com/zsy-p-6685889.html
https://wenku.baidu.com/view/8aeec92b15fc700abb68a98271fe910ef12daeaf.html?wkts=1673764660043&bdQuery=%E5%A6%82%E4%BD%95%E9%85%8D%E7%BD%AEgo+pathmac

二、基础语法

package main

import (
	"fmt" // 引入输入输出包fmt
)

func main() { //主要函数main
	fmt.Println("HelloWorld")
}

使用以下命令运行该代码

go run \main.go

使用以下命令可以将该代码编译成二进制文件

go build \main.go

1.变量类型

主要变量包括整形、字符型、布尔型和字符串其中字符串为内置类型两个字符串的拼接可以用+直接拼接两个字符串的比较也可以直接实用等于号

定义变量的方法如下

var a = 10086	//定义变量a这种方法定义变量不需要指明类型
f := float32(e)	// 定义变量f这种定义方法可以知名类型
const h = 50000 // 定义常量常量无固定类型根据使用时确定类型但是其二进制形式保持不变

使用案例如下

package main

import "fmt"

func main() {
	var a = "init"
	var b, c int = 1, 2
	var d = true
	var e float64
	f := float32(e)
	g := a + " foo"
	fmt.Println(a, b, c, d, e, f, g)
}

2.选择语句

go语言的if中无括号而后面必须加大括号

import "fmt"

func main() {
	if 7%2 == 0 {
		fmt.Println("7 is even")
	} else {
		fmt.Println("7 is odd")
	}
}

switch语句
go使用switch语句一旦遇到了合适的case则会执行并跳出switch不需要使用break跳出。并且go的switch语句可以不写switch条件而直接在case中写条件。这可以用于替代多个if-else语句并且拥有更高的性能。示例如下
switch语句


func main() {
	a := 2
	switch a {
	case 1:
		fmt.Println("one")
	case 2:
		fmt.Println("two")
	}
	t := time.Now()
	switch {
	case t.Hour() < 12:
		fmt.Println("morning")
	case t.Hour() >= 12 && t.Hour() < 18:
		fmt.Println("afternoon")
	}
}

3.循环语句

for语句

package main

import "fmt"

func main() {
	l := 1
	for {
		fmt.Println("loop")
		break
	}
	for j := 7; j < 9; j++ {
		fmt.Println(j)
	}
	for n := 0; n < 5; n++ {
		if n%2 == 0 {
			continue
		}
		fmt.Println(n)
	}
	for l <= 3 {
		fmt.Println(l)
		l++
	}
}

4.数组

func main() {
	var a [5]int
	a[4] = 100
	fmt.Println(a[4], len(a))

	b := [5]int{1, 2, 3, 4, 5}
	fmt.Println(b)

}

5.切片slice

切片是可变长的数组比定长数组使用得更频繁


func main() {
	s := make([]string, 3) // 使用make函数新建数组
	s[0] = "a"
	s[1] = "b"
	s[2] = "c"
	fmt.Println(s)

	s = append(s, "d") // 在切面后面追加元素
	s = append(s, "e", "f")
	fmt.Println(s)

	c := make([]string, len(s))
	copy(c, s) //复制切片操作

	// 切片的切片操作
	fmt.Println(c[3:])
	fmt.Println(c[:4])
	fmt.Println(c[1:3])
}

6.Map

func main() {
	m := make(map[string]int) // 创建一个key为stringvalue为int的map
	m["one"] = 1              // 添加操作
	m["two"] = 2
	fmt.Println(m)
	fmt.Println(m["one"]) // 查询操作

	delete(m, "one") //删除操作
}

7.Range

对于slice或者map可以使用range快速遍历使用起来更方便示例如下

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

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

对切片的range会返回切片的下标和对应的值而对于map的range则会返回其键值对。

8.函数

函数中变量类型倒置可以返回多个返回值其结构如下

func 函数名(形式参数) 返回值 {}

返回值有多个的时候使用将其括起来

9.指针

10.结构体

为结构体定义方法。带指针的结构体方法可以对结构体进行修改
可以将某个函数定义为某个结构体所属的函数类似于Java中的成员类型其格式如下

func (结构体变量名 结构体名)函数名(参数) (返回值类型){ }

如果传入的是结构体指针则可以在函数内对结构体进行修改

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
}

错误处理

字符串操作

格式化输出
使用%v输出任意类型%+v打印出字段名和值%#v会打印出结构体和其中的值和字段名

JSON操作

JSON的序列化和反序列化
结构体中将所有字段名都首字母大写便可通过Marshal()函数进行序列化转化为JSON对象

字符串转化

0表示自动识别原字符串进制

进程信息

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: go