开发环境
安装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)
}
}