Go 语言入门指南 | 青训营

44 阅读1分钟

开发环境

安装goland

配置集成开发环境

vscode或者goland

基础语法

hello world

package main
import (
        "fmt"
)

func main(){
    fmt.Println("hello world")
}

变量

var a int
a=1
b := 1

常量

const s string = "constant"
const h = 500

if else

if 7%2 == 0 {
    fmt.Println("7 is even")
} else {
    fmt.Println("7 is odd")
}

循环

for init; condition; post { }
for condition { }
//死循环
for { }

switch可以使用任意变量,无需break

数组

var numbers = [5]int{1, 2, 3, 4, 5}
numbers := [5]int{1, 2, 3, 4, 5}
balance := [5]float32{1:2.0,3:7.0}
var balance = [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0} 或 balance := [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}

在 Go 语言中,数组的大小是类型的一部分,因此不同大小的数组是不兼容的,也就是说 [5]int[10]int 是不同的类型。

切片

s := make([]string , 3)
s[0] = "a"
s[1] = "b"
s[2] = "c"
s[2] //c
len(s) //3
s = append(s , d)
s // [a b c d]
c := make([]string , len(s))
copy (c , s)
s[2:3] // [c d]

map

m := make (map[string]int)
m["one"] = 1
m["two"] = 2
len(m) //2
m["two"] //2
r , ok := m["unkown"] //0 false
delete m["one"]
m2 = map[string]int{"one":1,"two":2}

range

nums := []int {2,3,4}
sum := 0
for i ,num = range nums{
    sum +=num 
    if num ==2 {
        fmt.Println("index:",i,"num",num)
    }
}
//index: 0 num:2
fmt.Println(sum) // 9

函数

func add(a int ,b int) int {
    return a+b
}
func exists(m map[string]string, k string)(v string, ok string){
    v, ok = m[k]
    return v, ok
}

指针

package main
import(
    "fmt"
)
func add2(n int) {
    n += 2
}
func add2ptr(n *int) {
    *n += 2
}
func main() {
    n := 5
    add2(n)
    fmt.PrintIn(n) // 5
    add2ptr(&n)
    fmt.PrintIn(n) // 7
}

结构体

type Books struct {
   title string
   author string
   subject string
   book_id int
}

func (b Books)title_func(title string){
    b.title = title
}

错误处理

now := uint32(time.Now().UnixMilli())
layout := "2006-01-02T15:04:05.999Z"
t, err := time.Parse(layout, *request.LatestTime)
latestTime := t.Unix()
if err != nil {
        var numError *strconv.NumError
        if errors.As(err, &numError) {
                latestTime = int64(now)
                logger.WithFields(logrus.Fields{
                        "latestTime": latestTime,
                        "err":        err,
                }).Warnf("strconv.NumError")
                logging.SetSpanError(span, err)
        }
}