问题:下面这段代码输出
package main
import "fmt"
type MyInt1 int
type MyInt2 = int
func main() {
var i int = 0
var i1 MyInt1 = i
var i2 MyInt2 = i
fmt.Println(i1,i2)
}}
结果:
cannot use i (type int) as type MyInt1 in assignment。
参考答案及解析:
这道题考的是类型别名与类型定义的区别。
第 5 行代码是基于类型 int 创建了新类型 MyInt1,第 6 行代码是创建了 int 的类型别名 MyInt2,注意类型别名的定义时 = 。
所以,第 10 行代码相当于是将 int 类型的变量赋值给 MyInt1 类型的变量,Go 是强类型语言,编译当然不通过;而 MyInt2 只是 int 的别名,
本质上还是 int,可以赋值。第 10 行代码的赋值可以使用强制类型转化 var i1 MyInt1 = MyInt1(i).
关于字符串连接,下面语法正确的是?
- A. str := 'abc' + '123'
- B. str := "abc" + "123"
- C. str := '123' + "abc"
- D. fmt.Sprintf("abc%d", 123)
参考答案及解析:BD。知识点:字符串连接。除了以上两种连接方式,还有 strings.Join()、buffer.WriteString()等。
package main
import "strings"
func main(){
//1
a := "hahaha"
b := "hehehe"
c := strings.Join([]string{a,b},",")
println(c)
//2
var buffer bytes.Buffer
buffer.WriteString("this")
buffer.WriteString(" is")
buffer.WriteString(" a")
buffer.WriteString(" test")
fmt.Println(buffer.String())
}
1.hahaha,hehehe
2.输出为:this is a test