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")
}
复制代码

 

posted @   给香菜送点香菜  阅读(62)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示