github.com/nozzle/golangci-lint@v1.49.0-nz3/test/testdata/exportloopref.go (about)

     1  //golangcitest:args -Eexportloopref
     2  package testdata
     3  
     4  import "fmt"
     5  
     6  func dummyFunction() {
     7  	var array [4]*int
     8  	var slice []*int
     9  	var ref *int
    10  	var str struct{ x *int }
    11  
    12  	fmt.Println("loop expecting 10, 11, 12, 13")
    13  	for i, p := range []int{10, 11, 12, 13} {
    14  		printp(&p)
    15  		slice = append(slice, &p) // want "exporting a pointer for the loop variable p"
    16  		array[i] = &p             // want "exporting a pointer for the loop variable p"
    17  		if i%2 == 0 {
    18  			ref = &p   // want "exporting a pointer for the loop variable p"
    19  			str.x = &p // want "exporting a pointer for the loop variable p"
    20  		}
    21  		var vStr struct{ x *int }
    22  		var vArray [4]*int
    23  		var v *int
    24  		if i%2 == 0 {
    25  			v = &p
    26  			vArray[1] = &p
    27  			vStr.x = &p
    28  		}
    29  		_ = v
    30  	}
    31  
    32  	fmt.Println(`slice expecting "10, 11, 12, 13" but "13, 13, 13, 13"`)
    33  	for _, p := range slice {
    34  		printp(p)
    35  	}
    36  	fmt.Println(`array expecting "10, 11, 12, 13" but "13, 13, 13, 13"`)
    37  	for _, p := range array {
    38  		printp(p)
    39  	}
    40  	fmt.Println(`captured value expecting "12" but "13"`)
    41  	printp(ref)
    42  }
    43  
    44  func printp(p *int) {
    45  	fmt.Println(*p)
    46  }