第一讲:Go语言开发入门:环境搭建与基础语法

news2024/10/8 12:18:36

文章目录

    • 环境搭建
      • windows环境搭建
      • Mac环境搭建
        • 安装GO
          • 使用 Homebrew 安装 Go
          • 手动下载安装 Go
        • 配置环境变量
          • 配置环境变量
          • 检查 Go 是否正确安装
        • 验证安装:编写第一个 Go 程序
          • 创建 Go 工作区
          • 编写 Hello World 程序
          • 运行程序
          • 编译程序
        • 常用的 Go 命令
    • Go语言基础语法
      • 1. 变量(Variables)
      • 2. 常量(Constants)
      • 3. 计算符号(Operators)
      • 4. 字符串(Strings)
      • 5. 条件表达式(Condition Expressions)
      • 6. 分支表达式(Switch Statements)
      • 7. 循环(Loops)
      • 8. 数组(Arrays)
      • 9. 切片(Slices)
      • 10. Map(字典)
      • 11. 简单函数(Functions)
    • 两个小练习
      • 练习 1:计算多个人的平均体脂
      • 练习 2:判断两条线是否平行

环境搭建

windows环境搭建

参考之前博客:Go语言入门:从零开始的快速指南

Mac环境搭建

安装GO
使用 Homebrew 安装 Go

Homebrew 是 macOS 上常用的包管理工具,使用 Homebrew 安装 Go 非常简单。

  1. 打开终端(Terminal)。

  2. 确保你已经安装了 Homebrew。如果没有安装,可以使用以下命令进行安装:

    /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
    
  3. 使用 Homebrew 安装 Go:

    brew install go
    

    安装完成后,Go 的执行文件和相关工具将会被安装到 /usr/local/bin/ 中,默认版本是最新稳定版。

手动下载安装 Go

如果你不使用 Homebrew,也可以手动从官网下载安装:

  1. 访问 Go 官方下载页面。
  2. 下载适用于 macOS 的安装包(通常是 .pkg 文件)。
  3. 下载完成后,双击安装包并按照提示进行安装。

安装成功后,Go 会被安装到 /usr/local/go 目录。

配置环境变量

Go 的安装目录 /usr/local/go 包含了 Go 的所有工具和命令行工具。为了让系统知道 Go 的位置,我们需要配置 Go 的 GOPATHGOROOT 环境变量。

配置环境变量
  1. 打开终端,编辑你的 ~/.zshrc 文件(macOS 默认使用 Zsh,或者你使用的是 Bash 则编辑 ~/.bash_profile):

    nano ~/.zshrc
    
  2. 在文件末尾添加以下内容:

    # Go 环境变量配置
    export GOPATH=$HOME/go
    export PATH=$PATH:/usr/local/go/bin:$GOPATH/bin
    
    • GOPATH:这是 Go 的工作区目录,存储你的 Go 项目和依赖。默认建议使用 ~/go 目录。
    • PATH:将 Go 的二进制文件添加到 PATH 中,确保你可以在任何地方使用 Go 的命令。
  3. 保存文件并退出(按 Ctrl + O 保存,按 Ctrl + X 退出)。

  4. 运行以下命令使配置立即生效:

    source ~/.zshrc
    
检查 Go 是否正确安装

在终端输入以下命令来检查 Go 是否成功安装:

go version

如果安装成功,你会看到类似以下的输出:

go version go1.23.1 darwin/arm64
验证安装:编写第一个 Go 程序

接下来,我们编写一个简单的 Go 程序来验证安装是否成功。

创建 Go 工作区

首先,在 GOPATH 中创建一个 Go 项目的工作目录:

mkdir -p ~/go/src/hello
cd ~/go/src/hello
编写 Hello World 程序

在该目录下创建一个名为 main.go 的文件,并写入以下内容:

package main

import "fmt"

func main() {
    fmt.Println("Hello, Go!")
}
运行程序

在终端中运行以下命令来编译并执行这个 Go 程序:

go run main.go

你应该会看到以下输出:

Hello, Go!
编译程序

如果你希望将程序编译成可执行文件,可以使用 go build 命令:

