<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[xiaomiCJH的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/xiaomiCJH</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; xiaomiCJH]]></copyright><item><title><![CDATA[14 -包和文件的关系]]></title><link>https://blog.youkuaiyun.com/xiaomiCJH/article/details/86496338</link><guid>https://blog.youkuaiyun.com/xiaomiCJH/article/details/86496338</guid><author>xiaomiCJH</author><pubDate>Tue, 15 Jan 2019 20:08:00 +0800</pubDate><description><![CDATA[08 - 程序结构中初步的介绍了 go 语言和包的结构， 接下来我们将会更加详细的介绍包和文件之间的恩爱情仇

一、包
GO 语言当中的包和其他语言的库或者模块很类似，都是为了支持模块化、封装、单独编译和代码重用。
package的使用原则:

一个包的源代码在一个或者多个以 .go 为后缀名的源文件当中. 例如 包 gopl/ch2/tempconv对应的路径就是 $GOPATH/src/gop...]]></description><category></category></item><item><title><![CDATA[13 - 赋值与类型]]></title><link>https://blog.youkuaiyun.com/xiaomiCJH/article/details/86487996</link><guid>https://blog.youkuaiyun.com/xiaomiCJH/article/details/86487996</guid><author>xiaomiCJH</author><pubDate>Tue, 15 Jan 2019 17:29:27 +0800</pubDate><description><![CDATA[我通常理解的最简单的表达式赋值，可以理解为 “x = 1”，但是在 C++ 当中我们还有左值引用和右值引用，但是在 go 语言当中，我们出了有普通赋值之外，还有多元赋值等。
一、赋值
x = 1  // 命名变量赋值
*p = true   // 通过指针间接赋值
person.name = &amp;quot;bob&amp;quot;  // 结构体字段赋值
count[x] = count[x] * scale  // 数组、...]]></description><category></category></item><item><title><![CDATA[12 - 变量的生命周期和变量逃逸]]></title><link>https://blog.youkuaiyun.com/xiaomiCJH/article/details/86478507</link><guid>https://blog.youkuaiyun.com/xiaomiCJH/article/details/86478507</guid><author>xiaomiCJH</author><pubDate>Mon, 14 Jan 2019 16:26:54 +0800</pubDate><description><![CDATA[在 C/C++ 中我们每一个 &amp;amp;quot;{  }&amp;amp;quot;范围内，我们称之为一个作用域，在该作用域的范围内声明的变量仅仅只能在该范围有效，这就是变量的一个生命周期，而声明在全局的变量，那么其生命周期将会持续到整个程序的结束，但 go 语言中的局部变量和包一级别的变量也是如此，但是在 go 中会存在局部变量的逃逸当前作用范围。
一、变量的声明周期
变量的生命周期指的是在程序运行期间变量有效存在的时间间隔。对于在包一...]]></description><category></category></item><item><title><![CDATA[11 - new() 和 make() 的恩爱情仇]]></title><link>https://blog.youkuaiyun.com/xiaomiCJH/article/details/86476555</link><guid>https://blog.youkuaiyun.com/xiaomiCJH/article/details/86476555</guid><author>xiaomiCJH</author><pubDate>Mon, 14 Jan 2019 15:28:40 +0800</pubDate><description><![CDATA[在 go 语言当中有两个用于内存分配的内建函数 new() 和 make() 。但是对于初学者而言， 它们之间的区别容易让人模糊。 简单总结之间的区别就一句话，new 只分配内存， make 用于 slice，map，和channel 的初始化。
一、new

