Go运算操作符全解与实战:编写更高效的代码!

目录

  • 简介
    • file
  • 基础数学运算操作符
    • 加法操作符 `+`
      • 语法
      • 示例
      • 类型描述
    • 减法操作符 `-`
      • 语法
      • 示例
      • 类型描述
    • 乘法操作符 `*`
      • 语法
      • 示例
      • 类型描述
    • 除法操作符 `/`
      • 语法
      • 示例
      • 类型描述
    • 取模操作符 `%`
      • 语法
      • 示例
      • 类型描述
  • 位运算操作符
    • 按位与操作符 `&`
      • 语法
      • 示例
      • 类型描述
    • 按位或操作符 `|`
      • 语法
      • 示例
      • 类型描述
    • 按位异或操作符 `^`
      • 语法
      • 示例
      • 类型描述
    • 按位取反操作符 `^`
      • 语法
      • 示例
      • 类型描述
    • 左移操作符 `<<`
      • 语法
      • 示例
      • 类型描述
    • 右移操作符 `>>`
      • 语法
      • 示例
      • 类型描述
  • 逻辑运算操作符
    • 逻辑与操作符 `&&`
      • 语法
      • 示例
      • 类型描述
    • 逻辑或操作符 `||`
      • 语法
      • 示例
      • 类型描述
    • 逻辑非操作符 `!`
      • 语法
      • 示例
      • 类型描述
  • 关系运算操作符
    • 等于操作符 `==`
      • 语法
      • 示例
      • 类型描述
    • 不等于操作符 `!=`
      • 语法
      • 示例
      • 类型描述
    • 大于操作符 `>`
      • 语法
      • 示例
      • 类型描述
    • 小于操作符 `<`
      • 语法
      • 示例
      • 类型描述
    • 大于或等于操作符 `>=`
      • 语法
      • 示例
      • 类型描述
    • 小于或等于操作符 `<=`
      • 语法
      • 示例
      • 类型描述
  • 赋值运算操作符
    • 等号赋值操作符 `=`
      • 语法
      • 示例
      • 类型描述
    • 加等于操作符 `+=`
      • 语法
      • 示例
      • 类型描述
    • 减等于操作符 `-=`
      • 语法
      • 示例
      • 类型描述
    • 乘等于操作符 `*=`
      • 语法
      • 示例
      • 类型描述
    • 除等于操作符 `/=`
      • 语法
      • 示例
      • 类型描述
    • 取模等于操作符 `%=`
      • 语法
      • 示例
      • 类型描述
  • 特殊运算操作符
    • 取地址运算符 `&`
      • 语法
      • 示例
      • 类型描述
    • 指针解引用运算符 `*`
      • 语法
      • 示例
      • 类型描述
    • 递增运算符 `++`
      • 语法
      • 示例
      • 类型描述
    • 递减运算符 `--`
      • 语法
      • 示例
      • 类型描述
    • 类型断言 `.(type)`
      • 语法
      • 示例
      • 类型描述
    • 切片运算符 `[:]`
      • 语法
      • 示例
      • 类型描述
  • 类型运算操作符
    • 类型断言 `.(type)`
      • 语法
      • 示例
      • 类型描述
    • 类型转换
      • 语法
      • 示例
      • 类型描述
    • 类型推断 `:=`
      • 语法
      • 示例
      • 类型描述
  • 运算优先级
    • 基础规则
    • 举例
      • 后缀运算符优先
      • 一元运算符优先于加法和乘法
      • 乘法优先于加法
      • 括号改变优先级
      • 逻辑运算优先级
    • 类型描述
  • 总结
      • 精确性与可读性
      • 类型安全
      • 性能优化
      • 可组合性
      • 细致入微

本文全面探讨了Go语言中的各类运算操作符,从基础的数学和位运算到逻辑和特殊运算符。文章旨在深入解析每一种运算操作符的工作原理、应用场景和注意事项,以帮助开发者编写更高效、健壮和可读的Go代码。

file

简介

Go语言,作为一种现代的编程语言,不仅因为其简单易读的语法而受到欢迎,还因为它的性能和高度并发能力在云计算和分布式系统中得到了广泛的应用。虽然Go语言目标是保持简单和直观,但它依然包含了一组丰富的运算操作符,这些运算操作符为数据处理和逻辑表达提供了强大的工具。

