[b]Constants[/b]
常量
Constants are declared like variables, but with the const keyword.
常量像变量一样声明,但是用常量关键字const
Constants can be character, string, boolean, or numeric values.
常量可以是字节,字符串,布尔 或数字
package main
import "fmt"
const Pi = 3.14
func main() {
const World = "世界"
fmt.Println("Hello", World)
fmt.Println("Happy", Pi, "Day")
const Truth = true
fmt.Println("Go rules?", Truth)
}
输出:
Hello 世界
Happy 3.14 Day
Go rules? true
[b]Numeric Constants[/b]
数值常量
Numeric constants are high-precision values.
数值常量是高精度值
An untyped constant takes the type needed by its context.
未定义类型常量根据上下文来确定类型
Try printing needInt(Big) too.
也可以试着输出printing needInt(Big)
package main
import "fmt"
const (
Big = 1<<100
Small = Big>>99
)
func needInt(x int) int { return x*10 + 1 }
func needFloat(x float64) float64 {
return x*0.1
}
func main() {
fmt.Println(needInt(Small))
fmt.Println(needFloat(Small))
fmt.Println(needFloat(Big))
}
输出:
21
0.2
1.2676506002282295e+29
fmt.Println(needInt(Big))
prog.go:19: constant 1267650600228229401496703205376 overflows int
[b]For[/b]
Go has only one looping construct, the for loop.
Go只有一个循环管结构体就是for循环
The basic for loop looks as it does in C or Java, except that the ( ) are gone (they are not even optional) and the { } are required.
基本的for循环看起来和C或Java,除了()不见了,()是可选项,但是{}是必须的
package main
import "fmt"
func main() {
sum := 0
for i := 0; i < 10; i++ {
sum += i
}
fmt.Println(sum)
}
输出:
45
As in C or Java, you can leave the pre and post statements empty.
像C或Java,你可以设置前后都是空
package main
import "fmt"
func main() {
sum := 1
for ; sum < 1000; {
sum += sum
}
fmt.Println(sum)
}
输出:
1024
At that point you can drop the semicolons
如果是那样的话你可以去掉分号
package main
import "fmt"
func main() {
sum := 1
for sum < 1000 {
sum += sum
}
fmt.Println(sum)
}
If you omit the loop condition, it loops forever.
如果你省略了循环条件,死循环
package main
func main() {
for ; ; {
}
}
And with no clauses at all, the semicolons can be omitted, so an infinite loop is compactly expressed.
根本没有语句的话,分号省略,于是一个无限循环可以简洁的表示
package main
func main() {
for {
}
}
[b]If[/b]
The if statement looks as it does in C or Java, except that the ( ) are gone (they are not even optional) and the { } are required.
If语句看起来和在C或Java中一样,除了不见了()
(Sound familiar?)
看起来很眼熟啊?哈哈
package main
import (
"fmt"
"math"
)
func sqrt(x float64) string {
if x < 0 {
return sqrt(-x) + "i"
}
return fmt.Sprint(math.Sqrt(x))
}
func main() {
fmt.Println(sqrt(2), sqrt(-4))
}
输出:
1.4142135623730951 2i
Like for, the if statement can start with a short statement to execute before the condition.
像for,if语句能在条件前执行段语句
Variables declared by the statement are only in scope until the end of the if.
语句的变量声明的范围直到if结束
package main
import (
"fmt"
"math"
)
func pow(x, n, lim float64) float64 {
if v := math.Pow(x, n); v < lim {
return v
}
return lim
}
func main() {
fmt.Println(
pow(3, 2, 10),
pow(3, 3, 20),
)
}
输出:
9 20
Variables declared inside an if's short statement are also available inside any of the else blocks.
在if's里的变量声明在else块里也可用
package main
import (
"fmt"
"math"
)
func pow(x, n, lim float64) float64 {
if v := math.Pow(x, n); v < lim {
return v
} else {
fmt.Printf("%g >= %g\n", v, lim)
}
// can't use v here, though
return lim
}
func main() {
fmt.Println(
pow(3, 2, 10),
pow(3, 3, 20),
)
}
输出:
27 >= 20
9 20