이동 중에 골프 팁


25

Go에서 골프를 즐기기위한 일반적인 팁은 무엇입니까? 저는 Code Golfing을 처음 사용하고 일반적으로 Go에 다소 특정한 코드 골프 문제에 적용될 수있는 아이디어를 찾고 있습니다.

답변 당 하나의 팁을 유지하십시오.


3
우리는 Go태그 를 만들고 싶을지도 모르지만, Go는 골프를 위해 여기에서도 사용되고 있습니까?
Optimizer

@ 옵티 마이저 (Optimizer)
고양이

3
제목을 "골프 팁"으로 바꾸어야합니다
Uriel

답변:


12

@EMBLEM의 답변 에서 영감을 얻었 습니다 .

패키지를 가져올 때 패키지의 함수를 전역 네임 스페이스에 넣을 수 있습니다.

package main

import ."fmt"

func main() {
    Printf("Hello World!")
}

9

패키지를 가져올 때 원하는대로 이름을 지정할 수 있습니다.

package main

import f "fmt"

func main() {
    f.Printf("Hello World\n")
}

여기에서 배웠 습니다 .


3
당신은 또한 할 수있는 import ."fmt"다음 Println과 나머지 fmt의 기능은 전역 네임 스페이스에 있습니다. 또한 세미콜론이 필요하지 않습니다. 줄에 여러 문장이없는 한
cat

Golang에서는 자동 세미콜론 삽입으로 인해 중괄호 같은 줄에 있어야합니다 . 더 많은 정보 : golang.org/doc/faq#semicolons .
고양이

7

명명 된 반환 값은 몇 바이트를 절약 할 수 있습니다. 예를 들면 다음과 같습니다.

func x()string{
r:="" //Do stuff
return r}

당신은 3 바이트를 저장할 수 있습니다

func x()(r string){
//Do stuff
return}

함수 시작시 여러 변수를 선언해야하는 경우 더 유용합니다.


7

여러 다른 값을 단일 값과 비교해야하는 switch경우 단일 사례와 함께 사용하는 것이 더 공간 효율적일 수 있습니다 .

if x==1||x==2||x==3||x==4{}
switch x{case 1,2,3,4:}

2

여러 변수 선언 :

i,s:=0,""

var(i int;s string)

Int From String Conversion : (제한적이지만 때로는 도움이 됨)

n:=byte("9"[0])-48 // actual type is uint8

n,_:=strconv.Atoi("9")

그 반대

s:=string(9+48)

s:=strconv.Itoa(9)

fmt.Sprint이미 strconv.Atoi가져 왔기 때문에 바이트를 절약 할 수 있습니다 fmt.
EMBLEM

@EMBLEM 나는 strconv골프 코드가 정상적인 코드가 무엇인지 보여주기 위해 거기에 있다고 생각했습니다 .
Benny Jobigan

2

Go 컴파일러에는 fmt를 가져올 필요가없는 사전 정의 된 함수 printprintln기능이 있습니다.

package main
import."fmt"
func main(){Printf(`Hello World
`)}

당신은 이것을 쓸 수 있습니다.

package main
func main(){print(`Hello World
`)}

STDERR로 출력됩니다.


1

for 범위 루프에 많은 것들이 선택 사항입니다.

표준 버전 :

for i,v:=range a{
// Do stuff
}

경우 i, v이미 정의되었으며 덮어 쓸 수 있습니다 :

for i,v=range a{
// Do stuff
}

가치에 관심이 없다면 :

for i:=range a{
// Do stuff
}

가치에 관심이없고 i이미 정의 된 경우 :

for i=range a{
// Do stuff
}

색인이나 가치에 관심이 없다면 :

for range a{
// Do stuff
}

무한 루프를 원한다면 :

for{
// Do stuff
}

1

줄 바꿈을 포함하는 문자열이 필요하십니까? 쓰지 말고 \n, 따옴표가있는 원시 문자열을 만들고 그 안에 리터럴 개행을 넣으십시오.

s:="\n" // 7 bytes
s:=`
` // 6 bytes

0

한 줄에 여러 개의 여는 중괄호를 넣을 수 있지만 여는 중괄호가 포함 된 선에는 최대 하나의 닫는 중괄호가 포함될 수 있습니다.

옳은:

func main(){if true{switch{case 1==1:for{break
}}}}

또한 올바른 :

func main(){if true{switch{case 1==1:for{break}
}}}

또한 올바른 :

func main(){if true{switch{case 1==1:for{
break}}}}

잘못됨 :

func main() {
    if true{for{break}}
}

0

이동은 비트 연산에 대해 서로 다른 연산자 우선 순위를 가지고, <<, >>, &, 등은 보통보다 낮은 우선 순위가 +하고 -대부분의 언어에 있지만, 이동에 그들은 같은 우선 순위를 가지고 */.

Precedence    Operator
5             *  /  %  <<  >>  &  &^
4             +  -  |  ^
3             ==  !=  <  <=  >  >=
2             &&
1             ||

괄호를 저장하는 데 사용할 수 있습니다.

대부분의 언어 :

(a&b)*c

가기:

a&b*c

0

긴 라이브러리 함수 이름을 한 글자 변수에 할당하여 Go의 최고급 함수를 최대한 활용하십시오.

import."strings"
r:=Replace
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.