go build

编译完成后,你会在当前目录下看到一个名为 hello(或者 hello.exe,如果你在 Windows 上运行)的可执行文件。你可以直接运行它:

./hello

你将再次看到 Hello, Go! 的输出。

常用的 Go 命令

以下是一些常用的 Go 命令,可以帮助你在开发中快速上手:

  • go run:直接运行 Go 源代码文件。
  • go build:编译源代码,生成可执行文件。
  • go install:编译并安装包和依赖。
  • go fmt:格式化 Go 源代码文件。
  • go test:运行单元测试。
  • go get:下载和安装远程包。
  • go doc:查看 Go 包的文档。

Go语言基础语法

1. 变量(Variables)

在 Go 中,变量通过 var 关键字声明。

package main

import "fmt"

func main() {
    // 声明一个整型变量
    var a int = 10

    // 声明一个字符串变量
    var str string = "Hello, Go!"

    // 使用类型推断(编译器会自动推断类型)
    var b = 20

    // 简短声明(只能在函数内使用)
    c := 30

    fmt.Println(a, str, b, c)
}

变量相关知识:

  • 使用 var 关键字可以声明变量。
  • 通过 := 进行简短声明,不需要 var 关键字,只能在函数内部使用。
  • Go 是静态类型语言,变量类型在编译时就确定,不能改变。

2. 常量(Constants)

常量通过 const 关键字声明,常量的值在编译时就确定,不能被修改。

package main

import "fmt"

func main() {
    const pi = 3.14159
    const str = "Hello, Go!"
    fmt.Println(pi, str)
}

常量相关知识:

  • 常量的值必须是编译时确定的,不能运行时赋值。
  • 常量可以是数值、字符串、布尔值等。

3. 计算符号(Operators)

Go 支持常见的算术运算符、关系运算符和逻辑运算符:

package main

import "fmt"

func main() {
    a, b := 10, 20

    // 算术运算符
    fmt.Println("加法: ", a+b)
    fmt.Println("减法: ", a-b)
    fmt.Println("乘法: ", a*b)
    fmt.Println("除法: ", a/b)
    fmt.Println("取模: ", a%b)

    // 关系运算符
    fmt.Println("相等: ", a == b)
    fmt.Println("不等: ", a != b)
    fmt.Println("大于: ", a > b)
    fmt.Println("小于: ", a < b)

    // 逻辑运算符
    fmt.Println("逻辑与: ", a > 5 && b > 15)
    fmt.Println("逻辑或: ", a > 15 || b > 15)
    fmt.Println("逻辑非: ", !(a > 15))
}

4. 字符串(Strings)

字符串是不可变的 Unicode 字符序列,可以通过 " 包含字符串,或者通过反引号 包含多行字符串。

package main

import "fmt"

func main() {
    var str1 string = "Hello"
    str2 := "World"

    // 多行字符串
    str3 := `这是
    多行
    字符串`
    
    // 字符串拼接
    combined := str1 + ", " + str2

    fmt.Println(combined)
    fmt.Println(str3)
}

字符串相关知识:

  • 使用 + 可以拼接字符串。
  • 使用反引号可以定义多行字符串。

5. 条件表达式(Condition Expressions)

Go 中的条件表达式使用 ifelse,条件表达式不需要用括号包裹。

package main

import "fmt"

func main() {
    a := 10

    if a > 5 {
        fmt.Println("a 大于 5")
    } else {
        fmt.Println("a 小于或等于 5")
    }

    // 带初始化的 if 语句
    if b := a * 2; b > 15 {
        fmt.Println("b 大于 15")
    } else {
        fmt.Println("b 小于或等于 15")
    }
}

6. 分支表达式(Switch Statements)

switch 语句是 Go 中多分支选择的常用方法。

package main

import "fmt"

func main() {
    a := 2

    switch a {
    case 1:
        fmt.Println("a 等于 1")
    case 2:
        fmt.Println("a 等于 2")
    default:
        fmt.Println("a 不等于 1 或 2")
    }
}

switch 的特点:

  • switch 不需要像其他语言中那样使用 break,每个 case 执行完毕后会自动结束。
  • 可以在 case 中进行条件匹配。