1. 理解 new
在 C++ 当中 new 一片内存，将会调用构造函数进行初始化，但是在 go 中 new 一片内存只是将其设置为零值，...]]></description><category></category></item><item><title><![CDATA[10 - 指针和参数解析]]></title><link>https://blog.youkuaiyun.com/xiaomiCJH/article/details/86422422</link><guid>https://blog.youkuaiyun.com/xiaomiCJH/article/details/86422422</guid><author>xiaomiCJH</author><pubDate>Sun, 13 Jan 2019 19:20:06 +0800</pubDate><description><![CDATA[在 C/C++ 当中可以通过指针申请堆栈空间，指向某个变量空间，可以说不会指针，就不会 C/C++， 然而在 go 中也用指针的用法，其和 C/C++ 类型
一、指针
1. 指针变量
在 go 中， 一个变量对应了类型值的内存空间。一个指针的值是另一个变量的空间内存地址，那么通过指针，我们可以在不需要知道该变量的名字的情况下直接读或更新对应变量的值。
如下：
x := 1
p := &amp;amp;amp;amp;x ...]]></description><category></category></item><item><title><![CDATA[08 - 程序结构]]></title><link>https://blog.youkuaiyun.com/xiaomiCJH/article/details/86421270</link><guid>https://blog.youkuaiyun.com/xiaomiCJH/article/details/86421270</guid><author>xiaomiCJH</author><pubDate>Sun, 13 Jan 2019 15:49:38 +0800</pubDate><description><![CDATA[从第8节开始的接下来几章节，将会对 go 的程序结构方面的知识进行详解
程序结构
在 go 语言的运行程序当中，少不了类似于 C/C++ 的 main 函数的入口； 而在 go 语言当中，其程序运行的起来为 main 包， 而 main 函数是不可缺少的一部分：
以下是一个完整的 go 程序结构分析如下：
package main // 声明的 main 包， 它指明了当前 xx.go 文件属于某...]]></description><category></category></item><item><title><![CDATA[09 - 命名和声明]]></title><link>https://blog.youkuaiyun.com/xiaomiCJH/article/details/86414645</link><guid>https://blog.youkuaiyun.com/xiaomiCJH/article/details/86414645</guid><author>xiaomiCJH</author><pubDate>Sun, 13 Jan 2019 15:08:56 +0800</pubDate><description><![CDATA[

]]></description><category></category></item><item><title><![CDATA[07 - 获取URL， 并发 goroutine和channel]]></title><link>https://blog.youkuaiyun.com/xiaomiCJH/article/details/86302938</link><guid>https://blog.youkuaiyun.com/xiaomiCJH/article/details/86302938</guid><author>xiaomiCJH</author><pubDate>Fri, 11 Jan 2019 16:51:09 +0800</pubDate><description><![CDATA[Go 语言最大的特征之一，就是对并发编程的支持，接下来我们将简单理解一下并发
一、goroutine 获取URL
06 - 获取URL    中简单地获取了 http 的信息，接下来我们将会同时去获取所有的 URL ，所以这个程序的总执行时间不会超过执行时间最长的那一个任务，前面的 urlfetch 程序执行时间则是所有任务执行时间之和。 urlfetchall 程序只会打印获取的内容大小和经过的...]]></description><category></category></item><item><title><![CDATA[06 - 获取URL]]></title><link>https://blog.youkuaiyun.com/xiaomiCJH/article/details/85934910</link><guid>https://blog.youkuaiyun.com/xiaomiCJH/article/details/85934910</guid><author>xiaomiCJH</author><pubDate>Sun, 06 Jan 2019 19:21:14 +0800</pubDate><description><![CDATA[Go 语言在 net 这个强大 package 的帮助下提供了一系列的 package 来做这件事情，使用这些包可以更简单地用网络收发信息，还可以建立更底层的网络连接，编写服务器程序。
一、获取URL
来源于 Linux 的 curl 命令的灵感，通过下面程序 urlfetch 将会获取对应的 url， 并且将其原文本打印出来
相关源代码如下：
//Fetch prints the content...]]></description><category></category></item><item><title><![CDATA[05 - 查找重复行3 深一步了解go]]></title><link>https://blog.youkuaiyun.com/xiaomiCJH/article/details/85866940</link><guid>https://blog.youkuaiyun.com/xiaomiCJH/article/details/85866940</guid><author>xiaomiCJH</author><pubDate>Sat, 05 Jan 2019 20:03:09 +0800</pubDate><description><![CDATA[
前2节已经对 dup 做了深一步的解析， dup1 和 dup2都是以数据流的形式输入。理论上可以处理任意多行的输入数据，它是一步一步以数据流的方式读取数据。另外还可以一口气将数据全部读取到内存中，一次分割成多行，然后在处理

