当前位置: 首页 > news >正文

【Go语言精进之路】构建高效Go程序:了解string实现原理并高效使用

在这里插入图片描述

🔥 个人主页:空白诗
🔥 热门专栏:【Go语言精进之路】

在这里插入图片描述

文章目录

    • 引言
    • 一、Go语言的字符串类型
      • 1.1 字符串的定义
      • 1.2 字符串的零值可用
      • 1.3 字符串的不可变性
      • 1.4 字符串的拼接
      • 1.5 字符串的常用方法
      • 1.6 实际使用示例
    • 二、字符串的内部表示
      • 2.1 字符串的底层结构
      • 2.2 字符串与字节切片的关系
        • 字符串转换为字节切片
        • 字节切片转换为字符串
      • 2.3 字符串的编码
        • 遍历字符串
      • 2.4 不可变性的实现
      • 2.5 字符串的内存管理
      • 2.6 字符串池
    • 三、字符串的高效构造
      • 3.1 使用 strings.Builder
        • 示例:
        • 性能优势:
      • 3.2 使用字节缓冲区
        • 示例:
        • 性能优势:
      • 3.3 预分配切片
        • 示例:
        • 性能优势:
      • 3.4 使用 strings.Join
        • 示例:
        • 性能优势:
      • 3.5 选择合适的方法
    • 四、字符串相关的高效转换
      • 4.1 字符串与数字的转换
        • 字符串转换为整数
        • 整数转换为字符串
      • 4.2 字符串与字节切片的转换
        • 字符串转换为字节切片
        • 字节切片转换为字符串
      • 4.3 字符串与字符(rune)的转换
        • 字符串转换为字符切片
        • 字符切片转换为字符串
      • 4.4 字符串与其他数据类型的转换
        • 布尔值转换
        • 浮点数转换
    • 总结

在这里插入图片描述

引言

在Go语言中,字符串是一个重要且经常使用的数据类型。无论是处理文本数据、构建复杂字符串,还是在不同数据类型之间进行转换,高效的字符串操作都对程序性能至关重要。本篇文章将深入探讨Go语言中的字符串类型,从基本的字符串定义和操作,到字符串的内部表示,再到高效的字符串构造和转换方法,通过全面的讲解和实例代码,帮助读者更好地理解和使用Go语言的字符串功能。

一、Go语言的字符串类型

在这里插入图片描述

在Go语言中,字符串类型是非常重要且经常使用的数据类型。字符串用于存储字符序列,在Go语言中,它们是不可变的。这意味着一旦创建了字符串,它的内容是无法更改的。接下来,我们将深入了解Go语言的字符串类型,包括它的定义、操作、常用方法以及一些实际的使用示例。

1.1 字符串的定义

在Go语言中,字符串使用双引号 " 包裹起来。例如:

package mainimport "fmt"func main() {var str1 string = "Hello, World!"str2 := "Go语言"fmt.Println(str1)fmt.Println(str2)
}

上述代码定义了两个字符串变量 str1str2,并打印它们的值。Go语言支持UTF-8编码,这意味着字符串可以包含多种语言的字符。

1.2 字符串的零值可用

在Go语言中,字符串类型的零值是一个空字符串,也就是 ""。这意味着当你声明一个字符串变量但未对其进行初始化时,它的默认值是空字符串。这种特性可以帮助我们在编写代码时避免出现空指针异常的问题。

package mainimport "fmt"func main() {var str stringfmt.Println("字符串的零值:", str) // 输出:字符串的零值:fmt.Println("字符串是否为空:", str == "") // 输出:字符串是否为空: true
}

在这个例子中,变量 str 声明后未被初始化,因此它的值是空字符串。我们可以通过比较操作 str == "" 来确认这一点。

1.3 字符串的不可变性

Go语言中的字符串是不可变的,这意味着你不能直接修改字符串中的某个字符。例如,以下代码是非法的:

package mainfunc main() {str := "Hello"str[0] = 'h' // 编译错误:cannot assign to str[0]
}

如果需要修改字符串,可以创建一个新的字符串。例如:

package mainimport "fmt"func main() {str := "Hello"newStr := "h" + str[1:]fmt.Println(newStr) // 输出:hello
}

1.4 字符串的拼接

Go语言提供了多种方法来拼接字符串。最常用的方法是使用 + 操作符:

package mainimport "fmt"func main() {str1 := "Hello"str2 := "World"result := str1 + ", " + str2 + "!"fmt.Println(result) // 输出:Hello, World!
}

对于大量字符串的拼接,推荐使用 strings.Builder,因为它更加高效:

package mainimport ("fmt""strings"
)func main() {var builder strings.Builderbuilder.WriteString("Hello")builder.WriteString(", ")builder.WriteString("World")builder.WriteString("!")result := builder.String()fmt.Println(result) // 输出:Hello, World!
}

1.5 字符串的常用方法

Go语言的 strings 包提供了许多用于操作字符串的函数。以下是一些常用方法:

  • len(s):返回字符串的长度(字节数)。
  • strings.Split(s, sep):将字符串按指定分隔符拆分成子串数组。
  • strings.Join(a, sep):将字符串数组按指定分隔符合并成一个字符串。
  • strings.Contains(s, substr):判断字符串是否包含子串。
  • strings.ToUpper(s)strings.ToLower(s):将字符串转换为大写或小写。

示例:

package mainimport ("fmt""strings"
)func main() {str := "Hello, Go语言!"fmt.Println("长度:", len(str)) // 输出:长度: 14parts := strings.Split(str, ", ")fmt.Println("拆分:", parts) // 输出:拆分: [Hello Go语言!]joined := strings.Join(parts, " - ")fmt.Println("合并:", joined) // 输出:合并: Hello - Go语言!fmt.Println("包含 'Go':", strings.Contains(str, "Go")) // 输出:包含 'Go': truefmt.Println("大写:", strings.ToUpper(str)) // 输出:大写: HELLO, GO语言!fmt.Println("小写:", strings.ToLower(str)) // 输出:小写: hello, go语言!
}

1.6 实际使用示例

以下是一个实际使用字符串的示例:检查一个字符串是否是回文(即正读和反读都一样)。

package mainimport ("fmt""strings"
)func isPalindrome(s string) bool {s = strings.ToLower(s)s = strings.ReplaceAll(s, " ", "")s = strings.ReplaceAll(s, ",", "")s = strings.ReplaceAll(s, "!", "")n := len(s)for i := 0; i < n/2; i++ {if s[i] != s[n-1-i] {return false}}return true
}func main() {str := "A man, a plan, a canal, Panama!"fmt.Println("是否是回文:", isPalindrome(str)) // 输出:是否是回文: true
}

在这个示例中,我们定义了一个函数 isPalindrome 来检查字符串是否是回文。我们使用 strings 包提供的方法来处理字符串并进行检查。

通过上述内容,我们可以了解到Go语言中字符串类型的基本概念和常用操作方法。字符串在编程中无处不在,掌握其使用方法对于Go语言开发非常重要。


二、字符串的内部表示

在这里插入图片描述

在Go语言中,字符串的内部表示方式决定了它的高效性和灵活性。了解字符串的内部结构对于理解其性能特征和行为至关重要。本部分将详细介绍Go语言中字符串的内部表示。

2.1 字符串的底层结构

在Go语言中,字符串是一个只读的字节切片。实际上,字符串是一个结构体,它包含一个指向底层字节数组的指针和一个长度字段。Go语言的字符串定义如下:

type string struct {data uintptrlen  int
}

这里,data 是一个指向实际存储字符串内容的字节数组的指针,而 len 则是字符串的长度。这个设计使得字符串可以高效地进行长度计算和内容访问。

2.2 字符串与字节切片的关系

由于字符串在内部是一个字节数组,因此可以方便地与字节切片进行互相转换。

字符串转换为字节切片

将字符串转换为字节切片是一个常见的操作,可以使用标准库中的 []byte 类型转换:

package mainimport "fmt"func main() {str := "Hello, Go语言!"byteSlice := []byte(str)fmt.Println(byteSlice) // 输出:[72 101 108 108 111 44 32 71 111 232 175 173 232 168 128 33]
}
字节切片转换为字符串

将字节切片转换为字符串也非常简单,可以直接使用 string 类型转换:

package mainimport "fmt"func main() {byteSlice := []byte{72, 101, 108, 108, 111, 44, 32, 71, 111, 232, 175, 173, 232, 168, 128, 33}str := string(byteSlice)fmt.Println(str) // 输出:Hello, Go语言!
}