运算操作符在任何编程语言中都起着基础但至关重要的作用。他们是构建更复杂逻辑和功能的基础“砖块”。理解这些运算操作符的工作原理,以及它们如何与Go语言的其他元素(如数据类型和结构)相互作用,是深入理解该语言的关键。

在Go语言中,运算操作符可以大致分为几个类别:

  • 基础数学运算操作符:用于执行加、减、乘、除等基础数学运算。
  • 位运算操作符:用于操作整数的各个位,通常用于优化和底层编程。
  • 逻辑运算操作符:用于构建布尔逻辑表达式。
  • 关系运算操作符:用于比较两个值并返回一个布尔结果。
  • 赋值运算操作符:用于设置变量的值,也包括与其他运算符的组合(如+=)。
  • 特殊运算操作符:像递增(++)和递减(--)这样的操作符有特殊用途。
  • 类型运算操作符:用于类型转换或类型断言。

本文将对这些运算操作符进行全面而深入的探讨,包括它们的语法、用例、边界情况以及与其他Go语言特性的交互。每个部分都将配备代码示例和详细的解释,以确保内容的技术深度和易读性。

在深入研究各个运算操作符之前,理解它们的优先级和结合性也是至关重要的,因为这直接影响到表达式如何被求值。因此,本文也会对这一主题进行特别的探讨。

通过本文,您将掌握Go语言中所有重要的运算操作符,并能有效地利用它们解决实际问题。这不仅将加深您对Go语言本身的理解,也将为您提供更多工具来优化性能,简化代码,并构建更为强大和灵活的系统。

file

基础数学运算操作符

基础数学运算操作符是编程中最为常见和基础的操作符之一。在Go语言中,这些运算操作符用于整数、浮点数、复数等数值类型的基础数学运算。

加法操作符 +

加法操作符用于将两个数值类型的操作数相加。

语法

result = operand1 + operand2

示例

a := 5
b := 3
result := a + b  // result = 8

类型描述

该操作符适用于整数(int, int8, int16, int32, int64)、浮点数(float32, float64)、复数(complex64, complex128)以及字符串(string)。

对于字符串,加法操作符用于拼接。

str1 := "Hello"
str2 := "World"
result := str1 + " " + str2  // result = "Hello World"

减法操作符 -

减法操作符用于从一个数值类型的操作数中减去另一个数值类型的操作数。

语法

result = operand1 - operand2

示例

a := 5
b := 3
result := a - b  // result = 2

类型描述

该操作符适用于整数(int, int8, int16, int32, int64)和浮点数(float32, float64)。

乘法操作符 *

乘法操作符用于两个数值类型的操作数相乘。

语法

result = operand1 * operand2

示例

a := 5
b := 3
result := a * b  // result = 15

类型描述

该操作符适用于整数(int, int8, int16, int32, int64)、浮点数(float32, float64)和复数(complex64, complex128)。

除法操作符 /

除法操作符用于一个数值类型的操作数除以另一个数值类型的操作数。

语法

result = operand1 / operand2

示例

a := 10.0
b := 3.0
result := a / b  // result = 3.3333333333333335

类型描述

该操作符适用于整数(int, int8, int16, int32, int64)和浮点数(float32, float64)。

注意:整数除法将向下取整。

a := 10
b := 3
result := a / b  // result = 3

取模操作符 %

取模操作符用于返回两个整数相除的余数。

语法

result = operand1 % operand2

示例

a := 10
b := 3
result := a % b  // result = 1

类型描述

该操作符仅适用于整数(int, int8, int16, int32, int64)。


位运算操作符

位运算操作符在Go语言中用于对二进制位进行操作。这类操作符对底层硬件编程、网络协议或哈希算法等场景非常有用。

按位与操作符 &

按位与操作符用于两个二进制数的对应位上进行与操作。

语法

result = operand1 & operand2

示例

a := 60  // 0011 1100
b := 13  // 0000 1101
result := a & b  // 0000 1100, result = 12

类型描述

该操作符适用于整数类型(int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64)。

按位或操作符 |

按位或操作符用于两个二进制数的对应位上进行或操作。

语法

result = operand1 | operand2

示例

a := 60  // 0011 1100
b := 13  // 0000 1101
result := a | b  // 0011 1101, result = 61