7. 循环(Loops)

Go 只有一种循环结构 for,没有 whiledo-while

package main

import "fmt"

func main() {
    // 基本的 for 循环
    for i := 0; i < 5; i++ {
        fmt.Println(i)
    }

    // 类似 while 的 for 循环
    i := 0
    for i < 5 {
        fmt.Println(i)
        i++
    }

    // 无限循环
    // for {
    //     fmt.Println("无限循环")
    // }
}

8. 数组(Arrays)

数组是具有固定长度的同类型元素序列。

package main

import "fmt"

func main() {
    var arr [5]int // 定义一个长度为5的数组
    arr[0] = 1
    arr[1] = 2

    // 初始化时直接赋值
    arr2 := [3]int{1, 2, 3}

    fmt.Println(arr)
    fmt.Println(arr2)
}

数组相关知识:

  • 数组的长度是固定的,一旦声明,长度就不能改变。

9. 切片(Slices)

切片是基于数组的动态大小的序列,比数组更加灵活。

package main

import "fmt"

func main() {
    // 声明并初始化切片
    var slice []int = []int{1, 2, 3}

    // 使用 append 添加元素
    slice = append(slice, 4)

    // 通过切片创建切片
    newSlice := slice[1:3]

    fmt.Println(slice)
    fmt.Println(newSlice)
}

切片相关知识:

  • 切片是一种引用类型,指向底层数组。
  • 使用 append 函数可以动态地向切片添加元素。

10. Map(字典)

Map 是键值对的集合,可以通过键快速查找对应的值。

package main

import "fmt"

func main() {
    // 创建一个 map
    var myMap map[string]int = map[string]int{
        "Alice": 25,
        "Bob":   30,
    }

    // 添加元素
    myMap["Charlie"] = 35

    // 查找元素
    age := myMap["Alice"]

    // 判断键是否存在
    age, exists := myMap["David"]
    if exists {
        fmt.Println("David 的年龄是", age)
    } else {
        fmt.Println("David 不存在")
    }

    fmt.Println(myMap)
}

11. 简单函数(Functions)

Go 中的函数通过 func 关键字定义,可以返回多个值。

package main

import "fmt"

// 定义一个返回两个整数相加的函数
func add(a int, b int) int {
    return a + b
}

// 定义一个返回多个值的函数
func swap(a, b int) (int, int) {
    return b, a
}

func main() {
    result := add(3, 4)
    fmt.Println("3 + 4 =", result)

    x, y := swap(10, 20)
    fmt.Println("交换后:", x, y)
}

函数相关知识:

  • 函数可以有多个返回值。
  • 参数类型相同的参数可以合并写在一起,如 (a, b int)
  • 返回值类型写在函数名和参数列表之后。

两个小练习

练习 1:计算多个人的平均体脂

  • 实现完整的体脂计算器
  • 连续输入三人的姓名、性别、身高、体重、年龄信息
  • 计算每个人的 BMI、体脂率

输出:

  • 每个人姓名、BMI、体脂率、建议
  • 总人数、平均体脂率

运用到的知识:

  1. 变量和常量
    • 声明和使用变量来存储用户输入的身高、体重、年龄等信息。
    • 使用 := 进行简短声明,比如 a := 10
  2. 输入和输出
    • 使用 fmt.Scanln 来获取用户输入,并使用 fmt.Println 输出结果。
  3. 条件表达式
    • 使用 if 语句来判断体脂率的不同范围,并给出不同的健康建议。
  4. 循环
    • 使用 for 循环来处理多个人的输入和体脂计算。
  5. 函数
    • 编写了多个函数,如 calculateBMIcalculateBodyFatRategiveSuggestion,这些函数帮助简化代码结构并实现代码复用。
  6. 数组和切片
    • 使用了数组来存储每个人的信息,如身高、体重、年龄等。
    • 切片可以方便地处理可变大小的数据集合。
package main

import (
	"fmt"
)

