<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[afefept5224的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/afefept5224</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; afefept5224]]></copyright><item><title><![CDATA[Go异常处理]]></title><link>https://blog.youkuaiyun.com/afefept5224/article/details/102030786</link><guid>https://blog.youkuaiyun.com/afefept5224/article/details/102030786</guid><author>afefept5224</author><pubDate>Sun, 30 Aug 2015 15:32:00 +0800</pubDate><description><![CDATA[首先很抱歉，由于搬家，最近太多事情要处理，导致文章更新比较慢。
这篇文章，我们讲Go中的异常处理。
Go提供了两个内置函数 panic()和recover()用于异常处理。
Go中，对异常处理的整体原则是：多用errors包，少用panic。
对于可预见的错误，比如网络连接失败等，一般都使用errors，只有重大错误才会使用panic。

记住一个大原则：panic会导致程...]]></description><category></category></item><item><title><![CDATA[Go内建函数copy]]></title><link>https://blog.youkuaiyun.com/afefept5224/article/details/102030784</link><guid>https://blog.youkuaiyun.com/afefept5224/article/details/102030784</guid><author>afefept5224</author><pubDate>Sun, 30 Aug 2015 15:30:00 +0800</pubDate><description><![CDATA[Go内建函数copy:
func copy(dst, src []Type) int
用于将源slice的数据（第二个参数），复制到目标slice（第一个参数）。
返回值为拷贝了的数据个数，是len(dst)和len(src)中的最小值。
看代码：

package main

 

import (

"fmt"

)

 

func main()...]]></description><category></category></item><item><title><![CDATA[Go内置函数cap]]></title><link>https://blog.youkuaiyun.com/afefept5224/article/details/102030777</link><guid>https://blog.youkuaiyun.com/afefept5224/article/details/102030777</guid><author>afefept5224</author><pubDate>Sun, 30 Aug 2015 15:28:00 +0800</pubDate><description><![CDATA[func cap(v Type) int
返回指定类型的容量，根据不同类型，返回意义不同。
数组: 元素个数 (和len(v)一样).
数组指针: *v的元素个数 (和len(v)一样).
Slice: the maximum length the slice can reach when resliced;如果v==nil, cap(v) 值为0；
Channel: chan...]]></description><category></category></item><item><title><![CDATA[Go中iota是什么]]></title><link>https://blog.youkuaiyun.com/afefept5224/article/details/102030770</link><guid>https://blog.youkuaiyun.com/afefept5224/article/details/102030770</guid><author>afefept5224</author><pubDate>Thu, 04 Jun 2015 05:42:00 +0800</pubDate><description><![CDATA[Go iota是一个比较奇怪的存在，它只能用在const的申明中，是一个从0开始的行数索引器。

看代码

package main

import (
    "fmt"
)

const (
    i = iota
    j = iota
    k
    l
)

func main() {
    fmt.Println("i=", i...]]></description><category></category></item><item><title><![CDATA[go builtin包]]></title><link>https://blog.youkuaiyun.com/afefept5224/article/details/102030775</link><guid>https://blog.youkuaiyun.com/afefept5224/article/details/102030775</guid><author>afefept5224</author><pubDate>Thu, 04 Jun 2015 05:39:00 +0800</pubDate><description><![CDATA[Go builtin包提供了go预先声明的函数、变量等的文档。这些函数变量等的实现其实并不是在builtin包里，只是为了方便文档组织。
这些内置的变量、函数、类型无需引入包即可使用。

默认提供的有：
1、常量：
true,false,iota
关于iota,请参考周一的文章“go iota用法”

2、变量
nil

3、函数
func append(s...]]></description><category></category></item><item><title><![CDATA[Go随机数]]></title><link>https://blog.youkuaiyun.com/afefept5224/article/details/102030769</link><guid>https://blog.youkuaiyun.com/afefept5224/article/details/102030769</guid><author>afefept5224</author><pubDate>Mon, 01 Jun 2015 21:47:00 +0800</pubDate><description><![CDATA[Go math/rand包用于生成随机数。
代码：

package main

import "fmt"
import "math/rand"

