go语言
Table of Contents

安装环境

只试过MAC OS环境,所以就说这个,不同环境应该差不多。
安装GO运行环境,然后配置两个环境变量`GOPATH`和`GOBIN`

基础

基础语法

import (
    "fmt"
    "math"
)
func add(x int, y int) int {
    #TODO
    return x+y
}
func swap(x, y string) (string, string) {
    return y, x
}
func getsum(sum int) (x, y int){
    sum = x+y
    return
}
var c, python, java bool
var i, j int = 1, 2
var ruby, Go, haskell = true, false, "helloword"
bool

string

int  int8  int16  int32  int64
uint uint8 uint16 uint32 uint64 uintptr

byte // uint8 的别名

rune // int32 的别名
     // 代表一个Unicode码

float32 float64

complex64 complex128
func main() {
    v := "HaHa" // change me!
    fmt.Printf("v is of type %T\n", v)
}
sum := 0
for i := 0; i < 10; i++ {
    sum += i
}
for sum < 1000 {
    sum += sum
}
for {
}
if x < 0 {
    return sqrt(-x) + "i"
}

if x >10 {
    ...
} else {
    ...
}

GO 的循环条件和判断条件都不需要用小括号括起来,但是括起来也是可以的。
亲测通过,另外for和if条件表达式中定义的变量的作用域仅在该语句块中有效。

    switch {
    case t.Hour() < 12:
        fmt.Println("Good morning!")
    case t.Hour() < 17:
        fmt.Println("Good afternoon.")
    default:
        fmt.Println("Good evening.")
    }
type Vertex struct {
    X int
    Y int
}

结构体也可以通过指针访问,还是用符号.访问成员

var (
    v1 = Vertex{1, 2}  // 类型为 Vertex
    v2 = Vertex{X: 1}  // Y:0 被省略
    v3 = Vertex{}      // X:0 和 Y:0
    p  = &Vertex{1, 2} // 类型为 *Vertex
)
var a [10]int
game := [][]string{
        []string{"_", "_", "_"},
        []string{"_", "_", "_"},
        []string{"_", "_", "_"},
    }
s[lo:hi]
s[:hi]
s[lo:]
a := make([]int, 5)
var pow = []int{1, 2, 4, 8, 16, 32, 64, 128}
for i, v := range pow {
        fmt.Printf("2**%d = %d\n", i, v)
}
for _, v := range pow {
}
for idx := range pow {
}
m = make(map[string]int)
m["Bell Labs"] = 8
// fibonacci 函数会返回一个返回 int 的函数。
func fibonacci() func() int {
    var a0, a1 = 0, 1
    return func() int{
        var tmp = a0 + a1
        a0 = a1
        a1 = tmp
        return a0
    }
}
func (v *Vertex) Abs() float64 {
    return math.Sqrt(v.X*v.X + v.Y*v.Y)
}
v.Abs()
type MyFloat float64

func (f MyFloat) Abs() float64 {
    if f < 0 {
        return float64(-f)
    }
    return float64(f)
}

func main() {
    f := MyFloat(-math.Sqrt2)
    fmt.Println(f.Abs())
}
type Abser interface {
    Abs() float64
}
type Stringer interface {
    String() string
}

Stringer 是一个可以用字符串描述自己的类型。fmt包 (还有许多其他包)使用这个来进行输出。
- 错误接口

type error interface {
    Error() string
}

[1] Go学习网页https://tour.go-zh.org/