一、 dup3
运行路径：
$GOPATH/src/gopl/ch1/dup/

运行方式：
go run dup3.go input.txt

input.txt里面的...]]></description><category></category></item><item><title><![CDATA[04 - 查找重复行2 深一步了解go]]></title><link>https://blog.youkuaiyun.com/xiaomiCJH/article/details/85798072</link><guid>https://blog.youkuaiyun.com/xiaomiCJH/article/details/85798072</guid><author>xiaomiCJH</author><pubDate>Sat, 05 Jan 2019 16:13:38 +0800</pubDate><description><![CDATA[
接上一节任务运行后续

在上一节中 dup1 从标准输入当中获取数据，而在 dup2 当中我们读取标准输入或是使用os.Open打开各个具名文件，并操作它们。
一、dup2
运行路径:
$GOPATH/src/gopl/ch1/dup

运行方式
$ go run dup2.go input.txt

尝试了上述的运行方式，我们得到以下的运行结果	
二、程序分析
以下是程序从标准输入或者某个文件...]]></description><category></category></item><item><title><![CDATA[03 - 查找重复行1  深一步了解go]]></title><link>https://blog.youkuaiyun.com/xiaomiCJH/article/details/85784636</link><guid>https://blog.youkuaiyun.com/xiaomiCJH/article/details/85784636</guid><author>xiaomiCJH</author><pubDate>Fri, 04 Jan 2019 20:15:44 +0800</pubDate><description><![CDATA[思路

对文件做拷贝、打印、搜索、排序、统计或类似事情的程序都有一个差不多的程序结构：一个处理输入的循环，在每个元素上执行计算处理，在处理的同时或最后产生输出。
接下来根据 Linux 的 uniq 命令，其寻找响铃的重复行，我们将会用 go 语言编写三个版本的 dup， 方便我们更加详细的详解 go 语言的结构

例如：
// 输入文件
xiaomi
hello
world
xiaomi
hel...]]></description><category></category></item><item><title><![CDATA[02 - 理解项目结构中的包的文件]]></title><link>https://blog.youkuaiyun.com/xiaomiCJH/article/details/85246194</link><guid>https://blog.youkuaiyun.com/xiaomiCJH/article/details/85246194</guid><author>xiaomiCJH</author><pubDate>Tue, 25 Dec 2018 15:22:42 +0800</pubDate><description><![CDATA[本片当中将带大家更加深一步了解go语言中的项目结构， 以及包和文件]]></description><category></category></item><item><title><![CDATA[01 - 欢迎来到go世界，Hello world]]></title><link>https://blog.youkuaiyun.com/xiaomiCJH/article/details/85243064</link><guid>https://blog.youkuaiyun.com/xiaomiCJH/article/details/85243064</guid><author>xiaomiCJH</author><pubDate>Tue, 25 Dec 2018 11:04:28 +0800</pubDate><description><![CDATA[一、安装golang
首先在学习狗语言之前，我要学会安装golang， 然后配置环境变量，仔细认真地学习golang的安装过程将会收获很多
1. Yum安装


CentOS: sudo yum install go


2. 源代码安装
go语言官网: https://golang.org/dl/
在该网站中，找到对应的 Go 的安装包并且下载下来

命令安装

安装目录:/usr/local/...]]></description><category></category></item><item><title><![CDATA[vptr的初始化语义学]]></title><link>https://blog.youkuaiyun.com/xiaomiCJH/article/details/78354741</link><guid>https://blog.youkuaiyun.com/xiaomiCJH/article/details/78354741</guid><author>xiaomiCJH</author><pubDate>Thu, 26 Oct 2017 15:47:22 +0800</pubDate><description><![CDATA[一、多继承下的调用研究

