튜토리얼 칼럼입니다. 도움이 필요한 친구들에게 도움이 되길 바랍니다!
golang에서는==
를 사용하여 두 배열이 동일한지 쉽게 확인할 수 있지만 불행히도 슬라이스에는 관련 연산자가 없습니다. 두 배열이 동일한지 확인해야 할 때. , 다른 단축키만 찾을 수 있습니다. 슬라이스 동일성의 정의==
来判断两个数组(array)是否相等,但遗憾的是slice并没有相关的运算符,当需要判断两个slice是否相等时我们只能另寻捷径了。
slice相等的定义
我们选择最常见的需求,也就是当两个slice的类型和长度相同,且相等下标的值也是相等的,比如:
a := []int{1, 2, 3}b := []int{1, 2, 3}c := []int{1, 2}d := []int{1, 3, 2}
上述代码中a
和b
是相等的,c
因为长度和a
不同所以不相等,d
因为元素的排列顺序和a
不同所以也不相等。
判断两个[]byte是否相等
为什么要单独将[]byte列举出来呢?
因为标准库提供了优化的比较方案,不再需要我们造轮子了:
package mainimport ( "bytes" "fmt")func main() { a := []byte{0, 1, 3, 2} b := []byte{0, 1, 3, 2} c := []byte{1, 1, 3, 2} fmt.Println(bytes.Equal(a, b)) fmt.Println(bytes.Equal(a, c))}
使用reflect判断slice(数组)是否相等
在判断类型不是[]byte的slice时,我们还可以借助reflect.DeepEqual
두 개의 []바이트가 같은지 확인하세요왜 []바이트를 별도로 나열해야 하나요? 표준 라이브러리는 최적화된 비교 방식을 제공하므로 더 이상 수레바퀴를 다시 만들 필요가 없습니다.func DeepEqual(x, y interface{}) bool
위 코드의 a
와b
는 같고,c
는a와 길이가 다르기 때문에 같지 않습니다. code>와 <code>d
는 요소의 배열 순서가a
와 다르기 때문에 동일하지 않습니다.
package mainimport (
"fmt"
"reflect")func main() {
a := []int{1, 2, 3, 4}
b := []int{1, 3, 2, 4}
c := []int{1, 2, 3, 4}
fmt.Println(reflect.DeepEqual(a, b))
fmt.Println(reflect.DeepEqual(a, c))}
reflect를 사용하여 슬라이스(배열)가 동일한지 확인합니다.유형이 []바이트가 아닌 슬라이스를 판단할 때, 또한 reflect.DeepEqual
를 사용하면 포함된 요소를 포함하여 두 개체를 심층 비교하여 동일한지 확인하는 데 사용됩니다.
func testEq(a, b []int) bool { // If one is nil, the other must also be nil. if (a == nil) != (b == nil) { return false; } if len(a) != len(b) { return false } for i := range a { if a[i] != b[i] { return false } } return true}🎜DeepEqual은 x와 y가 "완전히 동일한지 보고합니다." ,”는 다음과 같은 경우 중 하나에 해당하는 경우 동일한 유형의 두 값이 완전히 동일하다고 정의됩니다.🎜… true: 둘 다 nil이거나 둘 다 nil이 아니며, 길이가 같고, 동일한 기본 배열의 동일한 초기 항목(즉, &x[0] == &y[0])을 가리키거나 해당 요소(길이까지)는 완전히 동일합니다. nil이 아닌 빈 슬라이스와 nil 슬라이스(예: []byte{} 및 []byte(nil))는 완전히 동일하지 않습니다.🎜🎜🎜의미 이 구절의 내용은 이해하기 어렵지 않으며, 이 글의 끝 부분에서 논의한 내용과 일치합니다. 처음에 논의한 슬라이스 동일성을 결정하는 방법의 원리는 동일하지만 약간의 런타임 "흑마술"을 사용합니다. ". 🎜🎜예제를 보세요: 🎜
package main import "fmt" func main() { a := []int{1, 2, 3, 4} b := []int{1, 3, 2, 4} c := []int{1, 2, 3, 4} fmt.Println(testEq(a, b)) fmt.Println(testEq(a, c))}🎜🎜🎜손으로 쓴 판단🎜🎜golang에서 Reflect를 사용하려면 일반적으로 슬라이스 유형을 결정하는 경우 성능 비용이 필요하므로 슬라이스의 동등성 판단을 직접 구현하는 것은 상대적으로 그리 어렵지 않습니다. : 🎜rrreee 🎜테스트 코드: 🎜rrreee
위 내용은 golang에서 두 조각이 동일한지 확인의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

WhentestinggocodewithInitFunctions, useExplicitSetUpFunctionsOrsParateTestOvoiddenceNInItfictionSideffects.1) useExplicitSetUpFunctoControlGlobalVariableInitialization.2) CreateSeparateTesteSpilestobySinitFunctions 및 testesten

