예제 제네릭으로 가십시오
Go Generics는 1.18 이후 지원되며 유형-안전에 대한 일반 코드를 작성하는 데 사용됩니다. 1. 일반 함수 printslice [t [] t)는 [] int 또는 [] 문자열과 같은 모든 유형의 슬라이스를 인쇄 할 수 있습니다. 2. 유형 제한 조건 번호를 통해 int 및 float와 같은 숫자 유형으로 한계를두고 합계 [t 숫자] (slice [] t) t 안전한 요약을 구현하십시오. 3. 일반 구조 유형 상자 [t] 구조물 {value t}는 모든 유형 값을 캡슐화하고 Newbox [t] (v t) *box [t] 생성자와 함께 사용할 수 있습니다. 4. 메소드에서 [t]를 반복적으로 선언하지 않고 세트 (v t)를 추가하고 [t]를 상자에 넣습니다. 5. 다형 유형 매개 변수 함수는 value [k 비교 가능, v any] (m 맵 [k] v, value v) bool을 포함합니다. bool 맵에 특정 값이 있는지 여부를 결정하고 K를 비교해야합니다. 6. 일반 캐시 유형 캐시 [k 비교 가능, v any] struct {data map [k] v}와 같은 실제 응용 프로그램은 유형-안전 키 값 저장소를 구현하기위한 세트 및 GET 작업을 제공합니다. 제네릭은 유형 매개 변수, 제약 및 노조 유형을 통한 코드 재사용 성 및 보안을 향상 시키며 구문은 간결하고 실용적입니다.
GO 1.18 이후 공식적으로 지원되었으며,이를 통해 여러 유형을 처리 할 수있는 일반적인 기능 및 데이터 구조를 작성할 수 있습니다. 다음은 실제로 제네릭을 사용하는 방법을 빠르게 이해하는 데 도움이되는 몇 가지 일반적인 GO 일반 예제 입니다.

✅ 1. 일반 기능 : PrintSlice[T any]
[]int
및 []string
같은 모든 유형의 슬라이스 내용을 인쇄하려면 일반적인 기능을 작성할 수 있습니다.
func printslice [t any] (s [] t) { _, v : = 범위 s { fmt.print (v, "") } fmt.println () } // 예제 printslice ([] int {1, 2, 3}) // 출력 : 1 2 3 printslice ([] string { "a", "b"}) // 출력 : ab
-
[T any]
유형 파라미터T
가 모든 유형 일 수 있음을 의미합니다. -
any
interface{}
에 대한 별칭이며 제약 조건이 없습니다.
✅ 2. 일반 함수 : 유형 제약 조건 (제약)
숫자 유형 만 허용되는 유형을 제한하려면 제약 조건을 정의 할 수 있습니다.

유형 번호 인터페이스 { int | int32 | int64 | float32 | 플로트 64 } func sum [t number] (slice [] t) t { var 총 t _, v : = 범위 슬라이스 { 총 = v } 반품 합계 } // fmt.println을 사용합니다 (sum ([] int {1, 2, 3})) // 6 fmt.println (sum ([]] float64 {1.1, 2.2}) // 3.3
-
Number
는|
사용하는 인터페이스 유형입니다 Union 유형 (Union)을 나타내려면, 제한T
나열된 유형 중 하나 여야합니다. - 이것은 당신이
string
이나struct
등을 통과하지 못하게합니다.
✅ 3. 일반 구조
모든 유형의 값을 보유 할 수있는 공통 Box
컨테이너를 정의하십시오.
유형 상자 [t anye] struct { 가치 t } func newbox [t any] (v t) *box [t] { return & box [t] {value : v} } // intbox 사용 : = newbox (42) strbox : = newbox ( "Hello") fmt.println (intbox.value) // 42 fmt.println (strbox.value) // 안녕하세요
-
Box[T]
는 일반적인 구조입니다. -
NewBox
유형을 자동으로 추론하는 일반적인 생성자입니다.
✅ 4. 일반 방법
일반 구조에 메소드 추가 :