根据上述的模型当中， 我们可以构建出其构造函数的调用顺序
Point(x, y);
Point3d(x, y, z);
Vertex(x, y, z);
Vertex3d(x, y, z);
源代码：
class Point
{
public:
	Point(float x = 0.0, float y = 0.0) :_x(x), _y(y){ size();]]></description><category></category></item><item><title><![CDATA[建造者模式]]></title><link>https://blog.youkuaiyun.com/xiaomiCJH/article/details/78182910</link><guid>https://blog.youkuaiyun.com/xiaomiCJH/article/details/78182910</guid><author>xiaomiCJH</author><pubDate>Mon, 09 Oct 2017 15:16:02 +0800</pubDate><description><![CDATA[序言
一个人如果活到了老死， 那么这个人的一生不定会经历这几个阶段：生、老、病、死。每个人的各个阶段都是不一样的， 没有两个人的一生的经历是一样的。 这个特例就是一个简单的建造者模式的叙述。   或许有的人还是不懂什么建造者模式， 那么请你继续向下面看看嘛


建造者模式实际上是常用的设计模式。顾名思义，builder的意思是建造者或者建筑工人，谈到建造自然会想到楼房。楼房是千差万别的，楼]]></description><category></category></item><item><title><![CDATA[C++对象模型之 Copy Constructor的建构操作]]></title><link>https://blog.youkuaiyun.com/xiaomiCJH/article/details/78171119</link><guid>https://blog.youkuaiyun.com/xiaomiCJH/article/details/78171119</guid><author>xiaomiCJH</author><pubDate>Sat, 07 Oct 2017 19:37:10 +0800</pubDate><description><![CDATA[是]]></description><category></category></item><item><title><![CDATA[C++对象模型之Default Constructor的建构操作]]></title><link>https://blog.youkuaiyun.com/xiaomiCJH/article/details/78171117</link><guid>https://blog.youkuaiyun.com/xiaomiCJH/article/details/78171117</guid><author>xiaomiCJH</author><pubDate>Sat, 07 Oct 2017 19:36:35 +0800</pubDate><description><![CDATA[序言：
为了满足编译器的需要， 当类设计者没有显示的声明Default Constructor的时候， 编译器为满足编译程序的需要， 将会按照一定的规则自动生成Default Constructor。
一、编译器自动合成Default Constructor的四种情况
1、类的成员对象包含默认构造函数
2、继承的基类有默认构造函数
3、该类有虚函数， 需要初始化virtual funct]]></description><category></category></item><item><title><![CDATA[工厂方法模式]]></title><link>https://blog.youkuaiyun.com/xiaomiCJH/article/details/78084412</link><guid>https://blog.youkuaiyun.com/xiaomiCJH/article/details/78084412</guid><author>xiaomiCJH</author><pubDate>Mon, 25 Sep 2017 14:00:27 +0800</pubDate><description><![CDATA[前言：在上一篇文章当中， 我们对简单工厂模式进行了分析， 他的缺点就是当我们有新的产品类需要生产的时候， 我们将会改变工厂类中的业务逻辑， 那样会违反开闭原则， 具体详细分析请见简单工厂模式。
如果用简单工厂模式， 去生产一系列的产品， 那么工厂类的业务逻辑将会更加繁重，产品类和工厂类之间的耦合度(可理解为工厂类与产品类之间的依赖程度)增加，将会严重的影响后期维护， 所以我们在这里又引入了一个新]]></description><category></category></item><item><title><![CDATA[虚函数与虚继承内存分析]]></title><link>https://blog.youkuaiyun.com/xiaomiCJH/article/details/78061252</link><guid>https://blog.youkuaiyun.com/xiaomiCJH/article/details/78061252</guid><author>xiaomiCJH</author><pubDate>Fri, 22 Sep 2017 11:37:07 +0800</pubDate><description><![CDATA[虚函数与虚继承寻踪

封装、继承、多态是面向对象语言的三大特性，熟悉C++的人对此应该不会有太多异议。C语言提供的struct，顶多算得上对数据的简单封装，而C++的引入把struct“升级”为class，使得面向对象的概念更加强大。继承机制解决了对象复用的问题，然而多重继承又会产生成员冲突的问题，虚继承在我看来更像是一种“不得已”的解决方案。多态让对象具有了运行时特性，并且它是软件设计复用的]]></description><category></category></item></channel></rss>