V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Vegetable
V2EX  ›  问与答

一个 GO 面试题

  •  
  •   Vegetable · 2021-08-05 17:33:08 +08:00 · 1222 次点击
    这是一个创建于 1230 天前的主题,其中的信息可能已经有所发展或是发生改变。

    今天遇到一个面试题,当时我就有点懵

    package main
    
    import "log"
    
    func main() {
    	a := []byte{'.'} 
    	log.Println(a)
    	str := "."
    	log.Println([]byte(str))
            //这里确认都是 slice,没有 array
    }
    

    问:这两个输出结果是不是一致的,为什么?

    我当时心里有点懵逼,认真想了很久,完全没 get 到,什么 array slice 一顿回忆,确定 println 一个 slice 和底层的 array 应该没关系,但是后边这个为什么,怎么感觉就是想让我回答不一致呢?

    最后我写了:不知道,我认为一致

    我回来之后试了一下,两次的确输出的都是[46]。现在我怀疑我哪里看错了吗?这题目究竟是啥意思,给我都整不自信了都

    6 条回复    2021-08-06 10:27:50 +08:00
    sadfQED2
        1
    sadfQED2  
       2021-08-05 18:12:58 +08:00 via Android
    单引号和双引号数据类型不一样造成的?
    lysS
        2
    lysS  
       2021-08-05 20:17:24 +08:00
    就是一致的啊
    这里有个考点是单引号的是 rune(int32)类型;但无论是 rune 还是 byte(uint8)它两的值都是一样的
    thinkingbullet
        3
    thinkingbullet  
       2021-08-05 20:49:10 +08:00
    @lysS byte 不是 uint8 的别名吗 rune 是 int32 的别名 难道是我搞错了?
    BeautifulSoap
        4
    BeautifulSoap  
       2021-08-05 21:01:43 +08:00
    试了下,即便是 go 刚发布时的版本,两个的输出也都是一致的。所以要么是出题出错了,要么是 lz 题目的代码哪个细节记错或看错了
    djoiwhud
        5
    djoiwhud  
       2021-08-05 21:38:36 +08:00 via Android
    我猜测面试官是 c/cpp 转 go 的。c/cpp 里面的字符串要处理\0 的结束符。和数组有点差异。

    五六年没写 cpp 了,回这个问题也心虚。就当参考吧。
    cloudfstrife
        6
    cloudfstrife  
       2021-08-06 10:27:50 +08:00   ❤️ 1
    ```
    package main

    import (
    "fmt"
    "log"
    "reflect"
    )

    func main() {
    a := []byte{'.'}
    log.Println(a)
    str := "."
    log.Println([]byte(str))
    //这里确认都是 slice,没有 array
    b := []byte(str)
    fmt.Println(reflect.DeepEqual(a, b))
    }
    ```

    执行输出

    ```
    2021/08/06 10:26:12 [46]
    2021/08/06 10:26:12 [46]
    true
    ```
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3584 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 04:28 · PVG 12:28 · LAX 20:28 · JFK 23:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.