func (b *box [t]) set (v t) { B. 값 = v } func (b *box [t]) get () t { B. 값을 반환합니다 } // 상자 사용 : = Newbox (100) Box.Set (200) fmt.println (box.get ()) // 200
메소드 자체는 이미 Box[T]
에 속하기 때문에 [T]
선언 할 필요가 없습니다.
✅ 5. 제네릭 및 맵 : 키 값을 찾으십시오
맵에 값이 존재하는지 찾기 위해 일반 기능을 작성하십시오.
FUNC는 Value [k 비교 가능, V an] (m 맵 [k] v, value v) bool { _, v : = 범위 m { V == value {If value { 진실을 반환하십시오 } } 거짓을 반환하십시오 } // m : = map [string] int { "a": 1, "b": 2} 사용 fmt.println (containSvalue (m, 2)) // true fmt.println (containSvalue (m, 3)) // false
-
K comparable
: 핵심 유형은 비교할 수 있어야합니다 (예 : 문자열, int, struct 등). -
V any
: 값은 모든 유형 일 수 있습니다. - 다중 유형 매개 변수는 쉼표로 분리됩니다.
✅ 6. 실제 응용 시나리오 : 일반 캐시
제네릭을 사용하여 간단한 캐시 구조를 구현할 수 있습니다.
캐시 입력 [k 비슷한, v any] struct { 데이터 맵 [k] v } func newCache [k 비슷한, v any] () *캐시 [k, v] { return & cache [k, v] { 데이터 : make (map [k] v), } } func (c *cache [k, v]) set (key k, value v) { c.data [key] = 값 } func (c *캐시 [k, v]) get (key k) (v, bool) { v, ok : = c.data [키] 반환 v, OK }
사용:
캐시 : = NewCache [String, int] () cache.set ( "사용자", 100) val, ok : = cache.get ( "사용자"); 좋아요 { fmt.println ( "count :", val) }
요약 : 제네릭의 핵심 사항
- 유형 매개 변수를 정의하려면
[T any]
또는[T Constraint]
사용하십시오. -
comparable
것은 비슷한 유형 (지도 키, == 판단 등)에 대한 사전 정의 된 제약 조건입니다. - Union 유형 (
|
)은 유형 컬렉션을 제한 할 수 있습니다. - 제네릭은 기능과 구조를보다 일반, 유형-안전하고 중복 코드를 줄입니다.
기본적으로 그게 다야. Go Generics는 복잡성을 추구하지 않지만 실용성과 명확성을 강조합니다. 처음 사용하면 문법이 약간 새롭다고 느끼지만 몇 가지 예를 작성한 후에는 자연스럽게 느껴질 것입니다.
위 내용은 예제 제네릭으로 가십시오의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undress AI Tool
무료로 이미지를 벗다

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

로그백 또는 log4J2와 결합 된 SLF4J를 사용하는 것은 Java 응용 프로그램에서 로그를 구성하는 권장 방법입니다. 해당 Maven 의존성을 추가하여 API 및 구현 라이브러리를 소개합니다. 2. 코드에서 SLF4J의 LoggerFactory를 통해 로거를 가져오고 매개 변수화 된 로깅 방법을 사용하여 분리되고 효율적인 로그 코드를 작성하십시오. 3. 로그 출력 형식, 레벨, 대상 (콘솔, 파일) 및 패키지 레벨 로그 컨트롤을 logback.xml 또는 log4j2.xml 구성 파일을 정의합니다. 4. 선택적으로 구성 파일 스캔 기능을 활성화하여 로그 레벨의 동적 조정을 달성하고 SpringBoot도 액추에이터 엔드 포인트를 통해 관리 할 수도 있습니다. 5. 모범 사례를 포함하여

repay yourApplicationBenorgradletobuildajarorwarfile, 외부화 공기

castorenablesxml-to-javaobjectmappingViAdventionSorxclationSpollicitMappingFiles; 1) definejavaclasseswithgetters/setters; 2) useUnmarshallertoconvertxmltoobjects; 3) USEMARSHALLERTOSERIAZEOBJECTSBACKTOXML;

@serverendpoint를 사용하여 경로를 정의하고 @onopen, @onmessage, @onclose 및 @onerror를 통해 연결, 메시지 수신, 닫기 및 오류를 처리하기 위해 WebSocket 서버 엔드 포인트를 작성하십시오. 2. 배포 중에 Javax.websocket-API 종속성이 도입되어 컨테이너에 의해 자동으로 등록되어 있는지 확인하십시오. 3. Java 클라이언트는 ContainerProvider를 통해 WebSocketContainer를 얻고 ConnectToServer를 호출하여 서버에 연결하고 @ClientendPoint 주석 클래스를 사용하여 메시지를 수신합니다. 4. 세션 getbasicre를 사용하십시오

theassertkeywordinjavaisubseedtovalidateassumptions developments.2

"EnableFillHandleAndCellDrag and-Drop"Infile> 옵션> 고급; 2.CorrectLySmallSquareattheBottom-righteSelectedCell-THEBLACKPLUSTOROR, NOTTHEWHITERROW;

설계 패턴은 Java에서 일반적인 설계 문제를 해결하고 코드의 유지 관리 및 확장 성을 향상시키는 데 사용됩니다. 우선, 우리는 세 가지 범주를 이해해야합니다. 1. 제작 패턴 (예 : Singleton, FactoryMethod, AbstractFactory, Builder, Prototype) 객체 생성을 처리합니다. 2. 구조 패턴 (어댑터, 데코레이터, 정면, 복합재, 프록시) 등급과 물체의 조합에 중점을 둡니다. 3. 행동 패턴 (예 : 관찰자, 전략, 명령, 상태 및 템플릿 예)에는 객체 간의 의사 소통 및 책임 할당이 포함됩니다.

phpmyadmin을 효과적으로 보호하려면 여러 계층의 보안 조치를 취해야합니다. 1. IP를 통한 액세스 제한, 신뢰할 수있는 IP 연결 만 허용됩니다. 2. 기본 URL 경로를 추측하기 쉽지 않은 이름으로 수정하십시오. 3. 강력한 비밀번호를 사용하고 최소화 된 권한을 가진 전용 MySQL 사용자를 만듭니다. 2 단계 인증을 활성화하는 것이 좋습니다. 4. Phpmyadmin 버전을 유지하여 알려진 취약점을 수정하십시오. 5. 웹 서버 및 PHP 구성을 강화하고 위험한 기능을 비활성화하며 파일 실행을 제한합니다. 6. 자격 증명 누출을 방지하기 위해 HTTPS가 통신을 암호화하도록 강제; 7. 사용하지 않을 때 phpmyadmin을 비활성화하거나 HTTP 기본 인증을 증가시킵니다. 8. 정기적으로 로그를 모니터링하고 FAIL2BAN을 구성하여 무차별 힘 균열을 방어합니다. 9. 설정 삭제 및