2.3 字符串的编码

Go语言的字符串默认使用UTF-8编码,这使得字符串可以方便地处理多种语言的字符。UTF-8是一种变长编码,ASCII字符使用一个字节,而其他字符使用两个到四个字节不等。

遍历字符串

遍历字符串时,需要注意字符的编码。直接遍历字符串实际上是遍历其字节,这可能导致非ASCII字符被错误处理。可以使用 for range 循环来正确遍历UTF-8编码的字符串:

package mainimport "fmt"func main() {str := "Hello, Go语言!"for i, r := range str {fmt.Printf("字符 %c 的位置 %d\n", r, i)}
}

在这个例子中,for range 循环能够正确处理多字节的UTF-8字符,并返回字符的索引和Unicode码点。

2.4 不可变性的实现

字符串的不可变性是通过不提供直接修改字符串内容的方法来实现的。一旦字符串被创建,无法通过其指针或其他方式修改其内容。这种设计在提升字符串操作的安全性和并发性方面有显著优势,因为无需担心多个线程对同一个字符串进行修改。

如果需要修改字符串,可以创建一个新的字符串。例如:

package mainimport "fmt"func main() {str := "Hello"newStr := "h" + str[1:]fmt.Println(newStr) // 输出:hello
}

2.5 字符串的内存管理

由于字符串是不可变的,Go语言在处理字符串时尽量避免不必要的内存分配。对于短小的字符串,Go语言的运行时会优化其内存分配。例如,对于长度为零的字符串,Go语言会将其指针指向一个共享的空字符串,而不是为每个空字符串分配单独的内存。

2.6 字符串池

Go语言在编译时会将相同的字符串常量合并到一个字符串池中。这意味着在程序的不同部分使用相同的字符串常量时,它们实际上指向的是内存中的同一个位置。这样可以减少内存使用和提高字符串比较的效率。

例如:

package mainimport "fmt"func main() {str1 := "Hello, World!"str2 := "Hello, World!"fmt.Println(&str1 == &str2) // 输出:true
}

在这个例子中,str1str2 实际上指向同一个字符串常量。

通过了解Go语言中字符串的内部表示,我们可以更好地理解字符串操作的性能和行为,从而在开发中更高效地使用字符串。


三、字符串的高效构造

在这里插入图片描述

在Go语言中,高效地构造字符串对于提升程序性能至关重要。特别是在需要频繁拼接或处理大量字符串的场景下,合理的字符串构造方式可以显著减少内存分配和提升执行效率。本部分将介绍几种常用的高效构造字符串的方法,包括使用 strings.Builder、字节缓冲区和预分配切片等技术。

3.1 使用 strings.Builder

strings.Builder 是Go语言标准库中的一种高效构造字符串的方法。它通过内部维护一个可变的字节缓冲区,避免了频繁的内存分配和复制操作。

示例:
package mainimport ("fmt""strings"
)func main() {var builder strings.Builderbuilder.WriteString("Hello")builder.WriteString(", ")builder.WriteString("Go语言")builder.WriteString("!")result := builder.String()fmt.Println(result) // 输出:Hello, Go语言!
}
性能优势:
  • 减少内存分配strings.Builder 通过内部的缓冲区来管理字节数组,避免了每次拼接操作时创建新的字符串。
  • 高效拼接:多次调用 WriteString 方法可以累积字符串内容,最终通过 String 方法生成最终字符串。

3.2 使用字节缓冲区

bytes.Buffer 是另一种高效构造字符串的工具,特别适用于需要处理二进制数据和字符串混合的场景。

示例:
package mainimport ("bytes""fmt"
)func main() {var buffer bytes.Bufferbuffer.WriteString("Hello")buffer.WriteString(", ")buffer.WriteString("Go语言")buffer.WriteString("!")result := buffer.String()fmt.Println(result) // 输出:Hello, Go语言!
}
性能优势:
  • 灵活性bytes.Buffer 不仅可以处理字符串,还可以处理其他类型的二进制数据。
  • 线程安全:与 strings.Builder 类似,bytes.Buffer 也能有效地减少内存分配和复制操作。

3.3 预分配切片

在知道最终字符串长度的情况下,可以通过预分配字节切片来提高拼接效率。这种方法适用于构造定长或接近定长的字符串。