func main() {
	// 定义数组来存储姓名、性别、身高、体重、年龄、BMI 和体脂率
	var names [3]string
	var genders [3]string
	var heights [3]float64
	var weights [3]float64
	var ages [3]int
	var BMIs [3]float64
	var bodyFatRates [3]float64

	// 输入三个人的信息
	for i := 0; i < 3; i++ {
		fmt.Printf("请输入第 %d 个人的信息:\n", i+1)
		fmt.Print("姓名: ")
		fmt.Scan(&names[i])
		fmt.Print("性别 (male/female): ")
		fmt.Scan(&genders[i])
		fmt.Print("身高 (米): ")
		fmt.Scan(&heights[i])
		fmt.Print("体重 (公斤): ")
		fmt.Scan(&weights[i])
		fmt.Print("年龄: ")
		fmt.Scan(&ages[i])

		// 计算 BMI
		BMIs[i] = calculateBMI(heights[i], weights[i])

		// 计算体脂率
		bodyFatRates[i] = calculateBodyFatRate(genders[i], BMIs[i], ages[i])
	}

	// 输出每个人的BMI、体脂率和建议
	for i := 0; i < 3; i++ {
		fmt.Printf("\n姓名: %s\n", names[i])
		fmt.Printf("BMI: %.2f\n", BMIs[i])
		fmt.Printf("体脂率: %.2f%%\n", bodyFatRates[i])
		fmt.Println(giveSuggestion(bodyFatRates[i], genders[i]))
	}

	// 计算并输出平均体脂率
	calculateAndPrintAverageBodyFatRate(bodyFatRates[:])
}

// 计算 BMI
func calculateBMI(height, weight float64) float64 {
	return weight / (height * height)
}

// 计算体脂率
func calculateBodyFatRate(gender string, BMI float64, age int) float64 {
	if gender == "male" {
		return (1.20 * BMI) + (0.23 * float64(age)) - 16.2
	}
	return (1.20 * BMI) + (0.23 * float64(age)) - 5.4
}

// 根据体脂率给出建议
func giveSuggestion(bodyFatRate float64, gender string) string {
	var suggestion string
	if gender == "male" {
		switch {
		case bodyFatRate < 10:
			suggestion = "建议:过瘦,适当增加体重。"
		case bodyFatRate >= 10 && bodyFatRate < 20:
			suggestion = "建议:体脂正常,保持良好状态。"
		case bodyFatRate >= 20 && bodyFatRate < 25:
			suggestion = "建议:体脂偏高,适当控制体重。"
		default:
			suggestion = "建议:肥胖,建议制定减脂计划。"
		}
	} else {
		switch {
		case bodyFatRate < 20:
			suggestion = "建议:过瘦,适当增加体重。"
		case bodyFatRate >= 20 && bodyFatRate < 30:
			suggestion = "建议:体脂正常,保持良好状态。"
		case bodyFatRate >= 30 && bodyFatRate < 35:
			suggestion = "建议:体脂偏高,适当控制体重。"
		default:
			suggestion = "建议:肥胖,建议制定减脂计划。"
		}
	}
	return suggestion
}

// 计算并输出平均体脂率
func calculateAndPrintAverageBodyFatRate(bodyFatRates []float64) {
	totalBodyFat := 0.0
	for _, bodyFatRate := range bodyFatRates {
		totalBodyFat += bodyFatRate
	}
	averageBodyFatRate := totalBodyFat / float64(len(bodyFatRates))
	fmt.Printf("\n总人数: %d\n", len(bodyFatRates))
	fmt.Printf("平均体脂率: %.2f%%\n", averageBodyFatRate)
}

说明:

  1. 数组存储

    • 使用 namesgendersheightsweightsagesBMIsbodyFatRates 这几个数组分别存储每个人的信息。
    • 每个数组的长度为3,适用于存储三个人的数据。
  2. 函数封装

    • calculateBMI:根据身高和体重计算 BMI。
    • calculateBodyFatRate:根据性别、BMI 和年龄计算体脂率。
    • giveSuggestion:根据体脂率给出建议。
    • calculateAndPrintAverageBodyFatRate:计算并输出平均体脂率。
  3. 示例输入/输出

