Go 语言基础 | 青训营笔记

40 阅读2分钟

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

Go 语言基础 - 基础语法

.一、本堂课重点内容:

  • 安装golang
  • 配置继承开发环境
  • 基础语法

二、详细知识点介绍:

  • 基础语法
    • 变量 var name = value name:=value
    • 判断 if 后面没有小括号
    • 循环 没有while 和 do while 只有for循环
    • 分支 switch 不需要break 只跑唯一一个分支 变量可以是任意类型 可以用来代替if
    • 数组 var a [5]int 长度固定不常用
    • 切片 创建切片s:= make([]string,3) 追加元素s = append(s,"d") 切片间复制 c := make([]string,len(s)) copy(c,s)
    • map 创建m := make(map[string]int) m["one] = 1 读取 r,ok := m["one"] 删除 delete(m,"one")
    • range 快速遍历 nums := []int{2,3,4} for i,num := range nums{fmt.Println("index:",i,"num:",num)} 不需要的参数可使用下划线代替
    • 函数 func add(a int, b int) int func exists(m map[string]string,k string) (v string,ok bool){}
    • 指针 对传入参数进行修改 func add2ptr(a *int){*n +2}
    • 结构体 type user struct{name string password string}
    • 结构体方法 第一种写法 可以对结构体进行修改func (u *user) restPassword(password string){u.password = password} 第二种写法func (u user) checkPassword(password string) bool { return u.password == password}
    • 错误处理 在返回值里添加err error
    • 字符串格式化 fmt
    • JSON处理 序列化buf,err := json.Marshal() 反序列化 var b type json.Unmarshal(buf,&b)
    • 时间处理 now := time.Now() 获取时间戳 time := time.Unix()
    • 数字解析 字符串和数字的转换包 strconv
    • 进程信息 两个包 os os/exec 获取和写入环境变量 os.Getenv("PATH") os.Setenv("AA","BB")

三、实践练习例子:

  • 猜数字游戏
    package main

import (
	"bufio"
	"fmt"
	"math/rand"
	"os"
	"strconv"
	"strings"
	"time"
)

func main() {
	maxNum := 100
	rand.Seed(time.Now().UnixNano())
	secretNumber := rand.Intn(maxNum)
	fmt.Println("Please input your guess")
	reader := bufio.NewReader(os.Stdin)
	for{
		input, err := reader.ReadString('\n')
		if err != nil {
			fmt.Println("An error occurred while reading input. Please try again",err)
			continue
		}
		input = strings.Trim(input,"\r\n")

		guess,err := strconv.Atoi(input)

		if err != nil {
			fmt.Println("Invalid input. Please enter a integer value")
			continue
		}

		fmt.Println("Your guess is",guess)

		if guess > secretNumber {
			fmt.Println("Your guess is bigger than the secret number. Please try again")
		}else if guess < secretNumber {
			fmt.Println("Your guess is smaller than the secret number. Please try again")
		} else {
			fmt.Println("Correct, you Legend!")
			break
		}
	}
}

四、课后个人总结:

  • 本章有什么知识点不容易掌握?
    • 进程信息