I는 이동의 compress/flate
패키지를 통해 판독하고, I [1]이 코드 홀수 조각이 발견 문맥에서슬라이스의 끝을 지나서 일하는 것은 관용적입니까?
n := int32(len(list))
list = list[0 : n+1]
list[n] = maxNode()
는 list
는 후에 자세히 데이터 배열을 가리키는 것이 보증된다. 이것은 개인 함수이므로 라이브러리 외부에서 오용 될 수 없습니다.
저에게 이것은 런타임 예외가되어야하는 무서운 해킹처럼 보입니다. 예를 들어, 다음 D 코드는 오류 RangeError 생성
x := []int{1, 2, 3}
y = x[:2]
y = append(y, 4) // x is now [1, 2, 4] because of how append works
을하지만 두 솔루션은 매우 해키 것 같고 :
auto x = [1, 2, 3];
auto y = x[0 .. 2];
y = y[0 .. 3];
남용 조각 (더 안전 모양도 등) 더 간단하게 할 수있는과를 다음 무서운, 그리고 IMHO는 그들이하는 것처럼 작동해서는 안됩니다. 이런 종류의 일은 관용적 인 Go 코드로 간주됩니까? 그렇다면 위에 열거 한 것은 입니다. idiomatic? 배열을 통해 창 - [1]
http://golang.org/src/pkg/compress/flate/huffman_code.go#L136
귀하의 다른 답변도 상당히 좋습니다. 이 행동은 내가 처음 만났을 때 놀랐다 (D 예제를 보라). 호출자에 대한 가정을하기 때문에 위험한 것으로 보인다. 그래서 나는 그것을 무서운 것으로 생각한다.이 라이브러리의 전용 함수이기 때문에이 코드 스 니펫을 관용적이라고 생각하십니까? – tjameson
@tjameson 제 대답을 자세히 설명했습니다. "관용적 인"질문에, 나는이 관용적 인 것으로 생각한다. –