请输入第 1 个人的信息:
姓名: 张三
性别 (male/female): male
身高 (米): 1.75
体重 (公斤): 70
年龄: 30

请输入第 2 个人的信息:
姓名: 李四
性别 (male/female): female
身高 (米): 1.65
体重 (公斤): 68
年龄: 28

请输入第 3 个人的信息:
姓名: 王五
性别 (male/female): male
身高 (米): 1.80
体重 (公斤): 85
年龄: 35

姓名: 张三
BMI: 22.86
体脂率: 19.55%
建议:体脂正常,保持良好状态。

姓名: 李四
BMI: 24.98
体脂率: 31.27%
建议:肥胖,建议制定减脂计划。

姓名: 王五
BMI: 26.23
体脂率: 24.80%
建议:体脂偏高,适当控制体重。

总人数: 3
平均体脂率: 25.87%

练习 2:判断两条线是否平行

编写一个程序来判断两条直线是否平行。你需要通过两点计算每条线的斜率,并比较两条线的斜率是否相等,来确定它们是否平行。

运用到的知识:

  1. 变量

    • 使用 var:= 声明变量,存储用户输入的点坐标。
  2. 输入和输出

    • 使用 fmt.Scanln 获取用户输入,并用 fmt.Println 输出结果。
  3. 条件表达式

    • 使用 if 语句来判断两条线是否垂直(即 x 坐标相同),如果两条线都垂直,它们就是平行的。
  4. 函数

    • 使用了函数 calculateSlope 来计算斜率,areLinesParallel 来判断两条线是否平行,这些函数让代码结构更加清晰。

通过比较两条线的斜率来判断它们是否平行。两点决定一条直线,斜率的公式为: 斜率 = y 2 − y 1 x 2 − x 1 \text{斜率} = \frac{y_2 - y_1}{x_2 - x_1} 斜率=x2x1y2y1。如果两条线的斜率相同,那么它们就是平行的。需要注意的是,当两点的 x 1 = = x 2 x_1 == x_2 x1==x2 时,斜率不存在(垂直线)。

package main

import (
	"fmt"
)

// 计算两点间的斜率
func calculateSlope(x1, y1, x2, y2 float64) (float64, bool) {
	// 如果两点的x坐标相同,斜率不存在,返回false表示斜率不存在(垂直线)
	if x1 == x2 {
		return 0, false
	}
	// 计算斜率
	slope := (y2 - y1) / (x2 - x1)
	return slope, true
}

// 判断两条直线是否平行
func areLinesParallel(x1, y1, x2, y2, x3, y3, x4, y4 float64) bool {
	// 计算两条线的斜率
	slope1, exists1 := calculateSlope(x1, y1, x2, y2)
	slope2, exists2 := calculateSlope(x3, y3, x4, y4)

	// 如果一条线是垂直线,而另一条不是,则不平行
	if !exists1 && !exists2 {
		return true // 两条线都垂直,平行
	} else if !exists1 || !exists2 {
		return false // 一条垂直,另一条不垂直,不平行
	}

	// 如果斜率相等,说明平行
	return slope1 == slope2
}

func main() {
	var x1, y1, x2, y2 float64
	var x3, y3, x4, y4 float64

	// 输入第一条线的两点坐标
	fmt.Println("请输入第一条直线的两个点坐标:")
	fmt.Print("点1 (x1, y1): ")
	fmt.Scan(&x1, &y1)
	fmt.Print("点2 (x2, y2): ")
	fmt.Scan(&x2, &y2)

	// 输入第二条线的两点坐标
	fmt.Println("请输入第二条直线的两个点坐标:")
	fmt.Print("点3 (x3, y3): ")
	fmt.Scan(&x3, &y3)
	fmt.Print("点4 (x4, y4): ")
	fmt.Scan(&x4, &y4)

	// 判断两条线是否平行
	if areLinesParallel(x1, y1, x2, y2, x3, y3, x4, y4) {
		fmt.Println("这两条线是平行的")
	} else {
		fmt.Println("这两条线不平行")
	}
}