示例:
package mainimport "fmt"func main() {parts := []string{"Hello", ", ", "Go语言", "!"}totalLength := 0for _, part := range parts {totalLength += len(part)}buf := make([]byte, totalLength)pos := 0for _, part := range parts {copy(buf[pos:], part)pos += len(part)}result := string(buf)fmt.Println(result) // 输出:Hello, Go语言!
}
性能优势:
  • 减少内存分配:通过一次性分配足够的内存来存储所有字符串部分,避免了多次内存分配。
  • 高效拼接:使用 copy 函数直接将字符串内容复制到预分配的字节切片中。

3.4 使用 strings.Join

对于已知的多个字符串片段,可以使用 strings.Join 方法一次性拼接所有字符串。这种方法适用于字符串列表已知且固定的情况。

示例:
package mainimport ("fmt""strings"
)func main() {parts := []string{"Hello", ", ", "Go语言", "!"}result := strings.Join(parts, "")fmt.Println(result) // 输出:Hello, Go语言!
}
性能优势:
  • 简单高效strings.Join 方法内部会计算总长度并一次性分配内存,从而高效地拼接字符串。
  • 简洁代码:使用 strings.Join 可以使代码更加简洁明了。

3.5 选择合适的方法

在实际开发中,选择合适的字符串构造方法需要根据具体场景和需求来确定:

  • 大量拼接strings.Builder 是通用且高效的选择。
  • 二进制数据处理bytes.Buffer 更适合处理混合数据。
  • 已知长度:预分配切片可以提供最佳性能。
  • 固定片段拼接strings.Join 简洁且高效。

通过合理选择和使用这些方法,我们可以在不同场景下高效地构造字符串,从而提升Go语言程序的整体性能。

四、字符串相关的高效转换

在这里插入图片描述

在Go语言中,字符串与其他数据类型之间的转换是常见的操作。高效的转换方法不仅能够提升程序性能,还能减少不必要的内存分配和数据复制。本部分将介绍几种常见的字符串转换操作,包括字符串与数字、字符串与字节切片、字符串与字符(rune)的高效转换方法。

4.1 字符串与数字的转换

在许多应用场景中,我们需要在字符串和数字之间进行转换。Go语言标准库提供了 strconv 包来高效地处理这些转换。

字符串转换为整数

使用 strconv.Atoistrconv.ParseInt 将字符串转换为整数:

