上一期学习进度
demo1() // 九九乘法表,基本输出
demo2() // 简单计算器,键盘输入和基本输出
demo3() // 递归法阶乘,主要观察形参和返回值
demo4() // 字符串操作,字符串相关操作
demo5() // 自定义类型(结构体)map键值对的使用
demo6() // 指针简单实例,指针的操作
demo7() // 变量交换,形参的传递,地址相关
详细参见文章:
Go学习 Day-01引言 最近刷抖音听说Go语言是不推荐小白学习的,自认为能力还算可以,想要挑战一下,大概的了解了一下基本语法,感觉和C差不多,又和Python有点…2022 年 12 月 03 日
今天的大纲
demo1() // 读文件
demo2() // 写文件
demo3() // 数组操作
demo4() // 基本运算符
demo5() // 循环结构,goto语句
demo6() // 可变长度数组--切片
代码
package main
import (
"bufio"
"fmt"
"log"
"os"
"time"
)
func demo1Func1() {
// 全部都加载到内存
data, err := os.ReadFile("golang/day02/day02.go")
if err != nil {
log.Fatal(err)
}
os.Stdout.Write(data)
}
func demo1Func2() {
// 逐行读文本
file, err := os.Open("golang/day02/day02.go")
if err != nil {
log.Fatal(err)
}
scanner := bufio.NewScanner(file)
for scanner.Scan() {
fmt.Println(scanner.Text())
}
}
func demo1() {
demo1Func1() // 全部都加载到内存
demo1Func2() // 逐行读文本
}
func demo2Fun1() {
text := "1234567890abcdefgABCDEFG\n你好,世界"
//OpenFile(path, type, permissions) 也就是读、写、只读那些,权限就是421的那个ReadWriteX(execute)
open, err := os.OpenFile("golang/day02/day02.txt", os.O_CREATE|os.O_APPEND|os.O_RDWR, 0666)
if err != nil {
log.Fatal(err)
}
_, err = open.Write([]byte(text))
if err != nil {
return
}
}
func demo2Fun2() {
text := "你好,世界\n1234567890abcdefgABCDEFG"
file, err := os.OpenFile("golang/day02/day02_1.txt", os.O_CREATE|os.O_APPEND|os.O_RDWR, 0666)
if err != nil {
log.Fatal(err)
}
w := bufio.NewWriter(file)
w.WriteString(text)
w.Flush()
}
func demo2() {
start_f1 := time.Now()
demo2Fun1() // 直接写文件
start_f2 := time.Now()
demo2Fun2() // 通过bufio模块写文件
start_f3 := time.Now()
fmt.Println("文件写入效率对比:\n" +
"\t方法1:" + start_f2.Sub(start_f1).String() + "\n" +
"\t方法2:" + start_f3.Sub(start_f2).String())
/*
文件写入效率对比:
方法1:1.0488ms
方法2:505.3µs
*/
}
func demo3() {
var array [9][9]int // 9 是数组的长度,这么说,这样定义也就是二维数组
for i := 0; i < 9; i++ {
for j := 0; j < 9; j++ {
array[i][j] = (i + 1) * (j + 1)
}
}
for i := 0; i < 9; i++ {
fmt.Println(array[i])
}
var array2 = [9]int{1, 4, 7}
fmt.Println(array2) // 没有初始化的默认值为0
var array3 = [...]int{1, 2, 3, 4}
//array3[4] = 4 // [...]是让编译器自己往里面写数,实际上长度为4,从0开始,第四个也就越界了。
fmt.Println(array3)
const size = 8 // 常量定义
var arr [size]int
arr[0] = 1
arr[1] = 1
for i := 2; i < size; i++ {
arr[i] = arr[i-2] + arr[i-1]
}
fmt.Println(arr)
}
func demo4() {
fmt.Println("1+1=", 1+1)
fmt.Println("1-1=", 1-1)
fmt.Println("2*3=", 2*3)
fmt.Println("4/2=", 4/2)
fmt.Println("4/3=", 4/3)
fmt.Printf("4/3.0==%.2f\n", 4/3.0) // 保留两位小数
fmt.Printf("4%%3==%d\n", 4%3) // 保留两位小数
a := 1
a++
fmt.Println("a>1?", a > 1)
fmt.Println("2<<3", 2<<3) // 2 * 2^3
fmt.Println("8>>2", 8>>2) // 8 / 2^2
//--a // 不支持先行运算
}
func demo5() {
for i := 0; i < 9; i++ {
if i == 5 {
break
}
fmt.Println(i)
}
flag := 0
label:
{
flag++
println("goto label")
}
for i := 0; i < 9; i++ {
fmt.Println(">>", flag, i)
if i == 5 && flag < 5 {
goto label
}
}
// for 和 while 使用了同一个关键字哈
for true {
// 死循环
second := time.Now().Second()
if second%2 == 0 {
fmt.Println("当前秒数为奇数,跳出循环")
break
} else {
fmt.Println("当前秒数为偶数,死循环")
}
}
}
func demo6() {
var s = make([]int, 0)
s = append(s, 2)
s = append(s, 4)
s = append(s, 6)
s = append(s, 8)
s = append(s, 10)
fmt.Println(s)
fmt.Println(s[2])
var st = make([]int, 0)
st = append(s[:2], s[3:]...) // 删除元素就有点麻烦了,不知道有没有工具类,直接操作的
fmt.Println(st)
}
func main() {
demo1() // 读文件
demo2() // 写文件
demo3() // 数组操作
demo4() // 基本运算符
demo5() // 循环结构,goto语句
demo6() // 可变长度数组--切片
}
疑问&解答
nil
记录
nil
评论 0
还没有评论,来说点什么吧。