패키지 본체 오기 ( "FMT" ) / * 전사 값 [형태 개의 파라미터의 함수 [실제 파라미터 값 복사 모든 변형 어드레스의 내용이 외부의 실제 파라미터와 무관 하며, 모든 파라미터로서 기본 데이터 형식 값으로 전달된다 * / FUNC ChangeBaseValue (V의 INT) { fmt.Printf ( '주 : 어드레스 = V P % \ N- ", 브이) V * = 2 개 모든 로컬 변수 때 함수 반환 (형식 매개 본원 V 함유) // 발표 된 } / * 참조 (어드레스 전송) 패스 기록 [형태 파라미터의 함수이다 [실제 파라미터 해결 직접 실제 파라미터 변경 외부 어드레스 콘텐츠의 모든 변경 * / FUNC ChangeBaseValuePtr (V * 지능 ) { fmt.Printf ( "주 : 주소 = V 피 % \ N-", V) * V = 2 * } 형 구조체 {인격 나이 INT는 } / * 전송 구조의 값 파라미터 (P)의 형태는 실제 파라미터 zhangsan의 값이 사본 페이지의 아무것도의 zhangsan을 할 필요가 없습니다 미치는 영향 쪽 함수 생성 함수의 실행되는 동안 로컬 변수가 해제 완료이다 * / FUNC ChangeObjectValue (는 Person P) { fmt.Printf ( "ChangeObjectValue %의 p = P 주소 \ N- '& P) p.Age * = 2 // 모든 로컬 변수 (가 파라미터가 여기에 포함 된 함수의 복귀 V) 발표 된 } / * 기준 구조체 (전송 주소)를 통과 하는 기록 파라미터 (P)의 형태를 zhansan 실제 파라미터 어드레스 메모리 페이지의 내용이 zhangsan 수정 직접 변형되어 있도록 P가 생성되는 실행되는 함수의 로컬 변수, 함수는 최종 해제 * / FUNC ChangeObjectValuePtr (인격 * P) { fmt.Printf을 ( "ChangeObjectValue %의 P = P 주소 \ N- 'P) p.Age * = 2 개 모든 로컬 변수 // 함수 반환 (매개 변수의 형태로 여기에서 V 포함하는) 공개 하였다 } / * 파라미터로 배열 : 값 송신 기존 콘텐츠 / 요소 참조로 전달된다 슬라이스와 매핑 * / {FUNC ChangeContainerValue (INT 어레이 슬라이스 [] INT, MMAP 맵 [문자열] INT [3.]) fmt.Printf ( "ChangeContainerValue : 어레이 [0] 어드레스 P = % \ N- ', 어레이 [0]) fmt.Printf ("ChangeContainerValue : 슬라이스 [0] 어드레스 P = % \ N- ", 슬라이스 [0]) FMT. 의 printf ( "ChangeContainerValue :지도 주소 = % P \ N-"MMAP) 어레이 [0] = 100 슬라이스 [0] = 200이다 MMAP [ "상사"] = 300 } FUNC ChangeContainerValuePtr (배열 *. 3 INT 슬라이스 * ] INT, MMAP * 맵 [문자열] INT) { (* 배열) [0] = 100 (* 조각) [0] = 200 (* MMAP) "상사"] = 300 * 슬라이스 = 추가] (* 조각 ,. 4 ) (* MMAP)은 = 4 "네번째 순위"] } / * 변속기의 기본 유형의 가치 기준에 의해 전달 * / FUNC의 main021 () { var에 A = 10 "A = 어드레스 P % \ N- 메인"fmt.Printf ( , & A) ChangeBaseValue (A) FMT.의 printf ( "메인하십시오 주소 = % P \ n", a) fmt.Println (A) fmt.Printf ( "주 :주소 = % P \ n "을 맵핑 MMAP) ChangeBaseValuePtr (A) fmt.Printf ( '주 :주소 = % 포인트 \ n ", a) fmt.Println (a) } / * 기준값 전송 및 전달 구조 * / FUNC의 main022 () { zhangsan는 = {인격 나이 : 10} fmt.Printf은 (, zhangsan "메인 zhangsan 어드레스 P는 % \ N- =") // ChangeObjectValue (zhangsan ) ChangeObjectValuePtr (zhangsan) fmt.Println (zhangsan.Age) } FUNC 주 () { VAR 배열 = [3.] {1,2,3} INT 슬라이스 : 메이크 = ([] INT, 0) 슬라이스 추가] = (조각, . 1,2 ,. 3) MMAP = 메이크 (맵 [문자열] INT) MMAP [ "상사"] = 1. MMAP [ "딕"] = 2 MMAP [ "막내"] = 3. fmt.Printf ( '주 : 어레이 [0] 어드레스 P = % \ N- ', 어레이 [0]) fmt.Printf ('주 : 슬라이스 [0] 어드레스 P = % \ N- ", 슬라이스 [0])MMAP) ChangeContainerValuePtr (배열, 슬라이스, MMAP) // ChangeContainerValue (어레이 슬라이스 MMAP) fmt.Println (배열) fmt.Println (슬라이스) fmt.Println (MMAP) }
출력 :
주 : 어레이 [0] = 주소 0xc0000102e0 주 : 슬라이스 [0] = 주소 0xc000010300 주 :지도 0xc000062240 주소 = [3 2 100] [2 (200)는 3 4] 맵 [보스 : 제 아이 300 : 2 막내 : 제 3 4]