go_封装
go语言中首字母大写表示public
go语言中首字母小写表示private
结构定义的方法必须放在同一个包内
一个目录只能放一个包
如何扩充系统的类型或别人的类型:
1.定义别名
2.使用组合
使用组合
目录结构:
入口:entry.go
package main import (
"learngo/tree"
) func main() {
var root tree.Node
//fmt.Println(root)
root = tree.Node{Value:3}
root.Left = &tree.Node{}
root.Right = &tree.Node{5,nil,nil}
root.Right.Left = new(tree.Node)
root.Left.Right = tree.CreateNode(2)
//fmt.Println(root) root.Traverse()
//nodes :=[]TreeNode{
// {value:5},
// {},
// {6,nil,&root},
//}
//fmt.Println(nodes) //root.print()
//root.right.left.setValue(8)
//root.right.left.print()
//fmt.Println()
//
//root.print()
//root.setValue(100)
//root.print()
//
//var pRoot *TreeNode
//pRoot.setValue(120)
//pRoot =&root
//pRoot.setValue(220)
//pRoot.print()
//root.print() }
函数体:node.go
package tree import "fmt" //结构体,相当于对象,实体
type Node struct {
Value int
Left,Right * Node
} //(node TreeNode)相当于其他语言的this,表示print()是给node接收的
func (node Node) Print(){
fmt.Print(node.Value," ")
} func (node *Node) SetValue(value int){
if node == nil{
fmt.Println("Setting nil value")
return
}
node.Value = value
} //使用工厂函数来构造结构体
func CreateNode(value int) *Node{
return &Node{Value:value}
}
定义别名
函数体:queue.go
package queue type Queue []int func (q *Queue) Push(v int){
*q = append(*q,v)
} func (q *Queue) Pop() int{
head := (*q)[0]
(*q) = (*q)[1:]
return head
} func (q *Queue) IsEmpty() bool{
return len(*q) == 0
}
入口:entry.go
package main import (
"learngo/queue"
"fmt"
)
////通过别名的方式扩充系统的类型或别人的类型
func main() {
q:=queue.Queue{1}
q.Push(2)
q.Push(3)
fmt.Println(q.Pop())
fmt.Println(q.Pop())
fmt.Println(q.IsEmpty())
fmt.Println(q.Pop())
fmt.Println(q.IsEmpty()) }
go_封装的更多相关文章
- [C#] 简单的 Helper 封装 -- RegularExpressionHelper
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- iOS开发之App间账号共享与SDK封装
上篇博客<iOS逆向工程之KeyChain与Snoop-it>中已经提到了,App间的数据共享可以使用KeyChian来实现.本篇博客就实战一下呢.开门见山,本篇博客会封装一个登录用的SD ...
- Ajax实现原理,代码封装
都知道实现页面的异步操作需要使用Ajax,那么Ajax到是怎么实现异步操作的呢? 首先需要认识一个对象 --> XMLHttpRequest 对象 --> Ajax的核心.它有许多的属性和 ...
- 用C语言封装OC对象(耐心阅读,非常重要)
用C语言封装OC对象(耐心阅读,非常重要) 本文的主要内容来自这里 前言 做iOS开发的朋友,对OC肯定非常了解,那么大家有没有想过OC中NSInteger,NSObject,NSString这些对象 ...
- 【知识必备】RxJava+Retrofit二次封装最佳结合体验,打造懒人封装框架~
一.写在前面 相信各位看官对retrofit和rxjava已经耳熟能详了,最近一直在学习retrofit+rxjava的各种封装姿势,也结合自己的理解,一步一步的做起来. 骚年,如果你还没有掌握ret ...
- 对百度WebUploader开源上传控件的二次封装,精简前端代码(两句代码搞定上传)
前言 首先声明一下,我这个是对WebUploader开源上传控件的二次封装,底层还是WebUploader实现的,只是为了更简洁的使用他而已. 下面先介绍一下WebUploader 简介: WebUp ...
- 封装集合(Encapsulate Collection)
封装就是将相关的方法或者属性抽象成为一个对象. 封装的意义: 对外隐藏内部实现,接口不变,内部实现自由修改. 只返回需要的数据和方法. 提供一种方式防止数据被修改. 更好的代码复用. 当一个类的属性类 ...
- CSharpGL(29)初步封装Texture和Framebuffer
+BIT祝威+悄悄在此留下版了个权的信息说: CSharpGL(29)初步封装Texture和Framebuffer +BIT祝威+悄悄在此留下版了个权的信息说: Texture和Framebuffe ...
- CSharpGL(7)对VAO和VBO的封装
CSharpGL(7)对VAO和VBO的封装 2016-08-13 由于CSharpGL一直在更新,现在这个教程已经不适用最新的代码了.CSharpGL源码中包含10多个独立的Demo,更适合入门参考 ...
随机推荐
- cell 重用
1. 当单元格因滚屏而脱落表格可见区时,表格可以将其缓存到重用队列中. 用法:我们可标记单元格以备重用,然后根据需要从该队列中提取. 在分配新单元格时,必须检查重用单元格是否可用.如果表格对deque ...
- java创建类的5种方式
1.使用new关键字 } → 调用了构造函数 这种方式,我们可以调用任意的构造函数(无参的和带参数的). 2.使用Class类的newInstance方法 } → 调用了构造函数 使用Class类的n ...
- azure 最佳实践 -- 保持冗余
保持冗余确保你的应用的部署体系是有冗余的,以避免单一节点失败的情况.一个弹性良好的系统可以灵活的绕过系统故障.找出应用中(请求执行)的关键路径.路径中的每个节点是否都有冗余?子系统失败时,系统能否有效 ...
- 分布式机器学习系统笔记(一)——模型并行,数据并行,参数平均,ASGD
欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入. 文章索引::"机器学 ...
- ES6中箭头函数的作用
我们知道在ES6中,引入了箭头函数,其本质就是等同有ES5中的函数.类似于下面的写法: let test1=() => “abc”; let test2=() => { return “a ...
- BZOJ3212: Pku3468 A Simple Problem with Integers(线段树)
3212: Pku3468 A Simple Problem with Integers Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 2530 So ...
- 【转】VC++ 也有 Refactoring 功能了
原文网址:http://blog.csdn.net/yapingxin/article/details/18923095 分类: C++2014-02-04 14:00 2688人阅读 评论(0) 收 ...
- 如何利用 AVDictionary 配置参数(转)
本文是我的 FFMPEG Tips 系列的第五篇文章,准备介绍下 ffmpeg 提供的一个非常好用的健值对工具:AVDictionary,特别是对于没有 map 容器的 c 代码,可以充分利用它来配置 ...
- Phonegap 工作原理
1.Phonegap是什么 PhoneGap 是一个基于HTML和JavaScript的应用开发平台,使用它可以构建本地应用.你可以把PhoneGap看作一个正方形的web view containe ...
- Eclipse转Android Studio工程实践
Eclipse转Android Studio工程有两种方式, 一种是兼容Eclipse,两者都可以使用,一种是全新的Android Gradle Project. 这里使用的Android Studi ...