Go 语言基础(三) | 青训营笔记

88 阅读3分钟

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

基础语法 - 时间

引用时间包"time"

  • 输出现在时间 time.Now()
  • 设置一个时间变量
t := time.Data(2022,3,27,1,25,36,0,time.UTC)
t2 := time.Date(2023, 3, 27, 2, 30, 40, 0, time.UTC)
  • 输出时间变量中的值
fmt.Println(t.Year(), t.Month(), t.Day(), t.Hour(), t.Minute(), t.Second())
  • 时间变量相减 diff := t2.Sub(t)
  • 按照格式规范设置一个时间变量
t3, err := time.Parse("2006-01-02 15:04:05", "2022-03-27 01:25:36") //格式,时间
  • 输出当前时间戳 fmt.Println(now.Unix())

基础语法 - 数字解析

  • 字符串转化为浮点数 f, _ := strconv.ParseFloat("1.234", 64)

  • 字符串转化为整型int64

    写法一:n, _ := strconv.ParseInt("111", 10, 64) //第二个是进制,第三个是int64

    写法二:n2, _ := strconv.Atoi("123")

  • 整型转字符串

num := 123
s_num := strconv.Itoa(num)

基础语法 - 进程信息

导入包 os,os/exec

  • 程序获取运行他时给出的参数,还包括了程序路径本身 fmt.Println(os.Args)
  • Getenv 检索由键命名的环境变量的值。它返回值,如果变量不存在,该值将为空fmt.Println(os.Getenv("PATH"))
  • os.Setenv 方法是用来设置系统环境变量,一般是 key 和 value 成对出现 fmt.Println(os.Setenv("AA", "BB"))

command是命令模式 使用command时,可以根据具体需要(是否需要返回输出内容、是否需要等待等)选择不同的方式

buf, err := exec.Command("grep", "127.0.0.1", "/etc/hosts").CombinedOutput()
if err != nil {
    panic(err)
}
fmt.Println(string(buf))

调用包技巧

假设在 test1/main.go 中有结构体 Product ,test2/main.go 要调用这个结构体,需要在 test1/main.go 中写 package Gorm,不能写package main,一旦有一个东西被调用,这个文件都只能被调用了,不能主动执行main。test2/main.go 中写package main。

实战小项目

猜谜游戏 - 实现游戏循环

rand.Seed(time.Now().UnixNano()) 设置随机数种子

reader := bufio.NewReader(os.Stdin) 设置读取变量

input, err := reader.ReadString('\n') 读到\n结束

input = strings.Trim(input, "\r\n") 把input前后有\r\n全部去掉

先随机一个数,用死循环读入输入的字符

如果小于随机出来的数,输出 fmt.Println("Your guess is smaller than the secret number")

如果大于随机出来的数,输出 fmt.Println("Your guess is bigger than the secret number")

如果恰好等于随机出来的数,输出 fmt.Println("Correct, you Legend!"),结束

代码:

package main

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

func main() {
	maxNum := 100
	rand.Seed(time.Now().UnixNano()) //设置随机数种子
	secretNum := rand.Intn(maxNum)

	fmt.Println("Please input your guess")
	reader := bufio.NewReader(os.Stdin)
	for {
		input, err := reader.ReadString('\n') //读到\n结束
		if err != nil {
			fmt.Println("An error occured while reading input. Please try again", err)
			continue
		}
		input = strings.Trim(input, "\r\n") // 把input前后有\r\n全部去掉

		guess, err := strconv.Atoi(input)
		if err != nil {
			fmt.Println("Invalid input. Please enter an interger value")
			continue
		}
		fmt.Println("Your guess is ", guess)

		if guess > secretNum {
			fmt.Println("Your guess is bigger than the secret number")
		} else if guess < secretNum {
			fmt.Println("Your guess is smaller than the secret number")
		} else {
			fmt.Println("Correct, you Legend!")
			break
		}
	}
}
/*
Please input your guess
50
Your guess is  50
Your guess is smaller than the secret number
80
Your guess is  80
Your guess is bigger than the secret number
75
Your guess is  75
Your guess is smaller than the secret number
78
Your guess is  78
Your guess is smaller than the secret number
79
Your guess is  79
Correct, you Legend!
*/