홈>
이 코드 :
import "fmt"
import "time"
func main() {
string_slice:=[]string{"a","b","c"}
for _,s:=range string_slice{
go func(){
time.Sleep(1*time.Second)
fmt.Println(s)
}()
}
time.Sleep(3*time.Second)
}
이 코드는 다음과 같이 출력 "c c c"를 생성합니다 :
import "fmt"
func main() {
string_slice:=[]string{"a","b","c"}
for _,s:=range string_slice{
s="asd"
fmt.Println(s)
}
fmt.Println(string_slice)
}
"[a b c]"출력을 생성합니다
첫 번째는 범위에 대해 참조를 반복하지 말아야하며 (그렇지 않아야 함) 두 번째는 값을 반복하여 반복해야 함을 제안합니다.
첫 번째 출력이 "a b c"출력을 생성하지 않는 이유는 무엇입니까?
- 답변 # 1
관련 자료
- rust - 슬라이스를 바이트 문자열 리터럴과 어떻게 비교할 수 있습니까?
- sorting - 문자열 조각 정렬 - 알파벳순 * 뒤 * 내림차순 문자
- javascript - 나는 슬라이스하고 나머지 문자열을 얻고 싶습니다
- ios - swift - 문자열을 문자열의 단어 및 범위 목록으로 변환
- sql - 숫자가 문자열 범위에 있는지 확인
- Python에서 문자열 인덱스가 범위를 벗어난 문제를 해결하는 방법
- Get String from Substring at a particular range - 특정 범위의 하위 문자열에서 문자열 가져 오기 - ios swift
- 왜 <=는 파이썬에서 문자열의 문자 범위를 평가합니까?
- go - 슬라이스가 범위를 벗어난 경우
- rust - usize 대신 문자열 슬라이스를 반환하면 문자열이 변경되지 않는 이유는 무엇입니까?
고 루틴을 사용할 때는 병렬로 실행한다고 가정해야합니다. 따라서이 경우 'c c c'가 너무 'b b b'또는 'a a a'로 나타날 수 있습니다
이 코드의 3 번 실행 :
이 코드를 3 번 달리기 위해전송합니다 :
예를 들어, t2에서 func ()가 실행되기 시작할 수 있습니다. 이 경우s이 최신 값 (string_slice [2])과 같기 때문에 결과는 'c c c'입니다.이 솔루션은 func params에 의한 복사 가치입니다 :
반복마다 새로운 가치 창출
https://play.golang.org/p/uRD6Qy6xSw 작업 참조