go语言golang语法备忘

小熊 Golang评论26,7622字数 2282阅读7分36秒阅读模式

go语言golang语法备忘

这篇文章会不断的更新,我会记录我在使用过程中一时想不起的语法

数组

//给二维数组中追加值
var ResRow [][]int
res_col := make([]int, len)
ResRow = append(ResRow,res_col)

二维数组初始化值

row, column := 3, 4
    var answer [][]int
    for i := 0; i < row; i++ {
        inline := make([]int, column)
        answer = append(answer, inline)
    }
    fmt.Println(answer)

    // 方法1
    answer1 := make([][]int, row)
    for i := range answer1 {
        answer1[i] = make([]int, column)
    }
    fmt.Println(answer1)

深度比较多维数组

reflect.DeepEqual(y, table.y)

字符串处理

//替换 -1 代表全部,其他大于-1的数字代码替换前几个匹配的
newStr := strings.Replace(s, old, new, -1 )

快速拼接

var buffer bytes.Buffer
buffer.WriteString("")
return buffer.String()

切割/分割

var res []string
res = range strings.Split(path,"/")

组合

strings.Join(res,"/")

集合操作

map

//声明后再赋值
    m1 := make(map[string]string)
    m1["name"] = "编程三分钟"
    fmt.Println(m1["name"])

//声明时赋值
    m1 := map[string]string{
        "name":"编程三分钟",
    }
    fmt.Println(m1["name"])

map的遍历

// 需要携带 value
   for name,score := range fruits{
       fmt.Println(name, score)
   }
   // 只需要key
   for name := range fruits{
       fmt.Println(name)
   }

map中是否存在某个key

//这也是If的一种不错的用法
if _,ok := map1[key1];ok {
    //....
}

删除key,不存在也不会报错

delete(map1,"coding3min")

结构体

定义结构体

// Person 为用户定义的一个类型
type Person struct {
    Name  string
    Age     int
    Email string
}

//简单写法
type T struct { a, b int }

字段标记
在定义结构体时还可以为字段指定一个标记信息:

type Person struct {
    Name  string `json:"name"`
    Age     int         `json:"age"`
    Email string `json:"email"`
}

这些标记信息通过反射接口可见,并参与结构体的类型标识,但在其他情况下被忽略。

赋值

//一般赋值
var p Person
p.Name = "nick"
p.Age = 28
//快速赋值
// 声明 Person 类型的变量,并初始化所有字段
nick := Person{
    Name: "nick",
    Age: 28,
    Email: "nickli@xxx.com",
}
//一行赋值(注意顺序必须与声明一致)
nick := Person{"nick", 28, "nickli@xxx.com"}
//结构体数组赋值,常用于写测试用例
tables := []struct {
        x string
        y bool
    }{
        {"([)]", false},
        {"{}[]()", true},
    }

类型转换

数字与字符串

//int to string
resString := strconv.Itoa(1)
//各种类型转字符串
resString := fmt.Sprintf("%d %v %v", 1, "coding3min", true)
int, err := strconv.Atoi(string)
int64, err := strconv.ParseInt(string, 10, 64)
string := strconv.FormatInt(int64,10)

string与byte、rune的转换

rune 可以理解为c中的char

//string  to bytes
resBytes := []byte("asdfasdf")
//bytes to string
resString := string(resBytes)
//string to rune
r := []rune(str)
//rune to string
str = string(r)

循环

for 循环

for i := 0; i < 10; i++ {
    fmt.Printf("%d ", i)
}
//死循环
for {
     break;
}

foreach

//遍历key value 注意复制的是副本
 for k, v := range x {
        fmt.Println(x[k]==v)
    }
//遍历key
 for k := range x {
        fmt.Println(x[k])
    }

json

序列化和反序列化

//生成json对象(map类型)
resJsons, err := json.Marshal(&jsonStruct)
//转string
req_str = string(resJsons)
//反序列化
err := json.Unmarshal([]byte(req_str), &jsonStruct)

数据处理

保留两位小数

func Decimal(value float64) float64 {
    value, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", value), 64)
    return value
}

weinxin
公众号
扫码订阅最新深度技术文,回复【资源】获取技术大礼包
Golang最后更新:2022-1-7
小熊