这是我参与「第三届青训营 -后端场」笔记创作活动的第9篇笔记
Golang编程开发中自己总结的小细节:
- var const import 都可用()代码块
- fmt.Println() 里若换行 必须要加个,
- Go语言必须强制类型转换
- iota 自增值种子
- for 起始条件;结束条件;递增条件
- for啥都不加 相当于死循环 只有一个条件相当于while循环
- 可变参数列表
... - 任何地方都可通过
_省略变量 - 不管指针还是实例,都是一路
.下去,而不是-> - 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)
}