登录
首页 >  Golang >  Go问答

golang中字符串指针在范围循环中的行为为什么会令人感到困惑?

来源:stackoverflow

时间:2024-03-05 22:42:29 334浏览 收藏

Golang小白一枚,正在不断学习积累知识,现将学习到的知识记录一下,也是将我的所得分享给大家!而今天这篇文章《golang中字符串指针在范围循环中的行为为什么会令人感到困惑?》带大家来了解一下##content_title##,希望对大家的知识积累有所帮助,从而弥补自己的不足,助力实战开发!


问题内容

使用此代码:https://play.golang.org/p/tcm1w-k-6ob

此代码将打印:[c c c],但 [a b c] 除外。

type A struct {
    a *string
}

func f() {
    slist := []string{"a", "b", "c"}
    list := make([]*A, len(slist))
    for i, v := range slist {
        item := &A{
            a: &v,
        }
        list[i] = item
    }
    fmt.Printf("[%s %s %s]", *list[0].a, *list[1].a, *list[2].a)
}

func main() {
    f()
}

为什么列表不是 ["a", "b", "c"]?范围或 &string 发生了什么?


解决方案


https://play.golang.org/p/utJrUmxeqfh

package main

import (
    "fmt"
)

func main() {
    foo := []int{1, 2, 3}
    for _, f := range foo {
        fmt.printf("value is %d, addr is %p \n", f, &f)
    }
    fmt.println("hello, playground")
}
value is 1, addr is 0x414020 
value is 2, addr is 0x414020 
value is 3, addr is 0x414020 
Hello, playground

range 中的值 f 具有相同的地址

理论要掌握,实操不能落!以上关于《golang中字符串指针在范围循环中的行为为什么会令人感到困惑?》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>