go'serrorhandlingreturnserrorsvalues whithuseexceptions와 달리 1) Go'sMethodensuresexpliciterRorhandling, promotingrobustcodebutincreasingverbosity.2) Javaandthon'sexextionslowercodebutcodebutcodebutcanlederforlortorifneterfortorifneteriflerortorifnetrorirederiflofertorifneateRoferfortoriflogertoflortoflerortofneateRofer

AneffectiveInterfaceingoisminimal, Clear, and Promotesloosecoupling.1) Minimizetheinterfaceforflexibilityandeasofimplementation.2) usicfacesforabStractionToswapimementationswhangingCallingCode.3) DesignStabilitySUsingInterfacestomockDep

중앙 집중식 오류 처리는 GO 언어에서 코드의 가독성과 유지 가능성을 향상시킬 수 있습니다. 구현 방법 및 장점에는 다음이 포함됩니다. 1. 비즈니스 로직에서 별도의 오류 처리 로직 및 코드를 단순화합니다. 2. 중앙 처리로 오류 처리의 일관성을 확인하십시오. 3. 연기 및 복구를 사용하여 공황을 포착하고 처리하여 프로그램 견고성을 향상시킵니다.

Ingo, alternativestoinitFunctionsincustomInitializationFenctionsandsingletons.1) CustomInitializationFunctionsallowExplicitControlover wheninInitializationOccurs, lexplodElayEdorConditionalSetUps.2) SingletEntensureOne-TimeInitializationIncOncurrent

gohandlesinterfacesandtypeassertionsefectively, codeflexibleandrobustness.1) typeSertionsOncaLownallowRuntImeTypeChecking, asseengehapeInterfaceAndCircLetype.2) TypeStwitchEshandleMultipleTypesePesePesePesePesePese -pervariousShapesimplementing Gry

GO 언어 오류 처리는 오류와 오류를 통해 더욱 유연하고 읽을 수 있습니다. 1.Errors.is는 오류가 지정된 오류와 동일한 지 확인하는 데 사용되며 오류 체인의 처리에 적합합니다. 2. 오류. 오류 유형을 확인할 수있을뿐만 아니라 오류를 특정 유형으로 변환 할 수 있으며 오류 정보 추출에 편리합니다. 이러한 기능을 사용하면 오류 처리 로직을 단순화 할 수 있지만 오류 체인의 올바른 전달에주의를 기울이고 코드 복잡성을 방지하기 위해 과도한 의존성을 피하십시오.

TomakeGoApplicationSRUNFASTERONDERFISTING, 사용 프로파일 링 툴, leverageConcurrency, andManageMemoryEffice.1) usepprofforcpuandMemoryProfingToIndifyBottLenecks.2) UtizeGoroutinesandChannelStoparAllelizetAskSandimProvePercormance.3) 3)


핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

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

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

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경

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

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.