面向对象
type TreeNode struct{
Left,Right *TreeNode
Value int
}
func (root *TreeNode) traverse(){
if root == nil{
return
}
root.Left.traverse()
fmt.Ptint(root.Value)
root.Right.traverse()
}
·go语言仅支持封装,不支持继承和多态
·go语言没有class,只有struct
结构的定义
type TreeNode struct{
Left,Right *TreeNode
Value int
}
结构的创建
root := TreeNode{Value:3}
root.Left = &TreeNode{}
root.Right = &TreeNode{nil,nil,5}
root.Right.Left = new(TreeNode)
·不论地址还是结构本身,一律使用.来访问成员
func createTreeNode(value int) *TreeNode{
return &TreeNode{value:value}
}
root.Left.Right = createTreeNode(2)
·使用自定义工厂函数
·注意返回了局部变量的地址
为结构定义方法
func (node TreeNode) print(){
fmt.Ptint(node.Value)
}
·显示定义和命名方法接收者
使用指针作为方法接收者
func (node *TreeNode) setValue(value int){
node.Value = value
}
·只有使用指针才可以改变结构内容
·nil指针也可以调用方法
·要改变内容必须使用指针接收者
·结构过大也考虑使用指针接收者
·一致性:如有指针接收者,最好都是指针接收者
·值接收者是Go语言特有
·值/指针均可以接收值/指针
包和封装
封装
·名字一般使用CamelCase
·首字母大写:public
·首字母小写:private
包
·每个目录一个包
·main包包含可执行入口
·为结构定义的方法必须放在同一个包内
·可以是不同文件
如何扩充系统类型或者别人的类型
·定义别名
·使用组合
依赖管理
·依赖的概念
·依赖管理的三个阶段GOPATH,GOVENDOR,go mod
GOPATH
·默认在~/go(unix,linux),%USERPROFILE%\go(windows)
·每个项目都有自己的vendor目录,存放第三方库
·大量第三方依赖管理工具:glide,dep,go dep,...
go mod
·由go命令统一的管理,用户不必关心目录结构
·初始化:go mod init
·增加依赖:go get
·更新依赖:go get[@v...],go mod tidy
·将就项目迁移到go mod:go mod init,go build ./...
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现