func main() {

    fmt.Println(rand.Intn(100)) //产生0-100的随机整数

    fmt.Println(rand.Float64()) //产生0.0-1.0的随机...]]></description><category></category></item><item><title><![CDATA[Go 只读/只写channel]]></title><link>https://blog.youkuaiyun.com/afefept5224/article/details/102030773</link><guid>https://blog.youkuaiyun.com/afefept5224/article/details/102030773</guid><author>afefept5224</author><pubDate>Mon, 01 Jun 2015 21:46:00 +0800</pubDate><description><![CDATA[Go中channel可以是只读、只写、同时可读写的。
//定义只读的channel
read_only := make (&lt;-chan int)

//定义只写的channel
write_only := make (chan&lt;- int)

//可同时读写
read_write := make (chan int)

定义只读和只写的channel...]]></description><category></category></item><item><title><![CDATA[Go pprof性能监控]]></title><link>https://blog.youkuaiyun.com/afefept5224/article/details/102030767</link><guid>https://blog.youkuaiyun.com/afefept5224/article/details/102030767</guid><author>afefept5224</author><pubDate>Mon, 01 Jun 2015 21:45:00 +0800</pubDate><description><![CDATA[Go net/http/pprof包提供了一个在WEB项目中使用的性能监控的工具，
使用时只需要引用包：
_"net/http/pprof"
然后就可以在浏览器中访问地址：
http://localhost:port/debug/pprof/来查看性能信息。
最简单的示例：

package main

import (
    "net/http"
    _ "...]]></description><category></category></item><item><title><![CDATA[go os/exec执行外部程序]]></title><link>https://blog.youkuaiyun.com/afefept5224/article/details/102030765</link><guid>https://blog.youkuaiyun.com/afefept5224/article/details/102030765</guid><author>afefept5224</author><pubDate>Mon, 01 Jun 2015 21:44:00 +0800</pubDate><description><![CDATA[Go提供的os/exec包可以执行外部程序，比如调用系统命令等。
最简单的代码，调用pwd命令显示程序当前所在目录：

package main

import (
    "fmt"
    "os/exec"
)

func main() {
    pwdCmd := exec.Command("pwd")
    pwdOutput, _ := pwd...]]></description><category></category></item><item><title><![CDATA[Go signals 信号]]></title><link>https://blog.youkuaiyun.com/afefept5224/article/details/102030771</link><guid>https://blog.youkuaiyun.com/afefept5224/article/details/102030771</guid><author>afefept5224</author><pubDate>Mon, 01 Jun 2015 21:43:00 +0800</pubDate><description><![CDATA[Go中通过os/signals包，可以接受系统信号。

package main

import "fmt"
import "os"
import "os/signal"
import "syscall"

func main() {

    sigs := make(chan os.Signal, 1)
    signal.Notify(sigs, sysc...]]></description><category></category></item><item><title><![CDATA[Go 环境变量相关操作]]></title><link>https://blog.youkuaiyun.com/afefept5224/article/details/102030816</link><guid>https://blog.youkuaiyun.com/afefept5224/article/details/102030816</guid><author>afefept5224</author><pubDate>Mon, 01 Jun 2015 21:42:00 +0800</pubDate><description><![CDATA[Go语言中os包提供了一些环境变量的操作封装。包括：
设置环境变量：Setenv
获取环境变量：Getenv
删除指定的环境变量：Unsetenv
获取所有环境变量：Environ
清除所有环境变量：Clearenv
请看示例代码：

package main

 

import "os"

import "fmt"

 

func main() ...]]></description><category></category></item><item><title><![CDATA[Go命令行参数解析flag包]]></title><link>https://blog.youkuaiyun.com/afefept5224/article/details/102030810</link><guid>https://blog.youkuaiyun.com/afefept5224/article/details/102030810</guid><author>afefept5224</author><pubDate>Mon, 01 Jun 2015 21:40:00 +0800</pubDate><description><![CDATA[go语言提供的flag包可以解析命令行的参数，代码：

package main

 

import (

"flag"

"fmt"

)

 

