Golang Tips |青训营笔记

54 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 11 天

Golang编程开发中自己总结的小细节:

  1. var const import 都可用()代码块
  2. fmt.Println() 里若换行 必须要加个,
  3. Go语言必须强制类型转换
  4. iota 自增值种子
  5. for 起始条件;结束条件;递增条件
  6. for啥都不加 相当于死循环 只有一个条件相当于while循环
  7. 可变参数列表 ...
  8. 任何地方都可通过_省略变量
  9. 不管指针还是实例,都是一路.下去,而不是->
  10. string 和 []byte的区别:
  • 性能上,string是常量,修改值会重新分配内存地址做内存拷贝,本质上是一个结构体,含指针和len。 []byte 是变量,修改值不触发内存地址变动,减少内存的拷贝,实质上是结构体,含指针、len和cap
  • 特性上,string可以进行比较,可以作为map的key。[]byte 不能进行比较,不能作map的key

Reference:

常用的方法:

 strconv.Iota()
 把整数转为字符串
 ​
 math.Sqrt() 参数为float64
 ​
 ioutil.ReadFile(filename)
 读取文本内容
 ​
 p := reflect.ValueOf(op).Pointer()
 opName := runtime.FuncForPC(p).Name() //拿到函数名
 ​
 使用utf8.RuneCountInString获得字符数量
 ​
 writer.Flush()  Flush writes any buffered data to the underlying io.
复制代码

Golang实战学习技巧

Gin博客项目

架构

  • assets 放入框架的具体静态文件,如bootstrap的js和css文件夹
  • controller 控制器文件夹,定义登录,访问函数,页面访问
  • dao 定义接口 使用gorm操纵数据库,初始化数据库
  • model 定义数据模型 如User等
  • router gin.Default()初始化 发起GET POST请求 跳转在html标签中的 action/href
  • templates 存放模板文件html
  • main.go go文件入口
  • go.mod go mod 模块管理

常量枚举类型 (普通类型和自增值类型)

iota 自增值种子

 func enums() {
     const (
         cpp = iota
         _
         python
         golang
         javascript
     )
     //b, kb, mb, gb, tb, pb
     const (
         b = 1 << (10 * iota)
         kb
         mb
         gb
         tb
         pb
     )
     fmt.Println(cpp, javascript, python, golang)
     fmt.Println(b, kb, mb, gb, tb, pb)
 }