go语言字符串变量初始化以及字符串拼接

Go语言变量初始化方法

以下四种命名方法是等价的:

  1. s := “”
  2. var s string
  3. var s = “”
  4. var s string = “”

那么什么时候用哪种而不用哪种,为什么?

第一种形式最简洁,但只能用在函数内部,不能用在包变量。

第二种形式依赖于字符串的默认初始化值,被初始化为""。

第三种形式用得很少,除非同时声明多个变量。

第四种形式显式地标明变量的类型,当变量类型与初值类型相同时,类型冗余,但如果两者类型不同,变量类型就必须了。

实践中一般使用前两种形式中的某个,初始值重要的话就显式地指定变量的类型,否则使用隐式初始化。

package main

import (
    "fmt"
    "os"
)

func main() {
    s, sep := "", ""
    for _, arg := range os.Args[1:] {
        s += sep + arg
        sep = " "
    }
    fmt.Println(s)
}

这是一个简单的字符串拼接语句,可以看到每次循环迭代字符串s的内容都会更新。

+=连接原字符串、空格和下个参数,产生新字符串, 并把它赋值给s。s原来的内容已经不再使用,将在适当时机对它进行垃圾回收

但是,这种字符串拼接的方法在数据数据量很大时会产生高昂的空间代价。

重点

一种简单且高效的解决方案是使用strings包的Join函数:

func main() {
    fmt.Println(strings.Join(os.Args[1:], " "))
}

给自己留个作业:
采用:

  1. time函数
  2. 编写标准测试程序的方法(系统性的性能评测)

编写代码实现测量使用低效的字符串拼接和使用strings.Join版本的运行时间差异。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在MBR程序中,由于没有高级语言中的变量类型和字符串类型,因此我们通常使用一段连续的内存空间来表示一个字符串变量。在初始化一个字符串变量时,我们需要直接将字符串的ASCII码序列写入到这段内存空间中。 以下是一段示例代码,用于在MBR程序中初始化一个字符串变量: ``` org 0x7c00 start: ; 初始化字符串 mov si, string mov cx, 11 mov al, 'H' rep stosb ; 显示字符串 mov si, string call print_string ; 无限循环 jmp $ ; 打印字符串 print_string: lodsb cmp al, 0 jz print_done mov ah, 0x0e int 0x10 jmp print_string print_done: ret string db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 times 510-($-$$) db 0 dw 0xaa55 ``` 在上述代码中,我们定义了一个字符串变量`string`,它包含了11个字符的空间,第一个字节为0。这是因为在MBR程序中,字符串通常以null结尾,因此我们需要将第一个字节设置为0,以表示字符串的结束。 接着,我们使用`mov si, string`指令将字符串变量`string`的地址存储在寄存器`si`中。然后,我们使用`mov cx, 11`指令将计数器`cx`的值设置为11,表示我们要初始化11个字符。接下来,我们使用`mov al, 'H'`指令将字符'H'的ASCII码存储在寄存器`al`中。最后,我们使用`rep stosb`指令将`al`中的值写入到`si`指向的内存空间中,并重复11次,完成字符串初始化。 在初始化字符串变量后,我们使用`mov si, string`指令将字符串变量`string`的地址传递给`print_string`函数,并使用`call print_string`指令调用函数,将字符串输出到屏幕上。 请注意,由于MBR程序非常受限,因此在实际开发中,我们通常会使用专业的工具来完成MBR程序的开发和调试。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值