kagxin / blog

个人博客:技术、随笔、生活
https://github.com/kagxin/blog/issues
7 stars 0 forks source link

使用golang不习惯的地方 #61

Open kagxin opened 4 years ago

kagxin commented 4 years ago

声明初始化方式多

一个结构体值指针

package main

import "fmt"

type Persion struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}

func main() {
    var p *Persion = &Persion{"xiaoming", 10}
    fmt.Println(p)

    p2 := &Persion{"xiaoming", 10}
    fmt.Println(p2)

    p3 := new(Persion)
    p3.Name = "xiaoming"
    p3.Age = 10
    fmt.Println(p3)
}

不写纯函数

golang的指针使用惯例,不太适应。把指针传给函数,然后函数修改指针指向的变量

var comments []model.Comment
model.DB.Where("question_id=?", qid).Find(&comments)

没有列表生成式和三元运算符

golang相对于python来说语法糖比较少,没有三元运算符,列表生成式,没有map,filter

错误处理

不太习惯golang的错误处理风格,也许这种风格挺好的只是暂时不习惯

m := map[string]int{"xiaoming": 10}
if age, ok := m["xiaoming"]; ok {
    fmt.Println(age)
}

golang的错误处理风格是LBYL “Easier to Ask for Forgiveness than Permission.”(请求宽恕比许可更容易)— EAFP “Look Before You Leap”(三思而后行 )— LBYL