Both of your examples has data race issue. You can find out data race in following ways.
go run -race program.go
-
go test -race <package-name>
or go test -race -run=<testcase-func-name>
-
go build -race program.go
then execute the program
-
go install -race <package-name>
then execute the program
Example 1: data race info
$ go build -race datarace-try1.go
$ ./datarace-try1
8
==================
WARNING: DATA RACE
Read at 0x00c4200761a8 by goroutine 7:
main.main.func1()
/Users/jeeva/go_playground/datarace-try1.go:23 +0x74
Previous write at 0x00c4200761a8 by goroutine 6:
main.main.func1()
/Users/jeeva/go_playground/datarace-try1.go:23 +0x8d
Goroutine 7 (running) created at:
main.main()
/Users/jeeva/go_playground/datarace-try1.go:25 +0xee
Goroutine 6 (running) created at:
main.main()
/Users/jeeva/go_playground/datarace-try1.go:25 +0xee
==================
187410
Found 1 data race(s)
Example 2: data race info
$ go build -race datarace-try2.go
$ ./datarace-try2
==================
WARNING: DATA RACE
Read at 0x00c420078178 by main goroutine:
main.main()
/Users/jeeva/go_playground/datarace-try2.go:10 +0x12e
Previous write at 0x00c420078178 by goroutine 6:
main.main.func1()
/Users/jeeva/go_playground/datarace-try2.go:15 +0xd4
Goroutine 6 (finished) created at:
main.main()
/Users/jeeva/go_playground/datarace-try2.go:17 +0xf1
==================
==================
WARNING: DATA RACE
Read at 0x00c420078178 by goroutine 7:
main.main.func2()
/Users/jeeva/go_playground/datarace-try2.go:20 +0x3f
Previous write at 0x00c420078178 by goroutine 6:
main.main.func1()
/Users/jeeva/go_playground/datarace-try2.go:15 +0xd4
Goroutine 7 (running) created at:
main.main()
/Users/jeeva/go_playground/datarace-try2.go:23 +0x11d
Goroutine 6 (finished) created at:
main.main()
/Users/jeeva/go_playground/datarace-try2.go:17 +0xf1
==================
finish
Found 2 data race(s)
exit status 66