go 语言 写法
为了很久之后能快速回顾GO的写法 特意记录一下
1: go可以隐式声明 := (可以不跟类型) 类似
var 变量名 变量类型
变量名:=变量值(声明时go会自动判断类型,和PHP很像)
变量名:=变量类型
2:go里面的 interface (接口)类型 可以作为函数参数接收任何其他类型 ,也可以作为接收查询的结果集来使用
var mapData = make(map[string]interface{} , 10) ,cap不是必填参数,但是可以在初始化时指定容量 map会自动扩容
mapData := make(map[string]any) 1.8之后可以用 any关键字替换
3: go 交换变量值很方便
A, B, C, D := 1, 2, 3, 4
fmt.Println(A, B, C)
A, B = B, A
fmt.Println(A, B, C) //2 1 3
A, B, C = C, B, A
fmt.Println(A, B, C) //3 1 2
A, B, C = 1, 2, 3
fmt.Println(A, B, C, D) //1 2 3 4
A, B, C, D = C, D, A, B
fmt.Println(A, B, C, D) //3 4 1 2
4: go sync包用来做并发相关功能 channel可以做限流或者多协程间的跨线程通信
5: go里面的面向对象时靠 结构体来实现的 (引用资料)
结构体: 相当于Java中的类,GO中结构体,结构体方法( 首字母大写是公有的,包外可访问;首字母小写是私有的,仅在包内可访问)
结构体命名需要使用驼峰命名法,且不能出现下划线
接口 : 空接口可以作为任何类型数据的容器
一个类型可实现多个接口 (在包内就是约束)
接口命名习惯以 er 结尾
接口只有方法声明,没有实现,没有数据字段
当方法名首字母是大写且这个接口类型名首字母也是大写时,这个方法可以被接口所在的包(package)之外的代码访问
接口也可实现类似OOP中的多态
只有当有两个或两个以上的具体类型必须以相同的方式进行处理时才需要定义接口。
不要为了接口而写接口,那样只会增加不必要的抽象,导致不必要的运行时损耗
type server interface { i() update() } type Server struct { Period int64 } func (s *Server) Update(p int64) { s.Period = p } func (s *Server) i() {}
6:类型断言 (类似php的强转类型用法) 可以判断方法是否实现了对应接口
package main import "fmt" var _ Study = (*study)(nil) // 强制 *study 去实现 Study 接口,编译器会检查 *study类型是否实现了 Study接口。 type study struct { Name string } type Study interface { Listen(message string) string } func main() { fmt.Println("hello world") }
本文来自博客园,作者:给香菜送点香菜,转载请注明原文链接:https://www.cnblogs.com/mingkewang/p/17167154.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~