言語ループとポインタートラップ: v.name
がすべて「ブログ」である理由の詳細な説明
GO言語でfor...range
ループとポインターを使用する場合、いくつかの混乱する問題が発生しやすいです。この記事では、例を使用して、 for...range
のメカニズムとポインターの使用を深く分析し、コード出力の結果がすべて「ブログ」である理由を説明します。
次のコードスニペットは、この問題を示しています。
タイプ学生struct { 名前文字列 年齢int } func main(){ m:= make(map [string]*desudent) stus:= [] desute { {name: "pprof.cn"、age:18}、 {name: "test"、age:23}、 {name: "blog"、age:28}、 } _、stu:= range stu { M [Stu.Name] =&Stu //問題はここにあります} k、v:=範囲m { fmt.println(k、 "=>"、v.name) } }
このコードを実行すると、出力はすべて博客
になります。これは、 for...range
ループのstu
変数のすべての反復が新しい変数を作成するわけではないためです。これは、メモリアドレスがループ全体で変更されていないままのループ変数です。したがって、 &stu
常に同じメモリアドレスを指します。各反復はマップ内の値に同じアドレスを割り当て、最後にマップ内のすべてのポインターが最後のstu
変数、つまり{name: "博客", age: 28}
を指します。
回避策:変数の新しいコピーを作成します
この問題を回避するには、アドレスを直接使用するのではなく、各反復でstu
のコピーを作成する必要があります。
_、stu:= range stu { s:= stu // stu m [stu.name] =&sのコピーを作成する }
新しい変数s
を作成することにより、 m[stu.name] = &s
s
のメモリアドレスを指すようになり、 s
各反復の新しい変数になるため、ポインターが同じメモリアドレスを指す問題を解決し、最終出力は各生徒の名前を正しく反映します。
for...range
効率的で正しいGOコードを書くために重要です。この種のトラップを避けるための鍵は、ループでポインターを使用するときに、各ポインターが異なるメモリアドレスを指すことを確認することです。
以上がGO言語のループとポインターの問題:なぜV.NAME「ブログ」なのですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

go语言有缩进。在go语言中,缩进直接使用gofmt工具格式化即可(gofmt使用tab进行缩进);gofmt工具会以标准样式的缩进和垂直对齐方式对源代码进行格式化,甚至必要情况下注释也会重新格式化。

go语言叫go的原因:想表达这门语言的运行速度、开发速度、学习速度(develop)都像gopher一样快。gopher是一种生活在加拿大的小动物,go的吉祥物就是这个小动物,它的中文名叫做囊地鼠,它们最大的特点就是挖洞速度特别快,当然可能不止是挖洞啦。

是,TiDB采用go语言编写。TiDB是一个分布式NewSQL数据库;它支持水平弹性扩展、ACID事务、标准SQL、MySQL语法和MySQL协议,具有数据强一致的高可用特性。TiDB架构中的PD储存了集群的元信息,如key在哪个TiKV节点;PD还负责集群的负载均衡以及数据分片等。PD通过内嵌etcd来支持数据分布和容错;PD采用go语言编写。

go语言需要编译。Go语言是编译型的静态语言,是一门需要编译才能运行的编程语言,也就说Go语言程序在运行之前需要通过编译器生成二进制机器码(二进制的可执行文件),随后二进制文件才能在目标机器上运行。

go语言能编译。Go语言是编译型的静态语言,是一门需要编译才能运行的编程语言。对Go语言程序进行编译的命令有两种:1、“go build”命令,可以将Go语言程序代码编译成二进制的可执行文件,但该二进制文件需要手动运行;2、“go run”命令,会在编译后直接运行Go语言程序,编译过程中会产生一个临时文件,但不会生成可执行文件。

删除map元素的两种方法:1、使用delete()函数从map中删除指定键值对,语法“delete(map, 键名)”;2、重新创建一个新的map对象,可以清空map中的所有元素,语法“var mapname map[keytype]valuetype”。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

MantisBT
Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

ホットトピック