类型描述

该操作符适用于整数类型(int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64)。

按位异或操作符 ^

按位异或操作符用于两个二进制数的对应位上进行异或操作。

语法

result = operand1 ^ operand2

示例

a := 60  // 0011 1100
b := 13  // 0000 1101
result := a ^ b  // 0011 0001, result = 49

类型描述

该操作符适用于整数类型(int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64)。

按位取反操作符 ^

按位取反操作符用于对二进制数的每一位进行取反操作。

语法

result = ^operand

示例

a := 60  // 0011 1100
result := ^a  // 1100 0011, result = -61

类型描述

该操作符适用于整数类型(int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64)。

左移操作符 <<

左移操作符用于将二进制数的所有位向左移动指定的位数。

语法

result = operand << numberOfBits

示例

a := 1  // 0000 0001
result := a << 3  // 0000 1000, result = 8

类型描述

该操作符适用于整数类型(int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64)。

右移操作符 >>

右移操作符用于将二进制数的所有位向右移动指定的位数。

语法

result = operand >> numberOfBits

示例

a := 16  // 0001 0000
result := a >> 3  // 0000 0010, result = 2

类型描述

该操作符适用于整数类型(int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64)。


逻辑运算操作符

逻辑运算操作符在Go语言中主要用于布尔表达式的计算,它们提供了一种对条件进行判断和组合的方式。逻辑运算符是布尔逻辑的核心组成部分,并在条件判断、循环控制等逻辑控制流程中起到关键作用。

逻辑与操作符 &&

逻辑与操作符用于组合两个布尔表达式。只有当两个表达式都为true时,结果才为true

语法

result = expression1 && expression2

示例

a := true
b := false
result := a && b  // false

类型描述

该操作符适用于布尔类型(bool)。

逻辑或操作符 ||

逻辑或操作符用于组合两个布尔表达式。只要其中一个表达式为true,结果就为true

语法

result = expression1 || expression2

示例

a := true
b := false
result := a || b  // true

类型描述

该操作符适用于布尔类型(bool)。

逻辑非操作符 !

逻辑非操作符用于反转一个布尔表达式的值。如果表达式为true,结果则为false;反之亦然。

语法

result = !expression

示例

a := true
result := !a  // false

类型描述

该操作符适用于布尔类型(bool)。


关系运算操作符

关系运算操作符用于比较两个值的关系,并返回一个布尔类型(truefalse)的结果。在Go语言中,这些操作符常用于各种条件判断,如ifelse ifwhile等控制语句。

等于操作符 ==

等于操作符用于检查两个操作数是否相等。

语法

result = expression1 == expression2

示例

a := 5
b := 6
result := a == b  // false

类型描述

适用于所有基础类型(整数、浮点数、字符串等),但类型必须匹配。

不等于操作符 !=

不等于操作符用于检查两个操作数是否不相等。

语法

result = expression1 != expression2

示例

a := 5
b := 6
result := a != b  // true

类型描述

适用于所有基础类型(整数、浮点数、字符串等),但类型必须匹配。

大于操作符 >

大于操作符用于检查左侧操作数是否大于右侧操作数。

语法

result = expression1 > expression2

示例

a := 5
b := 6
result := a > b  // false

类型描述

适用于所有数值类型(整数和浮点数)。

小于操作符 <

小于操作符用于检查左侧操作数是否小于右侧操作数。

语法

result = expression1 < expression2

示例

a := 5
b := 6
result := a < b  // true

类型描述

适用于所有数值类型(整数和浮点数)。

大于或等于操作符 >=

大于或等于操作符用于检查左侧操作数是否大于或等于右侧操作数。

语法

result = expression1 >= expression2

示例

a := 5
b := 6
result := a >= b  // false

类型描述

适用于所有数值类型(整数和浮点数)。

小于或等于操作符 <=

小于或等于操作符用于检查左侧操作数是否小于或等于右侧操作数。

语法

result = expression1 <= expression2

示例

a := 5
b := 6
result := a <= b  // true

类型描述

适用于所有数值类型(整数和浮点数)。


赋值运算操作符

在Go语言中,赋值运算操作符用于将一个值分配给变量。除了基础的赋值操作符 = 外,Go还提供了一系列复合赋值操作符,如 +=-= 等,这些操作符在执行赋值的同时进行其他运算。