package mainimport ("fmt""strconv"
)func main() {str := "12345"num, err := strconv.Atoi(str)if err != nil {fmt.Println("转换错误:", err)} else {fmt.Println("转换后的整数:", num) // 输出:转换后的整数: 12345}
}
整数转换为字符串

使用 strconv.Itoastrconv.FormatInt 将整数转换为字符串:

package mainimport ("fmt""strconv"
)func main() {num := 12345str := strconv.Itoa(num)fmt.Println("转换后的字符串:", str) // 输出:转换后的字符串: 12345
}

4.2 字符串与字节切片的转换

字符串与字节切片之间的转换在处理二进制数据时非常常见。Go语言提供了高效的转换方式。

字符串转换为字节切片

使用类型转换 []byte 可以高效地将字符串转换为字节切片:

package mainimport "fmt"func main() {str := "Hello, Go语言!"byteSlice := []byte(str)fmt.Println("字节切片:", byteSlice) // 输出:字节切片: [72 101 108 108 111 44 32 71 111 232 175 173 232 168 128 33]
}
字节切片转换为字符串

使用类型转换 string 可以高效地将字节切片转换为字符串:

package mainimport "fmt"func main() {byteSlice := []byte{72, 101, 108, 108, 111, 44, 32, 71, 111, 232, 175, 173, 232, 168, 128, 33}str := string(byteSlice)fmt.Println("字符串:", str) // 输出:Hello, Go语言!
}

4.3 字符串与字符(rune)的转换

在处理多语言文本时,经常需要将字符串分割为字符 (rune) 进行处理。Go语言中的 rune 类型表示一个Unicode码点。

字符串转换为字符切片

使用 for range 循环可以高效地将字符串分割为字符切片:

package mainimport "fmt"func main() {str := "Hello, Go语言!"var runes []runefor _, r := range str {runes = append(runes, r)}fmt.Println("字符切片:", runes) // 输出:字符切片: [72 101 108 108 111 44 32 71 111 35821 35328 33]
}
字符切片转换为字符串

可以使用 string 函数将字符切片转换为字符串:

package mainimport "fmt"func main() {runes := []rune{72, 101, 108, 108, 111, 44, 32, 71, 111, 35821, 35328, 33}str := string(runes)fmt.Println("字符串:", str) // 输出:Hello, Go语言!
}

4.4 字符串与其他数据类型的转换

布尔值转换

使用 strconv.ParseBool 将字符串转换为布尔值:

package mainimport ("fmt""strconv"
)func main() {str := "true"boolVal, err := strconv.ParseBool(str)if err != nil {fmt.Println("转换错误:", err)} else {fmt.Println("转换后的布尔值:", boolVal) // 输出:转换后的布尔值: true}
}

使用 strconv.FormatBool 将布尔值转换为字符串:

package mainimport ("fmt""strconv"
)func main() {boolVal := truestr := strconv.FormatBool(boolVal)fmt.Println("转换后的字符串:", str) // 输出:转换后的字符串: true
}
浮点数转换

使用 strconv.ParseFloat 将字符串转换为浮点数:

package mainimport ("fmt""strconv"
)func main() {str := "123.45"floatVal, err := strconv.ParseFloat(str, 64)if err != nil {fmt.Println("转换错误:", err)} else {fmt.Println("转换后的浮点数:", floatVal) // 输出:转换后的浮点数: 123.45}
}

使用 strconv.FormatFloat 将浮点数转换为字符串:

package mainimport ("fmt""strconv"
)func main() {floatVal := 123.45str := strconv.FormatFloat(floatVal, 'f', 2, 64)fmt.Println("转换后的字符串:", str) // 输出:转换后的字符串: 123.45
}

通过了解和使用这些高效的字符串转换方法,我们可以在Go语言中更好地处理字符串与其他数据类型之间的转换,从而提升代码的性能和可读性。

总结

本文详细介绍了Go语言中字符串的各个方面。首先,我们讨论了字符串的基本定义和特性,包括字符串的零值、不可变性和常见操作。接着,我们深入探讨了字符串的内部表示,解释了字符串在内存中的结构和与字节切片的关系。随后,我们介绍了高效构造字符串的方法,包括使用 strings.Builder、字节缓冲区和预分配切片等技术。最后,我们展示了字符串与其他数据类型之间的高效转换方法。通过这些内容,希望读者能够掌握高效处理Go语言字符串的技巧,从而编写出性能更优的程序。

相关文章:

【Go语言精进之路】构建高效Go程序:了解string实现原理并高效使用

&#x1f525; 个人主页&#xff1a;空白诗 &#x1f525; 热门专栏&#xff1a;【Go语言精进之路】 文章目录 引言一、Go语言的字符串类型1.1 字符串的定义1.2 字符串的零值可用1.3 字符串的不可变性1.4 字符串的拼接1.5 字符串的常用方法1.6 实际使用示例 二、字符串的内部表…...

HDFS 常见命令

在HDFS创建文件夹&#xff1a;hdfs dfs -mkdir /test 复制本地文件到HDFS中某个目录下&#xff1a;hdfs dfs -put /本地路径 /hdfs 路径 查看文件内容&#xff1a;hdfs dfs -cat /test.txt 查看当前文件夹目录&#xff1a;hdfs dfs -ls / 查看文件夹中的文件数&#xff1a;…...

示例:WPF中应用Grid的SharedSizeGroup设置整齐的布局

一、目的&#xff1a;应用Grid的SharedSizeGroup设置整齐的布局 二、实现 <ItemsControl ItemsSource"{local:GetStudents Count5}"><ItemsControl.ItemTemplate><DataTemplate><Grid ShowGridLines"True"><Grid.ColumnDefinit…...

React的form表单自定义校验规则

使用antd开发的过程中&#xff0c;必定会遇到需要对form表单进行必填校验的处理&#xff0c;正常情况下&#xff0c;我们都会一个空的必填校验&#xff0c;如下&#xff1a;一般我们只需要简单配置rules即可 <FormItem label"管理员姓名" {...itemLayout.wholeLi…...

一种新的一维时间序列信号盲解卷积算法(以旋转机械故障诊断为例,MATLAB环境)

一种新的一维时间序列信号盲解卷积算法&#xff08;以旋转机械故障诊断为例&#xff0c;MATLAB环境&#xff09;&#xff0c;可作为深度学习信号前处理过程&#xff0c;水个SCI不是问题。 机械设备的状态信号中往往蕴含着大量的设备异常信息。如何从繁多的机械状态信号中提取足…...

618电商是社区网站入局的好时机吗?

近日&#xff0c;随着618大促的临近&#xff0c;许多内容平台像B站、小红书等纷纷被电商活动所充斥&#xff0c;让用户感觉仿佛被电商绑架一般。这种用户体验的极度不佳让人开始思考&#xff0c;难道这就是互联网社区的未来发展方向吗&#xff1f; 在所有平台性质的社区中&…...

不知道密码,一样能卸载瑞星esm防病毒终端安全防护系统

离开单位后试图卸载瑞星的时候却发现还需要密码&#xff0c;真是烦死了。研究了几分钟后找到了完美卸载方法。 首先&#xff0c;让我们请出老流氓360安全卫士&#xff0c;下载好它&#xff0c;让右键菜单出现使用 360强力删除这一选项。 之后&#xff0c;进入安全模式&#x…...

Chromium 开发指南2024 Mac篇-安装和配置depot_tools工具(三)

1.引言 在前两篇指南中&#xff0c;我们详细介绍了在 macOS 环境下编译 Chromium 所需的硬件要求和系统依赖&#xff0c;并具体讲解了如何正确安装和配置 Xcode。通过这些步骤&#xff0c;您已经为编译 Chromium 打下了坚实的基础。然而&#xff0c;编译 Chromium 还需要配置一…...

微信小程序-路由和页面跳转API

一.wx.navigateTo wx.navigateTo是通过编程实现页面跳转&#xff0c;和navigator组件组件中&#xff0c;open-type"navigate"属性类似&#xff0c;是保留当前页面跳转新的页面&#xff0c;不适用tabbar页面。 //保留当前页面&#xff0c;跳转到非tabbar页面wx.navig…...

PWR电源控制

一、PWR简介 1、PWR&#xff08;Power Control&#xff09;电源控制 &#xff08;1&#xff09;PWR负责管理STM32内部的电源供电部分&#xff0c;可以实现可编程电压监测器和低功耗模式的功能 &#xff08;2&#xff09;可编程电压监测器&#xff08;PVD&#xff09;可以监控…...

【记录46】【案例】echarts 柱状图

echarts环境4.1.0 <template><div id"threefour"></div> </template> <script> import * as echarts from "echarts" export default {name:"",components:{},data(){return {}},methods:{getdata(){var myChart…...

Github2024-06-12 开源项目日报 Top10

根据Github Trendings的统计,今日(2024-06-12统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目4JavaScript项目2Lua项目1PHP项目1Blade项目1非开发语言项目1TypeScript项目1Shell项目1从零开始构建你喜爱的技术 创建周期:2156 天…...

茶艺师服务师傅小程序APP源码(APP+小程序+公众号+H5)

&#x1f375;茶艺师服务小程序&#xff1a;品味生活的茶艺新体验&#x1f331; &#x1f33f;一、引言&#xff1a;茶艺师服务小程序&#xff0c;让生活更有味 在繁忙的生活中&#xff0c;品一杯香茗&#xff0c;感受茶文化的韵味&#xff0c;是许多人向往的休闲方式。然而&…...

【正则表达式】入门

参考视频&#xff1a;10分钟快速掌握正则表达式_哔哩哔哩_bilibili 这个网站用来测试写的正则表达式效果&#xff1a;regex101: build, test, and debug regex 示例&#xff1a; 限定符 ? 表示前一个字符可有可无 比如这里输入&#xff1a;de? 匹配结果可以得到d和de * 前…...

制造业为什么需要ERP企业管理软件?

如今&#xff0c;传统的制造业管理方式逐渐变得力不从心~库存积压、生产效率低下、供应链混乱…想象一下&#xff0c;如果你的企业仍然依赖于手工记录订单、库存和财务数据&#xff0c;那么每当市场发生变动时&#xff0c;你就需要花费大量的时间和精力去重新调整生产计划、更新…...

JavaScript Prototype

JavaScript Prototype JavaScript 是一种高级的、解释执行的编程语言&#xff0c;广泛应用于网页和服务器端开发。JavaScript 的核心特性之一是其原型继承机制&#xff0c;这是理解 JavaScript 对象模型的关键。 什么是 Prototype&#xff1f; 在 JavaScript 中&#xff0c;…...

Web Works API 和 Promise 的对比和区别

Web Workers 和 Promise 都是强大的工具&#xff0c;用于不同的异步处理场景。Web Workers 适用于需要并行处理的复杂任务&#xff0c;通过后台线程避免阻塞主线程。而 Promise 则简化了单线程中的异步操作管理&#xff0c;使代码更加清晰和结构化。根据具体需求选择合适的技术…...

jeecg快速启动(附带本地运行可用版本下载)

版本整理&#xff08;windows x64位&#xff09;&#xff1a; redis&#xff1a;3.0.504 MYSQL&#xff1a;5.7 Maven&#xff1a;3.9.4(setting文件可下载) Nodejs&#xff1a;v16.20.2&#xff08;建议不要安装默认路径下&#xff0c;如已安装在c盘&#xff0c;运行yarn报…...

【PPT教程】一键重置幻灯片背景的方法,新建幻灯片带默认背景

目的是替换18届的研电赛ppt背景为19届 这里写目录标题 1.设计->设置背景格式2.图片或纹理填充->插入3.选择需要替换为背景的照片4.点击下方的应用到全部 1.设计->设置背景格式 2.图片或纹理填充->插入 3.选择需要替换为背景的照片 4.点击下方的应用到全部 此时全部…...

NVIDIA新模型Nemotron-4:98%的训练数据是合成生成的,你敢信?

获取本文论文原文PDF&#xff0c;请公众号 AI论文解读 留言&#xff1a;论文解读 标题&#xff1a;Nemotron-4 340B Technical Report 模型概述&#xff1a;Nemotron-4 340B系列模型的基本构成 Nemotron-4 340B系列模型包括三个主要版本&#xff1a;Nemotron-4-340B-Base、…...

深度神经网络——什么是NLP(自然语言处理)?

自然语言处理&#xff08;NLP&#xff09; 是对使计算机能够处理、分析、解释和推理人类语言的技术和工具的研究和应用。 NLP 是一个跨学科领域&#xff0c;它结合了语言学和计算机科学等领域已建立的技术。 这些技术与人工智能结合使用来创建聊天机器人和数字助理&#xff0c;…...

05-5.5.1 哈夫曼树

&#x1f44b; Hi, I’m Beast Cheng &#x1f440; I’m interested in photography, hiking, landscape… &#x1f331; I’m currently learning python, javascript, kotlin… &#x1f4eb; How to reach me --> 458290771qq.com 喜欢《数据结构》部分笔记的小伙伴可以…...

夯实网络底座:智能云解析助推新基建发展再上新台阶

在数字化浪潮汹涌澎湃的今天&#xff0c;互联网已成为社会运转不可或缺的基础设施。而在这背后&#xff0c;DNS&#xff08;域名系统&#xff09;作为互联网的底座&#xff0c;其重要性不言而喻。随着云计算、大数据、人工智能、IPv6等新基建的迅猛发展&#xff0c;传统的DNS服…...

时间戳转时间格式小记——个位数月份 如何去掉补位0的情况

工作中遇到的问题小记一下 时间戳&#xff1a;1710172800 时间格式&#xff1a;2024-03-12 00:00:00 在无要求的情况下这种情况很OK 当我们需要时间格式为&#xff1a;2024-3-12 00:00:00 那常规情况就不适用 解决&#xff1a; import time sjc 1710172800 # Windows 环境…...

C++ 矩阵乘法

描述 如果A是个x行y列的矩阵&#xff0c;B是个y行z列的矩阵&#xff0c;把A和B相乘&#xff0c;其结果将是另一个x行z列的矩阵C。这个矩阵的每个元素是由下面的公式决定的 矩阵的大小不超过100*100 输入描述&#xff1a; 第一行包含一个正整数x&#xff0c;代表第一个矩阵的…...

热门开源项目推荐

文章目录 1. OpenAIs GPT-42. TensorFlow 3.03. Kubernetes 1.304. React 195. PyTorch 2.06. Deno 2.07. Home Assistant总结 开源社区的不断壮大&#xff0c;越来越多的开发者和企业开始重视和参与开源项目。开源不仅促进了技术的快速迭代和创新&#xff0c;还为广大开发者提…...

Study--Oracle-03-数据库常规操作

一路走来&#xff0c;所有遇到的人&#xff0c;帮助过我的、伤害过我的都是朋友&#xff0c;没有一个是敌人。 一、oracle 版本及主要功能 二、数据安装完成后常用操作SQL 1、检查数据库监听状态 监听的常用命令 启动&#xff1a;[oracleoracle u01]$ lsnrctl stop 停止&am…...

OpenCloudOS 8.8 一键安装 Oracle 19C 单机

前言 Oracle 一键安装脚本&#xff0c;演示 OpenCloudOS 8.8 一键安装 Oracle 19C 单机&#xff08;231017&#xff09;过程&#xff08;全程无需人工干预&#xff09;。 ⭐️ 脚本下载地址&#xff1a;Shell脚本安装Oracle数据库 安装准备 1、安装好操作系统&#xff0c;建议…...

【Android】【Java】【每日练手3】Android的四个主要组件使用示例

Android的四个主要组件是活动&#xff08;Activity&#xff09;、服务&#xff08;Service&#xff09;、广播接收器&#xff08;Broadcast Receiver&#xff09;和内容提供器&#xff08;Content Provider&#xff09;。下面通过一个简单的示例来介绍这四个组件及其用法。 示…...

代码随想三刷二叉树篇2

代码随想三刷二叉树篇2 101. 对称二叉树题目代码 104. 二叉树的最大深度题目代码 111. 二叉树的最小深度题目代码 222. 完全二叉树的节点个数题目代码 110. 平衡二叉树题目代码 257. 二叉树的所有路径题目代码 101. 对称二叉树 题目 链接 代码 /*** Definition for a binar…...

php做原生直播网站/关键词百度网盘

检测点2.1 1&#xff09;写出每条指令执行后相关寄存器中的值&#xff08;用实验来检测&#xff09; mov ax,62627 AX (F4A3H) mov ah,31H AX (31A3H) 注&#xff1a;将31H转入到ax的高位&#xff0c;而不是进行加减乘除&#xff0c;也不能进位 mov al,23H …...

大型行业门户网站开发建设/百度推广登陆入口官网

原文地址&#xff1a;display、visibility、overflow的隐藏问题作者&#xff1a;d调的帝display&#xff1a;block | none | inline | table block: 该元素以快属性显示 none: 隐藏&#xff0c;此元素不会被显示 inline:该元素以行属性显示 overflow : visible | auto …...

做网站用虚拟机还是服务器/希爱力

目标 在微信小程序实现 watch 属性&#xff0c;监听 data 中的属性&#xff0c;当被监听属性的值改变时&#xff0c;执行我们指定的方法。​​ 思路 Vue 的 computed 和 watch 可以很方便的检测数据的变化&#xff0c;从而做出相应的改变&#xff0c;所以&#xff0c;模仿 vue …...

做360网站优化排/杭州百度seo代理

索引的本质MySQL官方对索引的定义为&#xff1a;索引(Index)是帮助MySQL高效获取数据的数据结构。提取句子主干&#xff0c;就可以得到索引的本质&#xff1a;索引是数据结构。我们知道&#xff0c;数据库查询是数据库的最主要功能之一。我们都希望查询数据的速度能尽可能的快&…...

腾讯做的购物网站/营销活动策划

SQL-on-关系型数据库&#xff1a;不止于关系数据库SQL 是一门 ANSI 的标准计算机语言&#xff0c;用来访问和操作数据库系统。SQL 语句用于取回和更新数据库中的数据。SQL 可与数据库程序协同工作&#xff0c;比如 MS Access、DB2、Informix、MS SQL Server、Oracle、Sybase 以…...

12306网站是学生做的/品牌推广案例

10月12日消息&#xff0c;美股周三平开&#xff0c;股市努力从昨日的大跌中收复失地。投资者在等待美联储最新会议纪要发布。 截止发稿&#xff0c;道琼斯工业平均指数报18,114.35点&#xff0c;下跌14.31点&#xff0c;跌幅为0.08%。标准普尔500指数报2,137.06点&#xff0c;上…...