go语言简单入门

0.main.go程序入口要使用包名:package main

1.在定义函数时,参数的类型是写在参数名称之后的

1
func DoPost(ctx context.Context, crypto *AESCrypto, path, encryptBody string) (outDatamap[string]interface{}, err error) 

并且函数的出参直接在入参之后加上()

注意,不仅仅是函数的入参以及出参是这样的,整个go语言都是将数据类型放在数据名称之后的

2.键值对直接插入定义

1
var params = make(map[string]string)

这里代表创建了一个params的键值对元组,其中key值使用的是string类型,value值使用的是string类型

3.包内函数调用方式

在 Go 语言中,导入包后可以直接通过包名调用包内的导出方法(首字母大写的函数、变量等),形式为 包名.方法名(),这是 Go 语言的标准用法,GoFrame 框架也遵循这一规则。

注意这里还有一条规则,就是函数名为首字母大写的函数可以被包内同级程序(直接使用函数名调用)和包外程序(使用时加上包名.)调用,而首字母小写的函数则是只能被包内同级程序调用(也就是包内的子包的程序是无法调用的),如果是包外则无法调用,如果必须调用,可以在包内添加一个桥接函数(以大写字母开头,引用小写字母的私有函数)。

  • 注意上述对于包中函数调用的描述同样也适用于变量

  • Type 创建和管理类型,可以创建自定义类型,或者是将类型取一个别名,创建接口,将多个类型分组定义

  • 面向接口开发,利于解耦,允许先使用后定义,也就是函数的入参可以放置在函数的下方

  • 和c语言,c++一样支持指针操作,var SyncUserList = &qSyncUserList{}代表syncuserlist的值是取qsyncuserlist的地址*abc代表是指针

1
2
3
4
5
1. func (q *qSyncUserList) GetTopic() string {

return TaskSyncUserList

}

代表q指针指向的结构体是gettopic方法的接受体,也就是q指针指向的结构体有这个函数,并且只有这个指针可以调用

5.结构体定义

1
2
3
4
5
6
type UserGroupRelation struct {
CustId string `json:"custId" dc:"客户编码"`
GroupId string `json:"groupId" dc:"组别编码"`
DataSources string `json:"dataSources" dc:"数据来源"`
AvailCode string `json:"availCode" dc:"有效性标识"`
}

这里面每个参数最后的反引号的内容代表了是 Go 语言的结构体标签,用于为字段提供额外的元信息,供程序运行时通过反射(reflect)读取和使用。这里包含两类标签:

  • json:"custId":用于 JSON 序列化 / 反序列化时的字段映射。表示当结构体与 JSON 互转时,CustId 字段会对应 JSON 中的 custId 键(小写开头,符合 JSON 命名习惯)。
  • dc:"客户编码":这是一个自定义标签(可能是项目内部约定,如 “数据字典” 或 “文档注释”),用于说明字段的业务含义,方便开发者理解或自动生成文档。