高尔夫运动小贴士


25

您在Go中打高尔夫球有哪些一般秘诀?我是Code Golf的新手,正在寻找可以应用于一般至少对Go特定的代码高尔夫问题的想法。

请对每个答案只给一个小费。


3
我们可能想要创建Go标签,但是,Go甚至在这里被用于打高尔夫球吗?
Optimizer

@Optimizer我

3
应将标题重命名为“ Go-lfing的提示”
Uriel

Answers:


12

通过@徽的回答启发这里

导入包时,可以将其功能放在全局名称空间中,如下所示:

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功能位于全局名称空间中。另外,您不需要分号。曾经,除非你有一行多个语句

请注意,由于自动分号插入,在Golang中,括号必须在同一行上。更多信息:golang.org/doc/faq#semicolons

7

命名返回值可以节省几个字节。例如:

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

您可以保存3个字节

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

如果您需要在函数开始时声明多个变量,它会更加有用。


7

如果您需要将许多不同的值与一个值进行比较,则将单个值与a一起使用可能会节省更多空间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")

和副Versa

s:=string(9+48)

s:=strconv.Itoa(9)

fmt.Sprint可能节省了个字节strconv.Atoi,因为您可能fmt已经导入了。
EMBLEM

我认为@EMBLEM strconv只是用来显示普通代码中的高尔夫球代码。
Benny Jobigan

2

Go编译器具有预定义printprintln不需要导入fmt的功能,因此代替此。

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

你可以写这个。

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

请注意,这输出到STDERR。


1

for range循环中的很多内容都是可选的。

标准版本:

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

如果iv已经定义并且可以被覆盖:

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

Go有位操作不同的运算符优先级<<>>&,等通常的优先级低于+并且-在大多数语言中,但在围棋它们具有相同的优先级*/

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

这可以用来保存一些括号。

大部分语言:

(a&b)*c

走:

a&b*c

0

通过将长库函数名称分配给一个字母的变量来充分利用Go的一流函数。

import."strings"
r:=Replace
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.