等号赋值操作符 =

等号赋值操作符用于将右侧表达式的值赋给左侧的变量。

语法

variable = expression

示例

a := 5
b := a  // b现在等于5

类型描述

适用于所有数据类型,但左右侧的类型必须匹配或可以进行隐式转换。

加等于操作符 +=

该操作符将左侧变量与右侧表达式的值相加,然后将结果赋给左侧变量。

语法

variable += expression

示例

a := 5
a += 2  // a现在等于7

类型描述

适用于所有数值类型和字符串。

减等于操作符 -=

该操作符将左侧变量与右侧表达式的值相减,然后将结果赋给左侧变量。

语法

variable -= expression

示例

a := 5
a -= 2  // a现在等于3

类型描述

适用于所有数值类型。

乘等于操作符 *=

该操作符将左侧变量与右侧表达式的值相乘,然后将结果赋给左侧变量。

语法

variable *= expression

示例

a := 5
a *= 2  // a现在等于10

类型描述

适用于所有数值类型。

除等于操作符 /=

该操作符将左侧变量与右侧表达式的值相除,然后将结果赋给左侧变量。

语法

variable /= expression

示例

a := 10
a /= 2  // a现在等于5

类型描述

适用于所有数值类型。

取模等于操作符 %=

该操作符将左侧变量与右侧表达式的值进行取模运算,然后将结果赋给左侧变量。

语法

variable %= expression

示例

a := 10
a %= 3  // a现在等于1

类型描述

适用于整数类型。


特殊运算操作符

Go 语言拥有一些特殊的运算操作符,这些操作符具有特定的用途和行为。了解这些特殊运算操作符的工作原理和使用场景对编写高效、可读的 Go 程序非常有用。

取地址运算符 &

取地址运算符用于获取变量的内存地址。

语法

&variable

示例

var a int = 10
b := &a  // b 现在存储了 a 的内存地址

类型描述

适用于所有类型的变量。

指针解引用运算符 *

用于获取指针指向的变量的值。

语法

*pointer

示例

var a int = 10
b := &a
c := *b  // c 现在是 10

类型描述

只适用于指针类型。

递增运算符 ++

用于将变量的值递增 1。

语法

variable++

示例

a := 5
a++  // a 现在是 6

类型描述

适用于所有数值类型。

递减运算符 --

用于将变量的值递减 1。

语法

variable--

示例

a := 5
a--  // a 现在是 4

类型描述

适用于所有数值类型。

类型断言 .(type)

用于在接口类型变量中检查存储的具体类型。

语法

variable.(type)

示例

var i interface{} = "hello"
s, ok := i.(string)  // s 现在是 "hello",ok 是 true

类型描述

仅适用于接口类型。

切片运算符 [:]

用于从数组或切片中获取子序列。

语法

array[start:end]

示例

a := []int{1, 2, 3, 4, 5}
b := a[1:4]  // b 现在是 []int{2, 3, 4}

类型描述

适用于数组和切片。


类型运算操作符

在 Go 语言中,类型运算操作符用于在运行时检查或断言变量的类型、进行类型转换等。这些运算操作符有助于编程者更好地控制程序的行为。

类型断言 .(type)

类型断言用于检查接口类型变量所存储的具体类型,并在运行时进行类型转换。

语法

value, ok := interfaceVariable.(Type)

示例

var myInterface interface{} = "Hello, World!"strValue, ok := myInterface.(string)
if ok {fmt.Println("Type assertion successful, value:", strValue)  // 输出:Type assertion successful, value: Hello, World!
}

类型描述

仅适用于接口类型。

类型转换

在 Go 语言中,可以通过类型转换将一个类型的值转换为另一个类型。注意,不是所有的类型都能进行转换。

语法

newValue := TargetType(value)

示例

var myInt int = 10
var myFloat float64myFloat = float64(myInt)  // 类型转换fmt.Println("Converted value:", myFloat)  // 输出:Converted value: 10

类型描述

适用于数值类型之间、数值与字符串之间(有限制),以及某些特定类型。

类型推断 :=

用于在声明变量时根据右侧表达式自动推断变量的类型。

语法

variable := expression

示例

a := 42  // 类型推断为 int
b := 3.14  // 类型推断为 float64