func main() {

//第一个参数，为参数名称，第二个参数为默认值，第三个参数是说明

username := flag.String("name", "", "Input your us...]]></description><category></category></item><item><title><![CDATA[go sync.once用法]]></title><link>https://blog.youkuaiyun.com/afefept5224/article/details/102030814</link><guid>https://blog.youkuaiyun.com/afefept5224/article/details/102030814</guid><author>afefept5224</author><pubDate>Mon, 18 May 2015 21:13:00 +0800</pubDate><description><![CDATA[欢迎关注go语言微信公众号 每日go语言 golang_everyday

sync.once可以控制函数只能被调用一次。不能多次重复调用。示例代码：

package main

import (
 "fmt"
 "sync"
 "time"
)

func main() {
 o := &amp;sync.Once{}
 go do(o)
 go...]]></description><category></category></item><item><title><![CDATA[使用go语言编写IOS和Android程序]]></title><link>https://blog.youkuaiyun.com/afefept5224/article/details/102030808</link><guid>https://blog.youkuaiyun.com/afefept5224/article/details/102030808</guid><author>afefept5224</author><pubDate>Mon, 18 May 2015 21:09:00 +0800</pubDate><description><![CDATA[go语言目前已可以用来开发android和ios手机app。相关资料：

1、IOS
https://groups.google.com/forum/?utm_medium=email&amp;utm_source=footer#!topic/golang-china/zEh_pdSLHDs
需要能访问google
源码：https://bitbucket.org/minux...]]></description><category></category></item><item><title><![CDATA[go map的使用]]></title><link>https://blog.youkuaiyun.com/afefept5224/article/details/102030812</link><guid>https://blog.youkuaiyun.com/afefept5224/article/details/102030812</guid><author>afefept5224</author><pubDate>Mon, 18 May 2015 21:03:00 +0800</pubDate><description><![CDATA[欢迎关注go语言微信公众号 每日go语言 golang_everyday

go中map用于存储健值对。map格式：
map[KeyType]ValueType

声明一个map，键为字符型，值为int型:
m := make(map[string]int)

map中添加值：
m["a"] = 1

获取map中值：
fmt.Println(m["a"]...]]></description><category></category></item><item><title><![CDATA[go runtime.Gosched()的作用分析]]></title><link>https://blog.youkuaiyun.com/afefept5224/article/details/102030805</link><guid>https://blog.youkuaiyun.com/afefept5224/article/details/102030805</guid><author>afefept5224</author><pubDate>Sat, 02 May 2015 21:28:00 +0800</pubDate><description><![CDATA[untime.Gosched()用于让出CPU时间片。这就像跑接力赛，A跑了一会碰到代码runtime.Gosched()就把接力棒交给B了，A歇着了，B继续跑。
看代码：

package main

 

import (

"fmt"

"runtime"

)

 

func say(s string) {

for i := 0; i &...]]></description><category></category></item><item><title><![CDATA[go中的读写锁RWMutex]]></title><link>https://blog.youkuaiyun.com/afefept5224/article/details/102030809</link><guid>https://blog.youkuaiyun.com/afefept5224/article/details/102030809</guid><author>afefept5224</author><pubDate>Sat, 02 May 2015 21:26:00 +0800</pubDate><description><![CDATA[读写锁是针对于读写操作的互斥锁。
基本遵循两大原则：
1、可以随便读。多个goroutin同时读。
2、写的时候，啥都不能干。不能读，也不能写。

解释：
在32位的操作系统中，针对int64类型值的读操作和写操作不可能只由一个CPU指令完成。如果一个写的操作刚执行完了第一个指令，时间片换给另一个读的协程，这就会读到一个错误的数据。

RWMutex提供四个方法：
...]]></description><category></category></item><item><title><![CDATA[go互斥锁Mutex]]></title><link>https://blog.youkuaiyun.com/afefept5224/article/details/102030807</link><guid>https://blog.youkuaiyun.com/afefept5224/article/details/102030807</guid><author>afefept5224</author><pubDate>Sat, 02 May 2015 21:24:00 +0800</pubDate><description><![CDATA[go mutex是互斥锁，只有Lock和Unlock两个方法，在这两个方法之间的代码不能被多个goroutins同时调用到。
看代码：

package main

 

import (

"fmt"

"sync"

"time"

)

 

var m *sync.Mutex

 

func main() {

m = new(...]]></description><category></category></item><item><title><![CDATA[go import使用及. _的作用解析]]></title><link>https://blog.youkuaiyun.com/afefept5224/article/details/102030774</link><guid>https://blog.youkuaiyun.com/afefept5224/article/details/102030774</guid><author>afefept5224</author><pubDate>Mon, 20 Apr 2015 07:45:00 +0800</pubDate><description><![CDATA[go中import用于导入包。导入之后就可以使用包中的代码。
比如：

import(
"fmt"
)

在代码中就可以使用fmt包中的方法，如：

fmt.Println("hello world")


1、使用点操作引入包时，可以省略包前缀：

import(
. "fmt"
)

注意上面 fmt前多了 . 字符。代码中使用时：

Pri...]]></description><category></category></item><item><title><![CDATA[利用channel在goroutins之间控制同步和传递数据]]></title><link>https://blog.youkuaiyun.com/afefept5224/article/details/102030789</link><guid>https://blog.youkuaiyun.com/afefept5224/article/details/102030789</guid><author>afefept5224</author><pubDate>Mon, 20 Apr 2015 07:44:00 +0800</pubDate><description><![CDATA[在java等代码中，我们查询数据库的操作：
sql = "select * from ....";
result = db.query(sql)
for(item in result)
{
.....
}
但是在go语言中，这么做就有些土了，我们可以利用channel天生的队列和线程同步的特性来实现。这也是go和其它语言很明显的思维区别。
db的封装：
package ...]]></description><category></category></item></channel></rss>