说明:

  1. calculateSlope :计算给定两点间的斜率,如果两点的 x 坐标相同,返回 false 表示垂直线。
  2. areLinesParallel :比较两条线的斜率,判断它们是否平行。如果斜率相等,则平行;如果一条线垂直而另一条线不垂直,则不平行。

示例输入/输出:

请输入第一条直线的两个点坐标:
点1 (x1, y1): 1 1
点2 (x2, y2): 3 3
请输入第二条直线的两个点坐标:
点3 (x3, y3): 2 2
点4 (x4, y4): 4 4
这两条线是平行的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2196332.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一款开源Ai语音合成TTS工具:Fish Speech

在人工智能和语音技术日新月异的今天&#xff0c;Fish Speech项目以其卓越的性能和广泛的应用前景&#xff0c;成为了开源语音合成领域的一颗璀璨新星。 该项目由Fish Audio团队倾力打造&#xff0c;旨在为研究者、开发者和普通用户提供一个高质量、易用且功能强大的语音合成解…

Docker13-图形工具Portainer

零、文章目录 Docker13-图形工具Portainer 1、图形化管理工具 Docker 的图形化管理工具可以帮助用户更直观地管理 Docker 容器、镜像、网络和数据卷等。 选择哪个工具取决于您的具体需求&#xff0c;比如是否需要支持远程管理、是否需要集成 Kubernetes、是否偏好桌面应用或…

JVS·智能BI数据可视化图表:普通列表与分组列表配置全解析

使用场景 在可视化配置中&#xff0c;很多场景中需要图形和详细信息的融合展示&#xff0c;那么在图表中可以新增普通列表与分组列表的配置。如下图所示&#xff1a; 配置说明 1、新增组件&#xff1a;配置入口如下图所示&#xff0c;新增组件时&#xff0c;选择普通列表与分…

电脑屏幕录屏怎么弄?4个方法教会你录制

电脑屏幕录屏怎么弄&#xff1f;电脑屏幕录屏是一项非常实用的技能&#xff0c;它在学习、工作和娱乐中扮演着不可或缺的角色。通过录屏&#xff0c;我们可以轻松记录并分享操作步骤、会议内容、游戏过程等&#xff0c;极大地丰富了我们的表达和沟通方式。同时&#xff0c;录屏…

mysql 慢查询日志、设置单条数据最大 packet 插入大小指令

检查是否开启慢查询日志 show variables like "%slow%";slow_query_log为 ON 表示已经开启慢查询日志记录。 slow_query_log_file&#xff1a;慢查询日志文件存放地址 设置慢查询 sql 记录阈值 大于 1s 的 sql 都会被记录到日志文件里面。系统默认 10s。mysql 重…

3、Redis Stack扩展功能

文章目录 一、了解Redis产品二、申请RedisCloud实例三、Redis Stack体验1、RedisStack有哪些扩展&#xff1f;2、Redis JSON1、Redis JSON是什么2、Redis JSON有什么用3、Redis JSON的优势 3、Search And Query1、传统Scan搜索2、Search And Query搜索 4、Bloom Filter1、布隆过…

【Python_PySide6学习笔记(三十八)】基于QPushButton实现自定义的圆形按键指示灯类tQCircularButton

基于QPushButton实现自定义的圆形按键指示灯类tQCircularButton 基于QPushButton实现自定义的圆形按键指示灯类tQCircularButton前言正文1、Qt样式表1.1 Qt样式表1.2 样式属性 2、设置Qt样式表3、tQCircularButton类4、使用示例 基于QPushButton实现自定义的圆形按键指示灯类tQ…

系统规划与管理——1信息系统综合知识(3)

文章目录 1.3 信息系统1.3.1 信息系统定义1.3.2 信息系统的生命周期1.3.3 信息系统常用的开发方法 1.3 信息系统 1.3.1 信息系统定义 信息系统是一种以处理信息为目的的专门的系统类型。信息系统可以是手工的&#xff0c;也可以是计算机化的。计算机化的信息系统的组成部件包…

【JVM调优】JVM高频参数和最优实践