类型描述

适用于所有变量类型。


运算优先级

在 Go 语言中,运算优先级定义了在表达式中多个运算操作符按照何种顺序进行计算。理解运算优先级是写出可读、准确、和高效代码的关键。

基础规则

在没有括号的情况下,Go 语言的运算优先级从高到低如下:

  1. 后缀运算符:[], ., (), ->, ++, --
  2. 一元运算符:+, -, !, ~, *, &, <-, ++, --
  3. 乘法、除法、模运算:*, /, %
  4. 加法、减法:+, -
  5. 左移、右移:<<, >>
  6. 关系运算符:<, <=, >, >=
  7. 相等、不等:==, !=
  8. 位与:&
  9. 位异或:^
  10. 位或:|
  11. 逻辑与:&&
  12. 逻辑或:||

举例

以下是一些运算优先级的例子:

后缀运算符优先

arr := [3]int{1, 2, 3}
fmt.Println(arr[0])  // 输出:1

一元运算符优先于加法和乘法

var x int = 4
var y int = -2
fmt.Println(-x * y)  // 输出:-8,而不是 8

乘法优先于加法

fmt.Println(2 + 3 * 4)  // 输出:14,而不是 20

括号改变优先级

fmt.Println((2 + 3) * 4)  // 输出:20,括号改变了运算优先级

逻辑运算优先级

fmt.Println(true && false || true)  // 输出:true,`&&` 优先于 `||`

类型描述

运算优先级适用于所有涉及运算操作符的类型。


总结

在Go语言中,运算操作符是编程的基础构建块之一,理解和正确使用它们对于编写高效、可读和可维护的代码至关重要。本文通过多个篇章全面地探讨了Go中各种类型的运算操作符,从基础数学运算操作符到位运算、逻辑运算,再到特殊和类型运算操作符。

精确性与可读性

Go语言的运算操作符设计相当直观和强类型,这不仅增加了代码的精确性,而且提高了可读性。例如,赋值操作符的扩展(+=, -=, *=, /=等)允许开发者以简洁的方式进行复杂运算,而不损失代码质量。

类型安全

Go严格的类型系统确保了在进行任何运算之前,操作数类型必须明确且匹配。这有助于减少因类型错误导致的运行时错误,使得代码更加健壮。

性能优化

位运算操作符(&, |, ^, <<, >>等)提供了一种非常高效的方式来处理整数和布尔值。理解这些操作符的工作原理不仅有助于编写性能更优的代码,而且能深入理解计算机科学的底层原理。

可组合性

Go的运算操作符设计有很好的可组合性,例如通过使用&&||,你可以构建非常复杂的逻辑表达式。然而,要注意运算优先级,以避免逻辑错误。在复杂的表达式中使用括号是一个好习惯。

细致入微

Go也提供了一些更高级的运算操作符,如类型断言和通道操作符,这些都是Go语言强大功能性的体现。掌握这些高级特性,将使你能够更有效地解决复杂的编程问题。

通过深入地理解Go语言的运算操作符,你不仅会成为一个更有效的Go开发者,还能在编程思维、算法优化和代码质量方面获得重要的洞见。总之,掌握Go的运算操作符是任何希望深入了解该语言的开发者的必修课程。

https://www.google.com/url?sa=i&url=https%3A%2F%2Fzhuanlan.zhihu.com%2Fp%2F450894846&psig=AOvVaw3KE2rSAQ00zcLiDZmtTjTq&ust=1694057973804000&source=images&cd=vfe&opi=89978449&ved=0CA8QjRxqFwoTCIiG7vCHlYEDFQAAAAAdAAAAABBEfile

关注微信公众号【TechLeadCloud】,分享互联网架构、云服务技术的全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业人士,上亿营收AI产品研发负责人。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

phpstudy本地域名伪静态

环境&#xff1a;WNMP(Windows10 Nginx1.15.11 MySQL5.7.26 【PHP 7.4.3 (cli) (built: Feb 18 2020 17:29:57) ( NTS Visual C 2017 x64 ) 】) 使用PhpStudy配置本地域名后&#xff0c;设置伪静态&#xff0c;这样在Web端打开网站就不需要输入index.php了&#xff0c;很简单…

