>  기사  >  백엔드 개발  >  Go는 언제 값을 반환하거나, 참조를 반환하거나, 아무것도 반환하지 않습니까?

Go는 언제 값을 반환하거나, 참조를 반환하거나, 아무것도 반환하지 않습니까?

王林
王林앞으로
2024-02-05 23:24:031024검색

Go는 언제 값을 반환하거나, 참조를 반환하거나, 아무것도 반환하지 않습니까?

질문 내용

아래 DoSomethingB 라인을 따라 "참조로 전달된" 항목을 여러 함수가 업데이트하는 코드를 작성 중입니다. 초보자로서 이것은 나에게 다소 직관적이지 않습니다. 나는 오히려 결과를 반환하는 함수를 갖고 싶습니다(메소드가 아니고 수신자를 업데이트하지 않는 한).

질문:

  1. 다음과 같은 패턴을 사용하는 데 대한 타당한 주장이 있습니까? DoSomethingB으로? DoSomethingA
  2. 입니다(구조체 메서드 아님). 이것이 Go에서 좋은 스타일이거나 허용 가능한 스타일로 간주됩니까? DoSomethingB
  3. 으아아아
플레이그라운드 링크로 이동: https://play.golang.com/p/ELwljCaWDLg


정답


물론, 질문을 세분화해 보겠습니다.

  1. DoSomethingB 대 DoSomethingA: 와 같은 패턴을 사용하면 복사본을 만들지 않고 원래 변수를 수정하여 불필요한 할당을 피하려는 경우에 유용합니다. 그러나 코드를 이해하기가 더 어려워질 수 있습니다. DoSomethingB 这样的模式会很有帮助,从而避免不必要的分配。但是,它可能会导致代码更难理解。使用 DoSomethingA(결과 반환)을 사용하는 것은 일반적으로 Go에서 더 관용적이며 가독성 때문에 선호되는 경우가 많습니다.

  2. DoSomethingB가 Go에서 좋은 스타일로 간주되나요? : 특히 대규모 데이터 구조를 다룰 때 Go에서 DoSomethingB와 같은 코드를 보는 것은 드문 일이 아니지만 Go의 관용적 접근 방식은 반환 값이 포인터를 수정하도록 권장합니다. 포인터를 사용하여 값을 직접 수정하면(특히 정수와 같은 내장 유형의 경우) 코드를 이해하기 어려울 수 있습니다.

예제 DoSomethingC는 지역 변수에 대한 포인터를 반환하므로 문법에 맞지 않는 것으로 간주됩니다. 함수가 반환된 후 메모리 위치가 다른 목적으로 재사용될 수 있으므로 정의되지 않은 동작이 발생할 수 있습니다. 이 패턴은 피하는 것이 가장 좋습니다.

요약하자면, 관용적인 Go를 따르고 싶다면 DoSomethingA 这样的模式。如果您有充分的理由修改原始数据并且担心性能(例如大型数据结构),那么 DoSomethingB 이 패턴을 선호하세요. 원본 데이터를 수정해야 할 타당한 이유가 있고 성능(예: 대규모 데이터 구조)이 걱정된다면

이 허용됩니다. 🎜

위 내용은 Go는 언제 값을 반환하거나, 참조를 반환하거나, 아무것도 반환하지 않습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제