安装

官网下载(Go 中文网):https://go-zh.org/doc/install

开发 IDE:GoLand、VScode、liteIDE

Hello world

历史传统

1
2
3
4
5
package main
import "fmt"
func main(){
    fmt.Println("Hello world")
}

变量定义

声明变量

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
package main
import "fmt"

func variableZeroValue(){
    var a int
    var s string
    fmt.Printf("%d %q \n",a ,s)
}
func main()  {
    variableZeroValue()
}
// 结果
0 ""

定义变量并赋值

1
2
3
4
5
6
7
func variableInitialValue(){
    var a, b int = 3, 4
    var s string = "abc"
    fmt.Println(a,b,s)
}
// 结果
3 4 abc

定义变量,自动推断类型

1
2
3
4
5
6
func variableTypeDeduction(){
    var a, b, c, s = 3, 4, true, "string"
    fmt.Println(a,b,c,s)
}
// 结果
3 4 true string

定义变量,自动推断类型简短写法

1
2
3
4
5
6
func variableShorter(){
    a,b,c,s := 3,4,true,"string"
    fmt.Println(a,b,c,s)
}
// 结果
3 4 true string

使用 var 关键词,代码:

1
2
var a,b,c bool
var s1,s2 string = "hello","world"

可放在函数内,或者直接放在包内,使用 var()集中定义变量,如:

1
2
3
4
5
var (
    a1 = 3
    s1 = "str str"
    b1 = true
)

编译器自动决定类型:

1
var a,b,i,s1,s2 = true,false,3,"hello","wold"

使用:=定义变量

1
a,b,i,s1,s2 := true,false,3,"hello","world"

注意:只能在函数内使用

内建变量类型

  • bool,string
  • (u)int,(u)int8,(u)int16,(u)int32,(u)int64,uintptr
  • byte,rune
  • float32,float64,complex64,complex128

强制类型转换

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
package main
import (
    "fmt"
    "math"
)

func triangle() {
    var a, b int = 3, 4
    var c int
    c = int(math.Sqrt(float64(a*a + b*b)))
    fmt.Println(c)
}
func main() {
    triangle()
}
// 结果
5

常量定义

1
2
const filename = "abc.txt"
const a, b = 3, 4

const 数值可作为各种类型使用,看一种特殊的枚举常量定义

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
func enums() {
    const (
        cpp    = 0
        java   = 1
        python = 2
        golang = 4
    )
    println(cpp, java, python, golang)
}
// 结果
0 1 2 4

等同于下面写法

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
const (
    cpp = iota
    java
    python
    _
    golang
)
println(cpp, java, python, _, golang)
// 结果
0 1 2 4
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
const (
    b = 1 << (10 * iota)
    kb
    mb
    gb
    tb
    pb
)
println(b, kb, mb, gb, tb, pb)
// 结果
1 1024 1048576 1073741824 1099511627776 1125899906842624

小结:

  • 变量类型写在变量名之后
  • 编译器可推测变量类型
  • 没有 char,只有 rune
  • 原生支持复数类型