您的位置 首页 golang

Go学习每日一问(8)-string&nil

每次学习并整理一个Golang的知识点,每天进步一点点。今天学习下字符串连接和nil的知识点。

代码片段

观察如下代码片段,写出你认为的正确答案?

  1. 关于字符串连接,下面语法正确的是:()
    1. str := ‘abc’ + ‘123’
    2. str := “abc” + “123”
    3. str := ‘123’ + “abc”
    4. fmt.Sprintf(“abc%d”, 123)
  1. 下面赋值正确的是:()
    1. var x = nil
    2. var x interface{} = nil
    3. var x string = nil
    4. var x error = nil

思考后看答案…


答疑解惑

参考答案:

1.bd

在Go中,用双引号来表示字符串。单引号、双引号和反引号的区别如下:

  • 单引号 表示rune类型,rune 等同于int32;且单引号只能包含一个字符,例如’a’,程序会输出97表示字符a的ascii码。
  • 双引号 用来表示字符串string,其实质是一个byte类型的数组;
  • 反引号 用来创建原生的字符串字面量,它可以由多行组成,但不支持任何转义序列;

a选项中,单引号中包含多个字符,会提示报错: Invalid character literal (more than one character);

c选项中,把两个不同类型的变量进行拼接时,就会报错。

d选项,是正确的字符串连接。除了以上两种连接方式,还有strings.Join()、buffer.WriteString()等。

2.bd

知识点:nil 值。nil只能赋值给指针、chan、func、interface、map或slice 类型的变量。d选项的error类型,是一种内置接口类型,也是正确的。

你做对了吗?

其他相关答案,欢迎在评论区留言补充!

拓展阅读

使用原始字符串字面值,避免转义

Go 支持使用原始字符串字面值,也就是**反引号(” ` “)*来表示原生字符串,在需要转义的场景下,我们可以使用这种方案来替换。

可以跨越多行并包含引号。使用这些字符串可以避免更难阅读的手工转义的字符串。例如 下面示例2的写法优于示例1

示例1:

 egStr := "hello world:\"golang\""  

示例2:

 egStr := `hello world:"golang"`  

字符串拼接–builder 拼接

为了改进buffer拼接的性能,从go 1.10 版本开始,增加了一个builder类型,用于提升字符串拼接的性能。它的使用和buffer几乎一样。

 var s = "abcd"
var s1 = "efgh"
b := strings.Builder{}
b.WriteString(s)
b.WriteString(",")
b.WriteString(s1)
s2 := b.String()
fmt.Println("s2是:", s2)  

输出结果:s2是: abcd,efgh

下期提问

  1. (多选)关于init函数,下面说法正确的是()
  • A. 一个包中,可以包含多个 init 函数;
  • B. 程序编译时,先执行依赖包的 init 函数,再执行 main 包内的 init 函数;
  • C. main 包中,不能有 init 函数;
  • D. init 函数可以被其他函数调用;

2.观察下面代码片段,判断能否编译通过?如果可以,写出输出结果?

 package main

func getValue() int {
return 1
}

func main() {
i := getValue()
switch i.(type) {
case int:
println("int")
case string:
println("string")
case interface{}:
println("interface")
default:
println("unknown")
}
}  

答案及解析将在下期文章中给出,欢迎大家在评论区留言,独乐乐不如众乐乐,交流学习,互相进步。

欢迎转发和评论。更多优质原创文章,欢迎关注微信公众号“IYue爱月”。

文章来源:智云一二三科技

文章标题:Go学习每日一问(8)-string&nil

文章地址:https://www.zhihuclub.com/100509.shtml

关于作者: 智云科技

热门文章

网站地图