题目1

1.通过指针变量 p 访问其成员变量 name,有哪几种方式?

A.p.name

B.(&p).name

C.(*p).name

D.p->name

答案是A,C 这里是一个非常基础的知识点:& 是取址运算符,* 是指针引用

下面代码是否可以编译通过

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)
}

答案是不能编译通过

这里复习的知识点是:

type MyInt1 int 这行代码表示我们基于int创建了一个新类型MyInt1

type MyInt2 = int 这样代码表示我们创建了int的类型别名MyInt2

所以当我们 var i1 MyInt1 = i 去赋值的时候其实是不能通过的,因为Go是强类型语言,两者是不同的类型 而MyInt2只是int的别名,本质上还是int,所以是可以赋值

题目 2

关于字符串连接,下面语法正确的是?

A. str := ‘abc’ + ‘123’ B. str := “abc” + “123” C. str := ‘123’ + “abc” D. fmt.Sprintf(“abc%d”, 123)

这个是关于字符串的拼接,很明显 B,D

看下面这个题目是否可以编译通过,以及结果是什么,考察关于iota

package main

import "fmt"

/*
iota是golang语言的常量计数器,只能在常量的表达式中使用。
iota在const关键字出现时将被重置为0(const内部的第一行之前),const中每新增一行常量声明将使iota计数一次(iota可理解为const语句块中的行索引)。


如果想要跳过一些指可以用 _

更多详细的用法可以看:https://www.cnblogs.com/zsy/p/5370052.html


 */

const (
    x = iota
    _
    y
    z = "zz"
    k
    p = iota
    q   // 这里会接着最开始的iota继续累加,所以这里的q的值为 6
)

func main() {
    fmt.Println(x,y,z,k,p,q)
}

更多详细的用法可以看:https://www.cnblogs.com/zsy/p/5370052.html