分类预测 | MATLAB实现SSA-CNN麻雀算法优化卷积神经网络数据分类预测

分类预测 | MATLAB实现SSA-CNN麻雀算法优化卷积神经网络数据分类预测 目录 分类预测 | MATLAB实现SSA-CNN麻雀算法优化卷积神经网络数据分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.MATLAB实现SSA-CNN麻雀算法优化卷积神经网络数据分类预测&#xff0c;多特…

延时队列java

Redis过期键通知&#xff08;使用redis来实现延迟通知&#xff09; Slf4j public class KeyExpiredListener extends KeyExpirationEventMessageListener {public KeyExpiredListener(RedisMessageListenerContainer listenerContainer) {super(listenerContainer);}Overridep…

【Proteus仿真】【STM32单片机】汽车倒车报警系统设计

文章目录 一、功能简介二、软件设计三、实验现象联系作者 一、功能简介 本项目使用Proteus8仿真STM32单片机控制器&#xff0c;使用LCD1602液晶、按键、继电器电机模块、DS18B20温度传感器、蜂鸣器LED、HCSR04超声波等。 主要功能&#xff1a; 系统运行后&#xff0c;LCD1602显…

MACH架构的质量工程指南

MACH是快速创建高质量应用的最佳实践&#xff0c;同时也意味着有助于团队内的质量工程。本文介绍了MACH在质量工程领域所起的作用&#xff0c;并介绍了成功的MACH架构必备的8个要素。原文: MACH Architecture: The Quality Engineering Guide MACH和质量工程有关。 在过去几年里…

企业可以直接使用的Java低代码平台

随着数字化转型的加速推进&#xff0c;企业对于高效、便捷的应用开发需求愈发迫切。在这种背景下&#xff0c;低代码开发平台逐渐崭露头角&#xff0c;成为企业级应用开发的新趋势。近年来&#xff0c;国内外低代码市场呈现爆发式增长&#xff0c;诸多厂商纷纷布局这一领域&…

MySQL8 间隙锁在11种情况下的锁持有情况分析

测试环境及相关必要知识 测试环境为mysql 8 版本 间隙锁&#xff08;Gap Lock&#xff09;&#xff1a;用于锁定索引范围之间的间隙&#xff0c;防止其他事务在此间隙中插入新记录。间隙锁主要用于防止幻读问题。 在可重复读的隔离级别下默认打开该锁机制&#xff0c;解决幻…

mariadb 错误日志中报错:Incorrect definition of table mysql.column_stats:

数据库错误日志出现此错误原因是因为系统表中字段类型或者数据结构有变动导致&#xff0c;一般是因为升级数据库版本后未同步升级系统表结构。 解决方法&#xff1a; 1.如果错误日志过大&#xff0c;直接删除。 2.执行 mysql_upgrade -u[用户名] -p[密码];&#xff0c;这一步…

c++模板库容器list vector map set操作和性能对比

文章目录 listvectormapset性能比较总结 list 列表&#xff08;list&#xff09;是C STL中的一种容器类型&#xff0c;它是一个双向链表&#xff0c;可以在任意位置高效地添加、删除、移动元素。 以下是一些常用的列表操作&#xff1a; 创建列表 #include <list> std…

一张图搞定英文星期、月份、季节总也搞不定的星期,月份,季节,一张图搞定,还有必用的常见搭配,再也不担心用错介词了~

一张图搞定英文星期、月份、季节 总也搞不定的星期&#xff0c;月份&#xff0c;季节&#xff0c;一张图搞定&#xff0c;还有必用的常见搭配&#xff0c;再也不担心用错介词了~

计算机毕设 招聘网站爬取与大数据分析可视化 - python 分析 可视化 flask

文章目录 0 前言1 课题背景2 实现效果3 Flask框架4 Echarts5 爬虫6 最后 0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到毕业答辩的要求&#xff0c;这两年不断有学弟学妹告诉学长自…

[引擎开发] 杂谈ue4中的Vulkan

接触Vulkan大概也有大半年&#xff0c;概述一下自己这段时间了解到的东西。本文实际上是杂谈性质而非综述性质&#xff0c;带有严重的主观认知&#xff0c;因此并没有那么严谨。 使用Vulkan会带来什么呢&#xff1f;简单来说就是对底层更好的控制。这意味着我们能够有更多的手段…