JVM高频参数 一、常用参数配置1. 堆内存设置方式1&#xff08;Java8及之前&#xff09;方式2&#xff08;Java9及之后&#xff09; 2. 新生代和老年代设置3. 垃圾收集器选择4. 调试和日志5. Metaspace设置6. 其他重要参数 二、参数设置最佳实践三、GC日志参数设置日志解析Minor…

构建宠物咖啡馆:SpringBoot框架的实现策略

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理基于Spring Boot的宠物咖啡馆平台的设计与…

Vue入门-使用Vue2完成简单的记事本Demo

需求&#xff1a; ①能够实现记录重复数据 ②全部清空 ③单条记录清空 页面效果&#xff1a; 代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content&quo…

2024年开放式蓝牙耳机品牌排行榜前十名,五个超实用开放式耳机品牌分享

​开放式耳机目前非常流行&#xff0c;它们以时尚、美观和舒适著称&#xff0c;迅速赢得了众多用户的喜爱&#xff0c;成为了耳机市场的新宠。与传统的入耳式耳机相比&#xff0c;开放式耳机佩戴更稳固&#xff0c;对耳朵也更为温和。尽管有些人认为它们价格不菲&#xff0c;甚…

【生命之光再启航】开颅术后苏醒之谜:揭秘康复之旅的时间窗

在医学的浩瀚星空中&#xff0c;开颅手术无疑是一颗璀璨而又充满挑战的星辰。它以其高风险、高技术含量&#xff0c;成为治疗颅脑疾病不可或缺的重要手段。然而&#xff0c;对于患者及家属而言&#xff0c;手术虽已完成&#xff0c;但“做完开颅手术多久能醒&#xff1f;”这一…

Ollama本地部署自定义大模型

Ollama本地部署自定义大模型 1. Ollama安装2. 模型选择3. Ollama使用3.1 创建模型3.2 运行模型-命令行3.3 运行模型-接口 4. 其他有用命令参考链接 Ollama是一个专为本地机器设计的开源框架&#xff0c;旨在简化大型语言模型&#xff08;LLM&#xff09;的部署和运行过程。它提…

AWS EC2 部署Echarts大屏展示项目

前言 Echarts简介 ECharts是一个由JavaScript开发的开源可视化库。它能使数据生动、直观、互动、高度个性化数据可视化图表。ECharts适用大部分浏览器&#xff0c;如IE6 、Chrome、Firefox、Safari等&#xff0c;同时支持PC和移动设备。 开源&#xff1a;ECharts是一个开源项目…

大模型RAG:文档分块方案与RAG全流程

一 RAG与文本分块 1.1 为什么要文档分块 我们知道&#xff0c;大模型在预训练阶段获取的知识是有限的&#xff0c;一般需要数据增强模块引入外部知识库&#xff0c;通过知识检索的方式搜索于用户提问相关的知识&#xff0c;这也是RAG相关应用架构出现的原因。但这又引申出另一…

一个简单的将产品图册转换为翻页电子产品图册的方法

​在数字化浪潮席卷全球的今天&#xff0c;企业纷纷寻求转型&#xff0c;纸质产品图册逐渐被翻页电子图册所替代。电子图册不仅具有环保、便捷、易于更新等优势&#xff0c;还能为企业节省大量印刷和物流成本。那么&#xff0c;如何将现有的实体产品图册转化为翻页电子图册呢 1…

YOLO11改进|注意力机制篇|引入反向残差移动快iRMB

目录 一、【iRMB】注意力机制1.1【iRMB】注意力介绍1.2【iRMB】核心代码 二、添加【iRMB】注意力机制2.1STEP12.2STEP22.3STEP32.4STEP4 三、yaml文件与运行3.1yaml文件3.2运行成功截图 一、【iRMB】注意力机制 1.1【iRMB】注意力介绍 反向残差移动快iRMB结构如下所示&#xf…

「Ubuntu」根目录存储空间不足

Linux系统不同于 Windows系统&#xff0c;复杂的文件系统常常让人头疼&#xff0c;特别是动不动就存储空间不足&#xff0c;简单的清空回收站根本不管用&#xff0c;在此推荐一个绝对好用的方法&#xff0c;并且还可以多学习一条 Linux命令 1、du 使用方法 通过使用命令 du&am…