当前位置:网站首页>Golang's range
Golang's range
2022-07-03 08:13:00 【Bel_ AMI classmate】
Golang range example
range
yes golang
A traversal method commonly used in , go C++
It's very easy for beginners to see such a traversal method . But if you haven't thought about it carefully range
How it works , Use in some specific scenarios range
, It may not achieve the desired effect .
1.1 range Basic grammar
First of all, let's take a look at range
Basic grammar of
At first golang
I feel that this language is particularly rigorous in the detection of grammar . For example, variables defined but not used will report errors .
package main
import "fmt"
func main() {
x := []string{
"a", "b", "c"}
for v := range x {
fmt.Println(v) //prints 0, 1, 2
}
for _, v := range x {
fmt.Println(v) //prints a, b, c
}
}
Obviously the first range
The return value is the index value index
, The second is the value value
. Generally, the second method is common _ ,v = range x
, use _
To discard unused values . When only one value is used to receive range
There will be no error when returning , This is very unexpected , And the index value returned at this time .
1.2 range principle
Then let's take a look range
Unexpected situation
package main
import "fmt"
type student struct {
Name string
Age int
}
func main() {
m := make(map[string]*student)
stus := []student{
{
Name: "zhou", Age: 24},
{
Name: "li", Age: 23},
{
Name: "wang", Age: 22},
}
for _, stu := range stus {
m[stu.Name] = &stu
}
for k, v := range m {
fmt.Println(k, "=>", v.Name)
}
}
// The output is as follows , Because traversing map,index As the key ,value by map Corresponding value in , Each traversal is unordered
/* li => wang wang => wang zhou => wang */
But for the first time , You will find that this is different from the expected output . Whole map
All real values in are wang. Why is that so ?
Then we try to output the following code
fmt.Println(m)
// At this time, the output content is as follows
//map[zhou:0xc000046400 li:0xc000046400 wang:0xc000046400]
We will find that map[string]*student
Medium *student
The final stored values are the same . The reasons are as follows :range
It uses a copy of repeated assignment to traverse each target element , You can think of it as a variable of the target element type , Each iteration will copy the target element to range
Prepared copy , And return .
Revised edition :
for k, stu := range stus {
fmt.Println(stu.Name, "=>", &stu)
m[stus[k].Name] = &stus[k]
}
for k,v:=range m{
println(k,"=>",v.Name)
}
perhaps
for i:=0;i<len(stus);i++ {
m[stus[i].Name] = &stus[i]
}
for k,v:=range m{
println(k,"=>",v.Name)
}
Here are two range
Nested usage instances :
// setReqBodyLog Requested body The data falls into the log
func setReqBodyLog(ctx context.Context, req *http.Request) {
formMap := map[string]string{
}
for k, v := range req.PostForm {
for _, formV := range v {
if formMap[k] == "" {
formMap[k] = desensitization.RemoveSensetive(formV)
} else {
formMap[k] += "," + desensitization.RemoveSensetive(formV)
}
}
}
logit.ReplaceMetaFields(ctx, logit.AutoField(transmitEntities.LogReqBody, formMap))
}
边栏推荐
- Basic operation and process control 2
- 2020-12-12
- [end of 2021] National Meteorological Short Video (Kwai, Tiktok) influence list in December
- Yolo series --- xml2txt script
- Maxcompute string splitting function -split_ PART
- P1896 [SCOI2005] 互不侵犯(状压dp)
- Flex flexible box layout
- 超限黑客认知
- Uniapp learning records
- idea取消引用顯示效果
猜你喜欢
[cocos creator] Click the button to switch the interface
Un système de gestion de centre commercial pour la conception de cours de technologie d'application de base de données
Transfinite hacker cognition
What is a data type? What is the use of data types?
[global product discovery 2] the first pure cloud augmented reality (AR) platform - Israel
Unity2019_ Natural ambient light_ Sky box
WorldView卫星遥感影像数据/米级分辨率遥感影像
Youyou1 of xlua knapsack system
An intern's journey to cnosdb
L'installateur a été installé avec une erreur inattendue
随机推荐
Wechat native applet cloud development learning record 01
Register keyword
The difference between hdmi2.1 and hdmi2.0 and the conversion of PD signals.
Are you still watching the weather forecast on TV?
*p++、*++p、++*p、(*p)++
Initial unity
Luaframwrok handles resource updates
Editor Extensions
jsutlis
Golang json格式和结构体相互转换
C language - Introduction - essence Edition - take you into programming (I)
haproxy+keepalived搭建01
2020-12-12
Zohocrm deluge function application time verification
Idea dereference display effect
What is a data type? What is the use of data types?
Lua framwrok framework starts
Viz artist advanced script video tutorial -- stringmap use and vertex operation
Golang 时间格式整理
idea取消引用显示效果