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,更适合入门参考 ...
随机推荐
- VS2013命令行界面查看虚函数的内存布局
内存布局可能使用vs的界面调试看到的旺旺是一串数字,很不方便,但是vs的命令行界面可以很直观的显示出一个类中具体的内存布局. 打开命令行.界面如下所示: 测试代码如下所示: class Base1 { ...
- ES6学习一 JS语言增强篇
一 背景 JavaScript经过二十来年年的发展,由最初简单的交互脚本语言,发展到今天的富客户端交互,后端服务器处理,跨平台(Native),以及小程序等等的应用.JS的角色越来越重要,处理场景越来 ...
- 古董留念 - Microsoft Office 4.2中文版
Office 4.2是Office 95的前一个版本,最适合运行在Windows 3.x上,但即使是最新的Windows 7 32位版也是可以安装它的(不信你可以试试)! 原版以软盘为载体,安装一次需 ...
- EM算法及其应用(一)
EM算法及其应用(一) EM算法及其应用(二): K-means 与 高斯混合模型 EM算法是期望最大化 (Expectation Maximization) 算法的简称,用于含有隐变量的情况下,概率 ...
- 分析器错误信息: 服务器标记不能包含 <% ... %> 构造
我的程序如下:<form runat="server"><TABLE><TR><TD>用户名:</TD><TD&g ...
- 判断一棵树是否为二叉搜索树(二叉排序树) python
输入一棵树,判断这棵树是否为二叉搜索树.首先要知道什么是排序二叉树,二叉排序树是这样定义的,二叉排序树或者是一棵空树,或者是具有下列性质的二叉树: (1)若左子树不空,则左子树上所有结点的值均小于它的 ...
- Mac下忘记mysql的root密码
cd /usr/local/mysql/bin sudo su sudo /usr/local/mysql/support-files/mysql.server stop # ./mysqld_saf ...
- html页面中event的常见应用
一:获取键盘上某个按键的unicode值 <html> <head> <script type="text/javascript"> funct ...
- Spring AOP 实现读写分离
原文地址:Spring AOP 实现读写分离 博客地址:http://www.extlight.com 一.前言 上一篇<MySQL 实现主从复制> 文章中介绍了 MySQL 主从复制的搭 ...
- android adb端口被占用解决方法
1.输入adb devices命令 C:\Users\Nick>adb devices List of devices attached adb server version (31) does ...