go语言语法备忘

2020年3月6日20:27:39 发表评论 129 views

go语言语法备忘

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

数组

//给二维数组中追加值
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()

集合操作

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: "[email protected]",
}
//一行赋值(注意顺序必须与声明一致)
nick := Person{"nick", 28, "[email protected]"}
//结构体数组赋值,常用于写测试用例
tables := []struct {
        x string
        y bool
    }{
        {"([)]", false},
        {"{}[]()", true},
    }

类型转换

数字与字符串
//int to string
resString := strconv.Itoa(1)
//各种类型转字符串
resString := fmt.Sprintf("%d %v %v", 1, "coding3min", true)
string与byte的转换
//string  to bytes
resBytes := []byte("asdfasdf")
//bytes to string
resString := string(resBytes)

循环

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)
weinxin
微信公众号
三分钟学习晦涩难懂的技术,分享开发、运维、云技术等方面知识,带您轻松打破技术壁垒,编程如鱼得水。欢迎您的关注~!
小熊

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: