锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲高清中文字幕综合网,怡红院亚洲红怡院在线观看,亚洲人成网站18禁止一区http://www.tkk7.com/oathleo/category/53779.html鍛嗗湪涓婃搗zh-cnSun, 22 Dec 2013 13:54:37 GMTSun, 22 Dec 2013 13:54:37 GMT60golang 涔?鎺ュ彛http://www.tkk7.com/oathleo/archive/2013/12/22/407869.htmloathleooathleoSun, 22 Dec 2013 04:45:00 GMThttp://www.tkk7.com/oathleo/archive/2013/12/22/407869.htmlhttp://www.tkk7.com/oathleo/comments/407869.htmlhttp://www.tkk7.com/oathleo/archive/2013/12/22/407869.html#Feedback1http://www.tkk7.com/oathleo/comments/commentRss/407869.htmlhttp://www.tkk7.com/oathleo/services/trackbacks/407869.htmlconn, err = ln.Accept()
go handleConnection(conn)鐪嬪埌榪欓噷鎴戞浘緇忔湁涓枒闂紝涓轟粈涔堜笉鏄?nbsp; handleConnection(&conn) ?

涓嬮潰榪欎釜渚嬪瓙瑙i噴榪欎釜闂

package main

import (
    "fmt"
)

type Interface interface {
    say() string
}

type Object struct {
}

func (this *Object) say() string {
    return "hello"
}

func do(i Interface) string {
    return i.say()
}

func main() {
    o := Object{}
    fmt.Println(do(&o))
    fmt.Printf("CCCCCCCCCCC:%T", o)
}

鍑芥暟鐨勫弬鏁頒互鎺ュ彛瀹氫箟錛岀紪璇戝櫒浼氳嚜宸卞垽鏂弬鏁版槸瀵硅薄榪樻槸瀵硅薄鐨勬寚閽?br /> 姣斿錛宻ay鏄寚閽堜笂鐨勬柟娉曪紝鎵浠o鍙帴鍙?span style="background-color: #eeeeee;">Object鐨勬寚閽堝仛鍙傛暟錛宒o(o)鏄紪璇戜笉榪囩殑

鎵浠ョ湅鍒板簱閲屾帴鍙e仛鍙傛暟綾誨瀷瀹氫箟鐨勬椂鍊欙紝鍙互綆鍗曡涓猴紝榪欎釜鎺ュ彛鑲畾鏄釜瀵硅薄鎸囬拡錛堣櫧鐒朵篃鍙互鐢ㄥ璞★紝鍗曚及璁℃病鏈夊摢涓被搴撲細鐢級

渚嬪錛?br /> conn, err = ln.Accept()
go handleConnection(conn)

榪欓噷conn鏄釜鎺ュ彛錛屼笉闇瑕?nbsp;go handleConnection(&conn)

oathleo 2013-12-22 12:45 鍙戣〃璇勮
]]>
golang瀹氭椂瀹氱偣浠誨姟http://www.tkk7.com/oathleo/archive/2013/12/19/407774.htmloathleooathleoThu, 19 Dec 2013 08:15:00 GMThttp://www.tkk7.com/oathleo/archive/2013/12/19/407774.htmlhttp://www.tkk7.com/oathleo/comments/407774.htmlhttp://www.tkk7.com/oathleo/archive/2013/12/19/407774.html#Feedback0http://www.tkk7.com/oathleo/comments/commentRss/407774.htmlhttp://www.tkk7.com/oathleo/services/trackbacks/407774.htmlpackage main

import (
    "fmt"
    "mag/common"
    "time"
)

func main() {
    c := make(chan bool, 10)

    tt := common.GetTodayGivenTime("161300")
    dd := common.SinceNow(tt)
    time.AfterFunc(dd, func() { //闈為樆濉?br />        //鍚庣畫姣?4灝忔椂寤虹珛鐩綍
        ticker24h := time.NewTicker(5 * time.Second)
        for {
            select {
            case <-ticker24h.C:
                fmt.Println("print")
            }
        }
    })

    <-c
}

oathleo 2013-12-19 16:15 鍙戣〃璇勮
]]>
golang append鏃秙lice len 鍜?caphttp://www.tkk7.com/oathleo/archive/2013/11/20/406595.htmloathleooathleoWed, 20 Nov 2013 10:48:00 GMThttp://www.tkk7.com/oathleo/archive/2013/11/20/406595.htmlhttp://www.tkk7.com/oathleo/comments/406595.htmlhttp://www.tkk7.com/oathleo/archive/2013/11/20/406595.html#Feedback1http://www.tkk7.com/oathleo/comments/commentRss/406595.htmlhttp://www.tkk7.com/oathleo/services/trackbacks/406595.html
澹版槑:
婧恠lice= src
娣誨姞slice = app
緇撴灉slice=tar
append鏃?/div>
len tar === len src +   len app
1錛夊鏋渓en(src) + len(app) <= cap(src)    cap tar  =   cap(src)
2錛夊惁鍒?nbsp;
      a) len(src) + len(app) > 2* cap(src)     cap tar  =   len(src) + len(app)
      b) cap(src) < len(src) + len(app) <= 2* cap(src)    cap tar = 2* cap(src)
    data := make([]int, 10, 20)
    data[0] = 1
    data[1] = 2

    dataappend := make([]int, 12, 30)//淇敼榪欎釜len 
    dataappend[0] = 1
    dataappend[1] = 2

    result := append(data, dataappend)

    result[0] = 99
    result[11] = 98

    fmt.Println("length:", len(data), "cap:", cap(data), ":", data)
    fmt.Println("result length:", len(result), "cap:", cap(result), ":", result)
    fmt.Println("length:", len(dataappend), "cap:", cap(dataappend), ":", dataappend)


oathleo 2013-11-20 18:48 鍙戣〃璇勮
]]>golang slice鍒嗗壊鍜宎ppend copy榪樻槸寮曠敤http://www.tkk7.com/oathleo/archive/2013/11/20/406594.htmloathleooathleoWed, 20 Nov 2013 10:46:00 GMThttp://www.tkk7.com/oathleo/archive/2013/11/20/406594.htmlhttp://www.tkk7.com/oathleo/comments/406594.htmlhttp://www.tkk7.com/oathleo/archive/2013/11/20/406594.html#Feedback1http://www.tkk7.com/oathleo/comments/commentRss/406594.htmlhttp://www.tkk7.com/oathleo/services/trackbacks/406594.html1.slice1:= slice[0:2]
寮曠敤錛岄潪澶嶅埗錛屾墍浠ヤ換浣曞slice1鎴杝lice鐨勪慨鏀歸兘浼氬獎鍝嶅鏂?/div>
data := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 0}
data1 := data[0:2]
data1[0] = 99
fmt.Println(data1)
fmt.Println(data)
[99 2]
[99 2 3 4 5 6 7 8 9 0]
2.append
append 姣旇緝鐗規畩
澹版槑:
婧恠lice= src
娣誨姞slice = app
緇撴灉slice=tar
1錛夊鏋渓en(src) + len(app) <= cap(src)  src鍜宼ar 鏄寚鍚戝悓涓鏁版嵁寮曠敤 錛屽嵆淇敼src鎴杢ar錛屼細褰卞搷瀵規柟
2錛夊惁鍒?tar 鏄痗opy鐨勬柟寮?nbsp;src + app 錛?span style="color: #ff0000; ">鍗充慨鏀箂rc鎴杢ar錛屼笉浼氬獎鍝嶅鏂?/span>
鏃犺鍝鎯呭喌涓嶄細褰卞搷app錛屽洜涓篴pp閮戒細鐢╟opy鐨勬柟寮忚繘鍏ar
 
func test2() {
data := make([]int, 10, 20)
data[0] = 1
data[1] = 2
dataappend := make([]int, 10, 20)//len <=10 鍒?nbsp; result[0] = 99 浼?褰卞搷婧怱lice
dataappend[0] = 1
dataappend[1] = 2
result := append(data, dataappend...)
result[0] = 99
result[11] = 98
fmt.Println("length:", len(data), ":", data)
fmt.Println("length:", len(result), ":", result)
fmt.Println("length:", len(dataappend), ":", dataappend)
}


oathleo 2013-11-20 18:46 鍙戣〃璇勮
]]>golang 涔? 鍘繪帀瀹氶暱鏁扮粍閲岀殑0 []byte 杞?stringhttp://www.tkk7.com/oathleo/archive/2013/11/19/406513.htmloathleooathleoTue, 19 Nov 2013 02:16:00 GMThttp://www.tkk7.com/oathleo/archive/2013/11/19/406513.htmlhttp://www.tkk7.com/oathleo/comments/406513.htmlhttp://www.tkk7.com/oathleo/archive/2013/11/19/406513.html#Feedback0http://www.tkk7.com/oathleo/comments/commentRss/406513.htmlhttp://www.tkk7.com/oathleo/services/trackbacks/406513.html index := bytes.IndexByte(buf_PN, 0)
rbyf_pn := buf_PN[0:index]


oathleo 2013-11-19 10:16 鍙戣〃璇勮
]]>
golang涔?windows涓嬫潃榪涚▼http://www.tkk7.com/oathleo/archive/2013/11/15/406377.htmloathleooathleoFri, 15 Nov 2013 06:07:00 GMThttp://www.tkk7.com/oathleo/archive/2013/11/15/406377.htmlhttp://www.tkk7.com/oathleo/comments/406377.htmlhttp://www.tkk7.com/oathleo/archive/2013/11/15/406377.html#Feedback3http://www.tkk7.com/oathleo/comments/commentRss/406377.htmlhttp://www.tkk7.com/oathleo/services/trackbacks/406377.html c := exec.Command("taskkill.exe", "/f", "/im", "test.exe")
err := c.Start()


oathleo 2013-11-15 14:07 鍙戣〃璇勮
]]>
golang slice Append http://www.tkk7.com/oathleo/archive/2013/11/05/406016.htmloathleooathleoTue, 05 Nov 2013 08:39:00 GMThttp://www.tkk7.com/oathleo/archive/2013/11/05/406016.htmlhttp://www.tkk7.com/oathleo/comments/406016.htmlhttp://www.tkk7.com/oathleo/archive/2013/11/05/406016.html#Feedback0http://www.tkk7.com/oathleo/comments/commentRss/406016.htmlhttp://www.tkk7.com/oathleo/services/trackbacks/406016.html
鍒囩墖s1涓婅褰曠殑鍒囩墖淇℃伅澶嶅埗緇檚2錛?br />
1.濡傛灉s1鎸囧悜鐨勫簳灞俛rray闀垮害涓嶅錛宎ppend鐨勮繃紼嬩細鍙戠敓濡備笅鎿嶄綔錛氬唴瀛樹腑涓嶄粎鏂板紑杈熶竴鍧楀尯鍩熷瓨鍌╝ppend鍚庣殑鍒囩墖淇℃伅錛岃屼笖闇瑕佹柊寮杈熶竴鍧楀尯鍩熷瓨鍌ㄥ簳灞俛rray錛堝鍒跺師鏉ョ殑array鑷寵繖鍧楁柊array涓級錛屾渶鍚庡啀append鏂版暟鎹繘鏂癮rray涓紝榪欐牱錛宻2鎸囧悜鏂癮rray銆?br />
2.濡傛灉s1鎸囧悜鐨勫簳灞俛rray闀垮害澶?
s2鍜宻1鎸囧悜鍚屼竴涓猘rray錛宎ppend鐨勭粨鏋滄槸鍐呭瓨涓柊寮杈熶竴涓尯鍩熷瓨鍌ㄦ柊鍒囩墖淇℃伅銆?br />
寮杈熶竴鍧楀尯鍩熷瓨鍌ㄥ簳灞俛rray 浣跨敤涓嬮潰鐨勭瓥鐣ワ細
1.濡傛灉 澧炲姞鐨?len < s鐨刢ap 鍒?鏂皊鐨刢ap*2
2.濡傛灉 澧炲姞鐨?len > s鐨刢ap 鍒?鏂皊鐨刢ap = 鑰乧ap + 澧炲姞鏁版嵁鐨?len

oathleo 2013-11-05 16:39 鍙戣〃璇勮
]]>
golang 瀹氭椂http://www.tkk7.com/oathleo/archive/2013/10/10/404842.htmloathleooathleoThu, 10 Oct 2013 07:07:00 GMThttp://www.tkk7.com/oathleo/archive/2013/10/10/404842.htmlhttp://www.tkk7.com/oathleo/comments/404842.htmlhttp://www.tkk7.com/oathleo/archive/2013/10/10/404842.html#Feedback0http://www.tkk7.com/oathleo/comments/commentRss/404842.htmlhttp://www.tkk7.com/oathleo/services/trackbacks/404842.html

 // (A)
time.AfterFunc(5 * time.Minute, func() {
    fmt.Printf("expired")
}

// (B) create a Timer object
timer := time.NewTimer(5 * time.Minute)
<-timer.C
fmt.Printf("expired")

// (C) time.After() returns timer.C internally
<-time.After(5 * time.Minute)
fmt.Printf("expired")


oathleo 2013-10-10 15:07 鍙戣〃璇勮
]]>
golang 闈炵紦鍐查氶亾 recv 鐨勬搷浣?鑲畾 鍦?send 鎿嶄綔 涔嬪墠鍙戠敓http://www.tkk7.com/oathleo/archive/2013/10/10/404830.htmloathleooathleoThu, 10 Oct 2013 02:56:00 GMThttp://www.tkk7.com/oathleo/archive/2013/10/10/404830.htmlhttp://www.tkk7.com/oathleo/comments/404830.htmlhttp://www.tkk7.com/oathleo/archive/2013/10/10/404830.html#Feedback0http://www.tkk7.com/oathleo/comments/commentRss/404830.htmlhttp://www.tkk7.com/oathleo/services/trackbacks/404830.html 涓瀹氫細鍦? “鍚戦氶亾鍙戦佹暟鎹?#8221;鐨勬搷浣滃畬鎴愬墠鍙戠敓銆?br />
package main

import (
    "fmt"
)

var c = make(chan int)
var str string

func ready() {
    str = "abc"
    fmt.Println("ready1")
    <-c //get
    fmt.Println("ready2")
}

func main() {
    go ready()
    c <- 1 //put
    fmt.Println(str)
}

ready1
ready2
abc


oathleo 2013-10-10 10:56 鍙戣〃璇勮
]]>
Go鎸囬拡 new makehttp://www.tkk7.com/oathleo/archive/2013/10/08/404721.htmloathleooathleoTue, 08 Oct 2013 02:49:00 GMThttp://www.tkk7.com/oathleo/archive/2013/10/08/404721.htmlhttp://www.tkk7.com/oathleo/comments/404721.htmlhttp://www.tkk7.com/oathleo/archive/2013/10/08/404721.html#Feedback0http://www.tkk7.com/oathleo/comments/commentRss/404721.htmlhttp://www.tkk7.com/oathleo/services/trackbacks/404721.htmlnew(T) 鍒嗛厤浜嗛浂鍊煎~鍏呯殑T
綾誨瀷鐨勫唴瀛樼┖闂?騫朵笖榪斿洖鍏跺湴鍧,涓涓?T 綾誨瀷鐨勫箋傜敤Go 鐨勬湳璇,瀹冭繑鍥炰簡涓涓?/div>
鎸囬拡,鎸囧悜鏂板垎閰嶇殑綾誨瀷T 鐨勯浂鍊箋傛湁涓鐐歸潪甯擱噸瑕?
new 榪斿洖鎸囬拡銆?br />
鍐呭緩鍑芥暟make(T, args) 涓巒ew(T) 鏈夌潃涓嶅悓鐨勫姛鑳姐傚畠鍙兘鍒涘緩slice,map
鍜宑hannel,騫朵笖榪斿洖涓涓湁鍒濆鍊?闈為浂)鐨凾 綾誨瀷,鑰屼笉鏄?T銆?/span>鏈川鏉ヨ,瀵艱嚧榪?/div>
涓変釜綾誨瀷鏈夋墍涓嶅悓鐨勫師鍥犳槸鎸囧悜鏁版嵁緇撴瀯鐨勫紩鐢ㄥ湪浣跨敤鍓嶅繀欏昏鍒濆鍖栥?br />
T{name:"aaa",age:11}
榪斿洖 T綾誨瀷 鑰屼笉鏄?T


oathleo 2013-10-08 10:49 鍙戣〃璇勮
]]>go鍘熺敓鏁版嵁鏁堢巼http://www.tkk7.com/oathleo/archive/2013/09/29/404597.htmloathleooathleoSun, 29 Sep 2013 01:57:00 GMThttp://www.tkk7.com/oathleo/archive/2013/09/29/404597.htmlhttp://www.tkk7.com/oathleo/comments/404597.htmlhttp://www.tkk7.com/oathleo/archive/2013/09/29/404597.html#Feedback0http://www.tkk7.com/oathleo/comments/commentRss/404597.htmlhttp://www.tkk7.com/oathleo/services/trackbacks/404597.html
鍏堜笂浠g爜
package main

import (
    "fmt"
    "math/rand"
    "opbuf"
    "time"
)

type RTValue struct {
    Time   int32
    Status int16
    Value  float32
}

func main() {

    size := 1000000
    col := make([]RTValue, size)
    for i := 0; i < size; i++ {
        col[i] = RTValue{Time: int32(i), Status: int16(i), Value: rand.Float32()}
    }

    fmt.Println("send data:", col[size-1])
    var opbuff *opbuf.OPBuffer = opbuf.NewOPBuffer()
    start := time.Now().UnixNano()
    for i := 0; i < size; i++ {
        //        opbuff.PutByte(col[i].Data)
        opbuff.PutInt32(col[i].Time)
        opbuff.PutInt16(col[i].Status)
        opbuff.PutFloat32(col[i].Value)
    }
    fmt.Println("send cost:", (time.Now().UnixNano()-start)/1000000)

    opbuff.Flush()

    start = time.Now().UnixNano()
    for i := 0; i < size; i++ {
        col[i].Time,_ = opbuff.GetInt32()
        col[i].Status,_ = opbuff.GetInt16()
        col[i].Value,_ = opbuff.GetFloat32()
    }
    fmt.Println("rev cost:", (time.Now().UnixNano()-start)/1000000)
    fmt.Println("rev data:", col[size-1])

}
123

Go鍘熺敓浠g爜鎬ц兘錛?/div>
total record: 1000000
send data: {999999 16959 0.69153386}
send cost: 93
rev cost: 61
rev data: {999999 16959 0.69153386}
 
緇撹錛?/div>
1.涓嶇浠涔堣璦錛?span style="color: #ff0000">澶ф壒閲忓悓綾誨瀷鏁版嵁鐨勪紶杈?/span>錛屽師鐢熸ц兘榪樻槸姣旂涓夋柟搴忓垪鍖? 鏁堢巼楂樺緢澶?
2.C++ 浣跨敤memcpy put 鍘熷綾誨瀷錛屾晥鐜囪繕鏄瘮go楂樺緢澶?br />
C++鍘熺敓浠g爜鎬ц兘錛?/div>
total record 1000000
time pack 11 ms
time unpack 57 ms
 
 


oathleo 2013-09-29 09:57 鍙戣〃璇勮
]]>go瀵硅薄搴忓垪鍖栧拰鍙嶅簭鍒楀寲http://www.tkk7.com/oathleo/archive/2013/09/29/go_ser.htmloathleooathleoSun, 29 Sep 2013 01:52:00 GMThttp://www.tkk7.com/oathleo/archive/2013/09/29/go_ser.htmlhttp://www.tkk7.com/oathleo/comments/404595.htmlhttp://www.tkk7.com/oathleo/archive/2013/09/29/go_ser.html#Feedback0http://www.tkk7.com/oathleo/comments/commentRss/404595.htmlhttp://www.tkk7.com/oathleo/services/trackbacks/404595.html榪囩▼
1.瀵硅薄搴忓垪鍖栦負 byte
2.byte鍙嶅簭涓哄璞?br />3.gzip鍘嬬緝byte

嫻嬭瘯璇█go
嫻嬭瘯鏂規錛? raw byte錛宩son ,bson, msgpack 錛坧rotostuff闇瑕佸厛鍋氬璞¢厤緗枃浠訛紝姣旇緝楹葷儲錛岄氬父璁や負鍜宮sgpack鎬ц兘鐩稿綋 錛?br />緇撴灉錛歮sgpack 鑳滃嚭


澶у皬
gzip鍘嬬緝鍚庡ぇ灝?br /> 瀵硅薄鍒癰yte鑰楁椂
byte鍒板璞¤楁椂
raw 10000000
6573252錛?5%錛?/td> 鏈祴璇?br /> 鏈祴璇?/td>
json
47515988 7919511 (17%) 3248ms 5280ms
bson
49888910 9506965 錛?9%錛?br /> 3863ms 6235ms
msgpack
29934223 7448484 2046ms 3113ms


raw data: 1000000
raw data gzip compress: 6573252 //gzip鍘嬬緝鍚庡ぇ灝?br />
start: 1000000
Marshal cost: 3248  //json 搴忓垪鍖栬楁椂
json string: 47515988 
json byte: 47515988  //浜岃繘鍒舵暟緇勫ぇ灝?br />Unmarshal cost: 5280  //json 鍙嶅簭鍒楀寲鑰楁椂
test data: {1 100 0.9405091}
json gzip compress: 7919511 //gzip鍘嬬緝鍚庡ぇ灝?br />
start
Marshal cost: 3863
bson byte: 49888910
Unmarshal cost: 6235
test data: {1 100 0.9405091}
bson gzip compress: 9506965


start: 1000000
Marshal cost: 2046
msgpack: 29934223
Unmarshal cost: 3113
test data: {1 100 0.9405091}
msgpack gzip compress: 7448484

oathleo 2013-09-29 09:52 鍙戣〃璇勮
]]>
bson鍜宩sonhttp://www.tkk7.com/oathleo/archive/2013/09/23/Bson_Json.htmloathleooathleoMon, 23 Sep 2013 06:08:00 GMThttp://www.tkk7.com/oathleo/archive/2013/09/23/Bson_Json.htmlhttp://www.tkk7.com/oathleo/comments/404326.htmlhttp://www.tkk7.com/oathleo/archive/2013/09/23/Bson_Json.html#Feedback0http://www.tkk7.com/oathleo/comments/commentRss/404326.htmlhttp://www.tkk7.com/oathleo/services/trackbacks/404326.html
緇撴灉bson姣攋son榪樺ぇ涓鐐癸紝紜疄鍑轟箮鎰忔枡

涓漢緇撹鏄疊SON瀵規瘮json鏇村姞閫傚悎瀛樺偍錛屽湪浼犺緭涓婃病鏈夊お澶т紭鍔?br />
銆銆BSON鐩稿JSon
1.鏇村揩鐨勯亶鍘嗛熷害
2.鎿嶄綔鏇寸畝鏄?/div>
3.澧炲姞浜嗛澶栫殑鏁版嵁綾誨瀷

raw data: 10000
raw data gzip compress: 6553

json string: 44524
json byte: 44524
json gzip compress: 8125

bson byte: 46910
bson gzip compress: 9721


package main

import (
    "bytes"
    "compress/gzip"
    "fmt"
    "labix.org/v2/mgo/bson"
    "math/rand"
)

type HisCollection struct {
    RTValues []RTValue
}

type RTValue struct {
    Time   int32
    Status int16
    Value  float32
}

func main() {
    fmt.Println("start")

    size := 1000
    col := make([]RTValue, size)

    for i := 0; i < size; i++ {
        col[i] = RTValue{Time: int32(i), Status: 100, Value: rand.Float32()}
    }

    his := HisCollection{RTValues: col}
    data, err := bson.Marshal(&his)
    if err != nil {
        panic(err)
    }
    //    fmt.Println(data)
    fmt.Println("bson byte:", len(data))

    var compress_data_buf bytes.Buffer
    writer := gzip.NewWriter(&compress_data_buf)
    defer writer.Close()

    writer.Write(data)
    writer.Flush()

    fmt.Println("bson gzip compress:",len(compress_data_buf.Bytes()))

}

package main

import (
    "bytes"
    "compress/gzip"
    "fmt"
    "math/rand"
    "openplant/opnet"
)

func main() {
    var compress_data_buf bytes.Buffer
    writer := gzip.NewWriter(&compress_data_buf)
    defer writer.Close()

    size := 1000
    for i := 0; i < size; i++ {
        writer.Write(opnet.WarpInt32ToByte(int32(i)))
        writer.Write(opnet.WarpInt16ToByte(int16(100)))
        writer.Write(opnet.WarpFloat32ToByte(rand.Float32()))
    }

    writer.Flush()

    fmt.Println("raw data:", 10000)

    fmt.Println("raw data gzip compress:", len(compress_data_buf.Bytes()))

}
111

package main

import (
    "bytes"
    "compress/gzip"
    "encoding/json"
    "fmt"
    "math/rand"
)

type HisCollection struct {
    RTValues []RTValue
}

type RTValue struct {
    Time   int32
    Status int16
    Value  float32
}

func main() {
    fmt.Println("start")

    size := 1000
    col := make([]RTValue, size)

    for i := 0; i < size; i++ {
        col[i] = RTValue{Time: int32(i), Status: 100, Value: rand.Float32()}
    }

    his := HisCollection{RTValues: col}

    data, err := json.Marshal(&his)

    fmt.Println("json string:", string(data))
    fmt.Println("json string:", len(string(data)))

    if err != nil {
        panic(err)
    }
    //    fmt.Println(data)
    fmt.Println("json byte:", len(data))

    var compress_data_buf bytes.Buffer
    writer := gzip.NewWriter(&compress_data_buf)
    defer writer.Close()

    writer.Write(data)
    writer.Flush()

    fmt.Println("json gzip compress:", len(compress_data_buf.Bytes()))

}


oathleo 2013-09-23 14:08 鍙戣〃璇勮
]]>golang 涔? bson 涓?struct 杞崲http://www.tkk7.com/oathleo/archive/2013/09/22/golang_bson_struct_mongo.htmloathleooathleoSun, 22 Sep 2013 08:08:00 GMThttp://www.tkk7.com/oathleo/archive/2013/09/22/golang_bson_struct_mongo.htmlhttp://www.tkk7.com/oathleo/comments/404287.htmlhttp://www.tkk7.com/oathleo/archive/2013/09/22/golang_bson_struct_mongo.html#Feedback0http://www.tkk7.com/oathleo/comments/commentRss/404287.htmlhttp://www.tkk7.com/oathleo/services/trackbacks/404287.htmlbson鐨勪粙緇嶄笉璇翠簡
golang涓嬬殑瑙f瀽鍖呮壘鍒?涓?涓涓槸mongo鐨?a >http://labix.org/gobson
錛屽彟澶栦竴涓瘮杈冨皬浼?a >https://github.com/sbunce/bson

榪欓噷鐢ㄧ殑鏄痬ongo鐨勪綔涓轟緥瀛愩?br />瀵硅薄鍔犱笂涓嶅悓鐨勬敞瑙o紝
鍙互杞繪澗杞垚xml json bson 鎯蟲兂閮藉叴濂?nbsp;
package main

import (
    "fmt"
    "labix.org/v2/mgo/bson"
)

type TestStruct struct {
    Name string
    ID   int32
}

func main() {
    fmt.Println("start")
    data, err := bson.Marshal(&TestStruct{Name: "Bob"})
    if err != nil {
        panic(err)
    }
    fmt.Println("%q", data)

    value := TestStruct{}
    err2 := bson.Unmarshal(data, &value)
    if err2 != nil {
        panic(err)
    }
    fmt.Println("value:", value)

    mmap := bson.M{}
    err3 := bson.Unmarshal(data, mmap)
    if err3 != nil {
        panic(err)
    }
    fmt.Println("mmap:", mmap)

}


oathleo 2013-09-22 16:08 鍙戣〃璇勮
]]>
Golang 寮傚父澶勭悊http://www.tkk7.com/oathleo/archive/2013/09/22/404272.htmloathleooathleoSun, 22 Sep 2013 01:32:00 GMThttp://www.tkk7.com/oathleo/archive/2013/09/22/404272.htmlhttp://www.tkk7.com/oathleo/comments/404272.htmlhttp://www.tkk7.com/oathleo/archive/2013/09/22/404272.html#Feedback0http://www.tkk7.com/oathleo/comments/commentRss/404272.htmlhttp://www.tkk7.com/oathleo/services/trackbacks/404272.htmlPanic鍜孯ecover

Go娌℃湁鍍廕ava閭f牱鐨勫紓甯告満鍒訛紝瀹冧笉鑳芥姏鍑哄紓甯革紝鑰屾槸浣跨敤浜?code style="margin: 0px 2px; padding: 0px 5px; white-space: nowrap; border: 1px solid #eaeaea; background-color: #f8f8f8; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; font-family: consolas, courier; font-size: 13px; line-height: 20px;">panic鍜?code style="margin: 0px 2px; padding: 0px 5px; white-space: nowrap; border: 1px solid #eaeaea; background-color: #f8f8f8; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; font-family: consolas, courier; font-size: 13px; line-height: 20px;">recover鏈哄埗銆備竴瀹氳璁頒綇錛屼綘搴斿綋鎶婂畠浣滀負鏈鍚庣殑鎵嬫鏉ヤ嬌鐢紝涔熷氨鏄錛屼綘鐨勪唬鐮佷腑搴斿綋娌℃湁錛屾垨鑰呭緢灝戞湁panic鐨勪笢瑗褲傝繖鏄釜寮哄ぇ鐨勫伐鍏鳳紝璇鋒槑鏅哄湴浣跨敤瀹冦傞偅涔堬紝鎴戜滑搴旇濡備綍浣跨敤瀹冨憿錛?/p>

Panic

鏄竴涓唴寤哄嚱鏁幫紝鍙互涓柇鍘熸湁鐨勬帶鍒舵祦紼嬶紝榪涘叆涓涓護浜烘亹鎱岀殑嫻佺▼涓傚綋鍑芥暟F璋冪敤panic錛屽嚱鏁?code style="margin: 0px 2px; padding: 0px 5px; white-space: nowrap; border: 1px solid #eaeaea; background-color: #f8f8f8; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; font-family: consolas, courier; font-size: 13px; line-height: 20px;">F鐨勬墽琛岃涓柇錛屼絾鏄?code style="margin: 0px 2px; padding: 0px 5px; white-space: nowrap; border: 1px solid #eaeaea; background-color: #f8f8f8; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; font-family: consolas, courier; font-size: 13px; line-height: 20px;">F涓殑寤惰繜鍑芥暟浼氭甯告墽琛岋紝鐒跺悗F榪斿洖鍒拌皟鐢ㄥ畠鐨勫湴鏂廣傚湪璋冪敤鐨勫湴鏂癸紝F鐨勮涓哄氨鍍忚皟鐢ㄤ簡panic銆傝繖涓榪囩▼緇х畫鍚戜笂錛岀洿鍒板彂鐢?code style="margin: 0px 2px; padding: 0px 5px; white-space: nowrap; border: 1px solid #eaeaea; background-color: #f8f8f8; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; font-family: consolas, courier; font-size: 13px; line-height: 20px;">panic鐨?code style="margin: 0px 2px; padding: 0px 5px; white-space: nowrap; border: 1px solid #eaeaea; background-color: #f8f8f8; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; font-family: consolas, courier; font-size: 13px; line-height: 20px;">goroutine涓墍鏈夎皟鐢ㄧ殑鍑芥暟榪斿洖錛屾鏃剁▼搴忛鍑恒傛亹鎱屽彲浠ョ洿鎺ヨ皟鐢?code style="margin: 0px 2px; padding: 0px 5px; white-space: nowrap; border: 1px solid #eaeaea; background-color: #f8f8f8; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; font-family: consolas, courier; font-size: 13px; line-height: 20px;">panic浜х敓銆備篃鍙互鐢辮繍琛屾椂閿欒浜х敓錛屼緥濡傝闂秺鐣岀殑鏁扮粍銆?/p>

Recover

鏄竴涓唴寤虹殑鍑芥暟錛屽彲浠ヨ榪涘叆浠や漢鎭愭厡鐨勬祦紼嬩腑鐨?code style="margin: 0px 2px; padding: 0px 5px; white-space: nowrap; border: 1px solid #eaeaea; background-color: #f8f8f8; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; font-family: consolas, courier; font-size: 13px; line-height: 20px;">goroutine鎭㈠榪囨潵銆?code style="margin: 0px 2px; padding: 0px 5px; white-space: nowrap; border: 1px solid #eaeaea; background-color: #f8f8f8; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; font-family: consolas, courier; font-size: 13px; line-height: 20px;">recover浠呭湪寤惰繜鍑芥暟涓湁鏁堛傚湪姝e父鐨勬墽琛岃繃紼嬩腑錛岃皟鐢?code style="margin: 0px 2px; padding: 0px 5px; white-space: nowrap; border: 1px solid #eaeaea; background-color: #f8f8f8; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; font-family: consolas, courier; font-size: 13px; line-height: 20px;">recover浼氳繑鍥?code style="margin: 0px 2px; padding: 0px 5px; white-space: nowrap; border: 1px solid #eaeaea; background-color: #f8f8f8; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; font-family: consolas, courier; font-size: 13px; line-height: 20px;">nil錛屽茍涓旀病鏈夊叾瀹冧換浣曟晥鏋溿傚鏋滃綋鍓嶇殑goroutine闄峰叆鎭愭厡錛岃皟鐢?code style="margin: 0px 2px; padding: 0px 5px; white-space: nowrap; border: 1px solid #eaeaea; background-color: #f8f8f8; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; font-family: consolas, courier; font-size: 13px; line-height: 20px;">recover鍙互鎹曡幏鍒?code style="margin: 0px 2px; padding: 0px 5px; white-space: nowrap; border: 1px solid #eaeaea; background-color: #f8f8f8; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; font-family: consolas, courier; font-size: 13px; line-height: 20px;">panic鐨勮緭鍏ュ鹼紝騫朵笖鎭㈠姝e父鐨勬墽琛屻?/p>

涓嬮潰榪欎釜鍑芥暟婕旂ず浜嗗浣曞湪榪囩▼涓嬌鐢?code style="margin: 0px 2px; padding: 0px 5px; white-space: nowrap; border: 1px solid #eaeaea; background-color: #f8f8f8; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; font-family: consolas, courier; font-size: 13px; line-height: 20px;">panic

var user = os.Getenv("USER")  func init() {     if user == "" {         panic("no value for $USER")     } } 

涓嬮潰榪欎釜鍑芥暟媯鏌ヤ綔涓哄叾鍙傛暟鐨勫嚱鏁板湪鎵ц鏃舵槸鍚︿細浜х敓panic錛?/strong>

func throwsPanic(f func()) (b bool) {     defer func() {         if x := recover(); x != nil {             b = true         }     }()     f() //鎵ц鍑芥暟f錛屽鏋渇涓嚭鐜頒簡panic錛岄偅涔堝氨鍙互鎭㈠鍥炴潵     return } 

鏈瀹規槗鐞嗚В灝辨槸緇欎釜渚嬪瓙錛屾枃绔犻噷鏈変緥瀛愶細

package main  import(     "fmt"     //"os" )  var user = "" func inita() {     defer func(){         fmt.Print("defer##\n")     }()     if user == "" {         fmt.Print("@@@before panic\n")         panic("no value for user\n")         fmt.Print("!!after panic\n")     } }  func throwsPanic (f func()) (b bool){     defer func(){         if x:= recover(); x != nil{             fmt.Print(x)             b = true         }     }()     f()     fmt.Print("after the func run")     return }  func main(){     throwsPanic(inita) } 

鎵ц緇撴灉錛?/p>

D:\go>go run b.go
@@@before panic
defer##
no value for user

濡備笂闈㈡墍璇寸殑錛?/p>

panic鍦?code style="margin: 0px 2px; padding: 0px 5px; white-space: nowrap; border: 1px solid #eaeaea; background-color: #f8f8f8; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; font-family: consolas, courier; font-size: 13px; line-height: 20px;">user=""鏃訛紝鎵撴柇浜嗗嚱鏁扮殑鎵ц錛?code style="margin: 0px 2px; padding: 0px 5px; white-space: nowrap; border: 1px solid #eaeaea; background-color: #f8f8f8; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; font-family: consolas, courier; font-size: 13px; line-height: 20px;">fmt.Print("!!after panic\n")娌℃湁鎵ц銆?浣嗗嚱鏁頒腑鐨勫歡榪熷嚱鏁頒細姝e父鎵ц錛屾墦鍗頒簡 defer##銆傜劧鍚庤繑鍥炲埌璋冪敤璇ュ嚱鏁扮殑鍦版柟錛岀戶緇笂闈㈢殑榪囩▼銆?/p>

鐩村埌鎵ц瀹屾墍鏈夊嚱鏁扮殑defer錛岄鍑虹▼搴忋?code style="margin: 0px 2px; padding: 0px 5px; white-space: nowrap; border: 1px solid #eaeaea; background-color: #f8f8f8; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; font-family: consolas, courier; font-size: 13px; line-height: 20px;">Recover鍙互鎹曡幏鍒?code style="margin: 0px 2px; padding: 0px 5px; white-space: nowrap; border: 1px solid #eaeaea; background-color: #f8f8f8; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; font-family: consolas, courier; font-size: 13px; line-height: 20px;">panic鐨勫鹼紝涓婇潰鐨勬墦鍗?code style="margin: 0px 2px; padding: 0px 5px; white-space: nowrap; border: 1px solid #eaeaea; background-color: #f8f8f8; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; font-family: consolas, courier; font-size: 13px; line-height: 20px;">no value for user銆傚茍涓旀仮澶嶆甯哥殑鎵ц銆?/p>

oathleo 2013-09-22 09:32 鍙戣〃璇勮
]]>
Go璇█鐨勪紶鍙傚拰浼犲紩鐢?/title><link>http://www.tkk7.com/oathleo/archive/2013/09/16/404106.html</link><dc:creator>oathleo</dc:creator><author>oathleo</author><pubDate>Mon, 16 Sep 2013 01:23:00 GMT</pubDate><guid>http://www.tkk7.com/oathleo/archive/2013/09/16/404106.html</guid><wfw:comment>http://www.tkk7.com/oathleo/comments/404106.html</wfw:comment><comments>http://www.tkk7.com/oathleo/archive/2013/09/16/404106.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/oathleo/comments/commentRss/404106.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/oathleo/services/trackbacks/404106.html</trackback:ping><description><![CDATA[<div style="padding-top: 5px; padding-bottom: 5px; margin: 0px 0px 10px; font-family: 寰蔣闆呴粦, Verdana, sans-serif, 瀹嬩綋; font-size: 13px; line-height: normal; background-color: #ffffff;"><h1>Go璇█鐨勪紶鍙傚拰浼犲紩鐢╗OSC婧愬垱浼氫富棰樿ˉ鍏?]</h1><div style="margin: 0px; color: #666666;"><span style="padding: 0px; margin: 0px; float: right;"><span id="p_attention_count" style="padding: 0px; margin: 0px 2px; font-weight: bold; color: #aa0000;">66</span>浜烘敹钘忔鏂囩珷, <span id="attention_it" style="padding: 0px; margin: 0px;"><a id="favor_trigger" title="娣誨姞鍒版敹钘忓す" style="padding: 0px; margin: 0px; color: #aa0000; outline: 0px;">鎴戣鏀惰棌</a></span></span>鍙戣〃浜?澶╁墠(2013-09-14 22:10) , 宸叉湁<strong style="padding: 0px; margin: 0px 2px; color: #aa0000;">1496</strong>嬈¢槄璇?錛屽叡<strong style="padding: 0px; margin: 0px 2px; color: #aa0000;"><a style="padding: 0px; margin: 0px; color: #aa0000; outline: 0px;">12</a></strong>涓瘎璁?/div></div><div style="padding: 20px; margin: 0px; background-color: #f6f6f6; line-height: 23px; font-family: 寰蔣闆呴粦, Verdana, sans-serif, 瀹嬩綋; font-size: 13px;"><p style="padding: 0px; margin: 0px; font-size: 18px; color: #15a230;">鐩綍錛歔 <span style="padding: 0px; margin: 0px; font-size: 14px;"><a id="AnchorContentToggle" title="鏀惰搗" style="padding: 0px; margin: 0px; color: #4466bb; outline: 0px; text-decoration: none;">-</a></span> ]</p><div class="fiuzvbe" id="AnchorContent" style="padding: 10px; margin: 0px;"><li style="padding: 3px 0px; margin: 0px; list-style: none; text-indent: 20px;"><a style="padding: 0px; margin: 0px; color: #4466bb; outline: 0px; text-decoration: none;">浼犲弬鍜屼紶寮曠敤鐨勯棶棰?/a></li><li style="padding: 3px 0px; margin: 0px; list-style: none; text-indent: 20px;"><a style="padding: 0px; margin: 0px; color: #4466bb; outline: 0px; text-decoration: none;">slice涓嶆槸寮曠敤!</a></li><li style="padding: 3px 0px; margin: 0px; list-style: none; text-indent: 20px;"><a style="padding: 0px; margin: 0px; color: #4466bb; outline: 0px; text-decoration: none;">浠涔堝彨寮曠敤?</a></li><li style="padding: 3px 0px; margin: 0px; list-style: none; text-indent: 20px;"><a style="padding: 0px; margin: 0px; color: #4466bb; outline: 0px; text-decoration: none;">涓轟粈涔坰lice涓嶆槸寮曠敤?</a></li><li style="padding: 3px 0px; margin: 0px; list-style: none; text-indent: 20px;"><a style="padding: 0px; margin: 0px; color: #4466bb; outline: 0px; text-decoration: none;">涓轟粈涔堝緢澶氫漢璇互涓簊lice鏄紩鐢ㄥ憿?</a></li><li style="padding: 3px 0px; margin: 0px; list-style: none; text-indent: 20px;"><a style="padding: 0px; margin: 0px; color: #4466bb; outline: 0px; text-decoration: none;">浼犳寚閽堝拰浼犲紩鐢ㄦ槸絳変環鐨勫悧?</a></li><li style="padding: 3px 0px; margin: 0px; list-style: none; text-indent: 20px;"><a style="padding: 0px; margin: 0px; color: #4466bb; outline: 0px; text-decoration: none;">鎵鏈夌被鍨嬬殑鍑芥暟鍙傛暟閮芥槸浼犲肩殑!</a></li><li style="padding: 3px 0px; margin: 0px; list-style: none; text-indent: 20px;"><a style="padding: 0px; margin: 0px; color: #4466bb; outline: 0px; text-decoration: none;">閭o璇█鏈変紶寮曠敤鐨勮娉曞悧?</a></li><li style="padding: 3px 0px; margin: 0px; list-style: none; text-indent: 20px;"><a style="padding: 0px; margin: 0px; color: #4466bb; outline: 0px; text-decoration: none;">鎬葷粨</a></li></div></div><div style="margin: 0px; font-size: 10.5pt; overflow: hidden; color: #333333; line-height: 25px; font-family: 寰蔣闆呴粦, Verdana, sans-serif, 瀹嬩綋; background-color: #ffffff;"><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">OSC婧愬垱浼氫富棰樿ˉ鍏呯郴鍒?</p><ol style="padding: 0px; margin: 10px 20px; list-style-position: inside;"><li style="padding: 0px; margin: 0px;"><a rel="nofollow" style="padding: 0px; margin: 0px; color: #4466bb; outline: 0px;">Go璇█鐨勪紶鍙傚拰浼犲紩鐢?/a></li><li style="padding: 0px; margin: 0px;"><a rel="nofollow" style="padding: 0px; margin: 0px; color: #4466bb; outline: 0px;">Go璇█鐨勭被鍨嬭漿鎹㈠拰綾誨瀷鏂█</a></li></ol><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">Go璇█瑙勮寖铏界劧寰堢畝鍗? 浣嗘槸娣卞叆鎺屾彙Go璇█鍗撮渶瑕佸緢澶氬簳灞傜煡璇?</p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">鏈潵<a rel="nofollow" style="padding: 0px; margin: 0px; color: #4466bb; outline: 0px;">絎?0鏈熺殑姝︽眽OSC婧愬垱浼?/a>鏈塆o璇█鐨勪笓棰樿搴? 璋佺煡閬撹鍙栨秷灝卞彇娑堜簡.</p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">鎴戞渶榪戜篃鏁寸悊浜嗕竴浜汫o璇█璧勬枡, 鏈塆o璇█鐨勫巻鍙?鐜扮姸/鏈潵鍙戝睍鐨勫叓鍗﹀拰Go璇█甯歌鐨勯棶棰樺拰闄烽槺涓や釜閮ㄥ垎, 鏈潵鎵撶畻OSC婧愬垱浼氳兘鍜屾姹夌殑Gopher鍒嗕韓 涓嬬殑, 璋佺煡閬?鐢變簬涓嶆槸璧炲姪鍟嗕篃涓嶆槸寰蔣鐨勫ぇ鐗?涓誨姙鏂規牴鏈笉緇欎換浣曠殑鏈轟細.</p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">100+浜烘暟鐨勪氦嫻佷細鍩烘湰閮芥槸鎵貳, 榪樻槸灝忚妯$殑璁ㄨ娌欓緳姣旇緝闈犺氨, 浠ュ悗鍐嶄篃涓嶄細鍘籓SC婧愬垱浼氬綋鍚紬浜?</p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">鐜板湪璁″垝灝嗗悇涓皬闂鏆傛椂浣滀負鍗氬鍙戣〃.</p><h2>浼犲弬鍜屼紶寮曠敤鐨勯棶棰?/h2><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">寰堝闈炲畼鏂圭殑鏂囨。鍜屾暀鏉?鍖呮嫭涓浜涘凡緇忓嚭鐗堢殑鍥句功), 瀵笹o璇█鐨勪紶鍙傚拰寮曠敤鐨勮瑙?閮芥湁寰堝闂. 瀵艱嚧浼楀Go璇█鏂版墜瀵笹o鐨勫嚱鏁板弬鏁頒紶鍙傛湁寰堝璇В.</p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">鑰屼紶鍙傚拰浼犲紩鐢ㄦ槸緙栫▼璇█鐨勬牴鏈棶棰? 濡傛灉榪欎釜闂鐞嗚В閿欒鍙兘浼氬鑷村緢澶氶棶棰?</p><h2>slice涓嶆槸寮曠敤!</h2><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">棣栧厛, Go璇█鐨勫嚱鏁拌皟鐢ㄥ弬鏁板叏閮ㄦ槸浼犲肩殑, 鍖呮嫭 <code style="padding: 2px 5px; margin: 0px 2px; border: 1px solid #dddddd; background-color: #f6f6f6; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-break: break-all;">slice</code>/<code style="padding: 2px 5px; margin: 0px 2px; border: 1px solid #dddddd; background-color: #f6f6f6; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-break: break-all;">map</code>/<code style="padding: 2px 5px; margin: 0px 2px; border: 1px solid #dddddd; background-color: #f6f6f6; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-break: break-all;">chan</code> 鍦ㄥ唴鎵鏈夌被鍨? 娌℃湁浼犲紩鐢ㄧ殑璇存硶.</p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">鍏蜂綋璇風湅Go璇█鐨勮鑼?</p><blockquote style="padding: 20px 60px; margin: 15px 0px; quotes: '', ''; position: relative; background-color: #f6f6f6;"><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">After they are evaluated, <strong style="padding: 0px; margin: 0px;">the parameters of the call are passed by value</strong> to the function and the called function begins execution.</p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">from: <a rel="nofollow" style="padding: 0px; margin: 0px; color: #4466bb; outline: 0px;">http://golang.org/ref/spec#Calls</a></p></blockquote><h2>浠涔堝彨寮曠敤?</h2><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">姣斿鏈変互涓嬩唬鐮?</p><pre style="padding: 5px; margin-top: 10px; margin-bottom: 10px; line-height: 18px; font-size: 9pt; font-family: 'Courier New', Arial; border-width: 1px 1px 1px 5px; border-style: solid; border-color: #dddddd #dddddd #dddddd #6ce26c; background-color: #f6f6f6;"><code style="padding: 0px; margin: 0px; border: none; background-color: transparent; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-break: break-all;">var a Object doSomething(a) // 淇敼a鐨勫?print(a) </code></pre><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">濡傛灉鍑芥暟<code style="padding: 2px 5px; margin: 0px 2px; border: 1px solid #dddddd; background-color: #f6f6f6; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-break: break-all;">doSomething</code>淇敼<code style="padding: 2px 5px; margin: 0px 2px; border: 1px solid #dddddd; background-color: #f6f6f6; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-break: break-all;">a</code>鐨勫? 鐒跺悗<code style="padding: 2px 5px; margin: 0px 2px; border: 1px solid #dddddd; background-color: #f6f6f6; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-break: break-all;">print</code>鎵撳嵃鍑烘潵鐨勪篃鏄慨鏀瑰悗鐨勫? 閭d箞灝卞彲浠ヨ涓?code style="padding: 2px 5px; margin: 0px 2px; border: 1px solid #dddddd; background-color: #f6f6f6; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-break: break-all;">doSomething</code>鏄氳繃寮曠敤鐨勬柟寮忎嬌鐢ㄤ簡鍙傛暟<code style="padding: 2px 5px; margin: 0px 2px; border: 1px solid #dddddd; background-color: #f6f6f6; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-break: break-all;">a</code>.</p><h2>涓轟粈涔坰lice涓嶆槸寮曠敤?</h2><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">鎴戜滑鏋勯犱互涓嬬殑浠g爜:</p><pre style="padding: 5px; margin-top: 10px; margin-bottom: 10px; line-height: 18px; font-size: 9pt; font-family: 'Courier New', Arial; border-width: 1px 1px 1px 5px; border-style: solid; border-color: #dddddd #dddddd #dddddd #6ce26c; background-color: #f6f6f6;"><code style="padding: 0px; margin: 0px; border: none; background-color: transparent; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-break: break-all;">func main() { a := []int{1,2,3} fmt.Println(a) modifySlice(a) fmt.Println(a) } func modifySlice(data []int) { data = nil } </code></pre><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">鍏朵腑<code style="padding: 2px 5px; margin: 0px 2px; border: 1px solid #dddddd; background-color: #f6f6f6; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-break: break-all;">modifySlice</code>淇敼浜嗗垏鐗?code style="padding: 2px 5px; margin: 0px 2px; border: 1px solid #dddddd; background-color: #f6f6f6; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-break: break-all;">a</code>, 杈撳嚭緇撴灉濡備笅:</p><pre style="padding: 5px; margin-top: 10px; margin-bottom: 10px; line-height: 18px; font-size: 9pt; font-family: 'Courier New', Arial; border-width: 1px 1px 1px 5px; border-style: solid; border-color: #dddddd #dddddd #dddddd #6ce26c; background-color: #f6f6f6;"><code style="padding: 0px; margin: 0px; border: none; background-color: transparent; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-break: break-all;">[1 2 3] [1 2 3] </code></pre><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">璇存槑<code style="padding: 2px 5px; margin: 0px 2px; border: 1px solid #dddddd; background-color: #f6f6f6; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-break: break-all;">a</code>鍦ㄨ皟鐢?code style="padding: 2px 5px; margin: 0px 2px; border: 1px solid #dddddd; background-color: #f6f6f6; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-break: break-all;">modifySlice</code>鍓嶅悗騫舵病鏈変換浣曞彉鍖? 鍥犳<code style="padding: 2px 5px; margin: 0px 2px; border: 1px solid #dddddd; background-color: #f6f6f6; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-break: break-all;">a</code>蹇呯劧鏄紶鍊肩殑!</p><h2>涓轟粈涔堝緢澶氫漢璇互涓簊lice鏄紩鐢ㄥ憿?</h2><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">鍙兘鏄?鍥犱負寰堝鏂版帴瑙o璇█鐨勬柊鎵? 鐪嬪埌Go璇█鐨勬枃。璇碐o鐨勫垏鐗囧拰C璇█鐨勬暟緇勭被鍨? 鑰孋璇█鐨勬暟緇勬槸浼犲湴鍧鐨?娉ㄦ剰: 涓嶆槸浼犲紩鐢?).</p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">涓嬮潰榪欎釜浠g爜鍙兘鏄敊璇殑鏍規簮:</p><pre style="padding: 5px; margin-top: 10px; margin-bottom: 10px; line-height: 18px; font-size: 9pt; font-family: 'Courier New', Arial; border-width: 1px 1px 1px 5px; border-style: solid; border-color: #dddddd #dddddd #dddddd #6ce26c; background-color: #f6f6f6;"><code style="padding: 0px; margin: 0px; border: none; background-color: transparent; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-break: break-all;">func main() { a := []int{1,2,3} fmt.Println(a) modifySliceData(a) fmt.Println(a) } func modifySliceData(data []int) { data[0] = 0 } </code></pre><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">杈撳嚭涓?</p><pre style="padding: 5px; margin-top: 10px; margin-bottom: 10px; line-height: 18px; font-size: 9pt; font-family: 'Courier New', Arial; border-width: 1px 1px 1px 5px; border-style: solid; border-color: #dddddd #dddddd #dddddd #6ce26c; background-color: #f6f6f6;"><code style="padding: 0px; margin: 0px; border: none; background-color: transparent; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-break: break-all;">[1 2 3] [0 2 3] </code></pre><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">鍑芥暟<code style="padding: 2px 5px; margin: 0px 2px; border: 1px solid #dddddd; background-color: #f6f6f6; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-break: break-all;">modifySliceData</code>紜疄閫氳繃鍙傛暟淇敼浜嗗垏鐗囩殑鍐呭.</p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">浣嗘槸璇鋒敞鎰? 淇敼閫氳繃鍑芥暟淇敼鍙傛暟鍐呭鐨勬満鍒舵湁寰堝, 鍏朵腑浼犲弬鏁扮殑鍦板潃灝卞彲浠ヤ慨鏀瑰弬鏁扮殑鍊?鍏跺疄鏄慨鏀瑰弬鏁頒腑鎸囬拡鎸囧悜鐨勬暟鎹?, 騫朵笉鏄彧鏈夊紩鐢ㄤ竴縐嶆柟寮?</p><h2>浼犳寚閽堝拰浼犲紩鐢ㄦ槸絳変環鐨勫悧?</h2><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">姣斿鏈変互涓嬩唬鐮?</p><pre style="padding: 5px; margin-top: 10px; margin-bottom: 10px; line-height: 18px; font-size: 9pt; font-family: 'Courier New', Arial; border-width: 1px 1px 1px 5px; border-style: solid; border-color: #dddddd #dddddd #dddddd #6ce26c; background-color: #f6f6f6;"><code style="padding: 0px; margin: 0px; border: none; background-color: transparent; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-break: break-all;">func main() { a := new(int) fmt.Println(a) modify(a) fmt.Println(a) } func modify(a *int) { a = nil } </code></pre><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">杈撳嚭涓?</p><pre style="padding: 5px; margin-top: 10px; margin-bottom: 10px; line-height: 18px; font-size: 9pt; font-family: 'Courier New', Arial; border-width: 1px 1px 1px 5px; border-style: solid; border-color: #dddddd #dddddd #dddddd #6ce26c; background-color: #f6f6f6;"><code style="padding: 0px; margin: 0px; border: none; background-color: transparent; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-break: break-all;">0xc010000000 0xc010000000 </code></pre><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">鍙互鐪嬪嚭鎸囬拡<code style="padding: 2px 5px; margin: 0px 2px; border: 1px solid #dddddd; background-color: #f6f6f6; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-break: break-all;">a</code>鏈韓騫舵病鏈夊彉鍖? 浼犳寚閽堟垨浼犲湴鍧涔熷彧鑳戒慨鏀規寚閽堟寚鍚戠殑鍐呭瓨鐨勫? 騫朵笉鑳芥敼鍙樻寚閽堟湰韜湪鍊?</p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;"><strong style="padding: 0px; margin: 0px;">鍥犳, 鍑芥暟鍙傛暟浼犱紶鎸囬拡涔熸槸浼犲肩殑, 騫朵笉鏄紶寮曠敤!</strong></p><h2>鎵鏈夌被鍨嬬殑鍑芥暟鍙傛暟閮芥槸浼犲肩殑!</h2><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">鍖呮嫭<code style="padding: 2px 5px; margin: 0px 2px; border: 1px solid #dddddd; background-color: #f6f6f6; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-break: break-all;">slice</code>/<code style="padding: 2px 5px; margin: 0px 2px; border: 1px solid #dddddd; background-color: #f6f6f6; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-break: break-all;">map</code>/<code style="padding: 2px 5px; margin: 0px 2px; border: 1px solid #dddddd; background-color: #f6f6f6; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-break: break-all;">chan</code>絳夊熀紜綾誨瀷鍜岃嚜瀹氫箟鐨勭被鍨嬮兘鏄紶鍊肩殑.</p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">浣嗘槸鍥犱負<code style="padding: 2px 5px; margin: 0px 2px; border: 1px solid #dddddd; background-color: #f6f6f6; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-break: break-all;">slice</code>鍜?code style="padding: 2px 5px; margin: 0px 2px; border: 1px solid #dddddd; background-color: #f6f6f6; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-break: break-all;">map</code>/<code style="padding: 2px 5px; margin: 0px 2px; border: 1px solid #dddddd; background-color: #f6f6f6; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-break: break-all;">chan</code>搴曞眰緇撴瀯鐨勫樊寮? 鍙堝鑷翠簡瀹冧滑浼犲肩殑褰卞搷騫朵笉瀹屽叏絳夊悓.</p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">閲嶇偣褰掔撼濡備笅:</p><ul style="padding: 0px; margin: 10px 20px; list-style-position: inside;"><li style="padding: 0px; margin: 0px;">GoSpec: the parameters of the call are passed by value!</li><li style="padding: 0px; margin: 0px;">map/slice/chan 閮芥槸浼犲? 涓嶆槸浼犲紩鐢?/li><li style="padding: 0px; margin: 0px;">map/chan 瀵瑰簲鎸囬拡, 鍜屽紩鐢ㄧ被浼?/li><li style="padding: 0px; margin: 0px;"><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">slice 鏄粨鏋勪綋鍜屾寚閽堢殑娣峰悎浣?/p></li><li style="padding: 0px; margin: 0px;"><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">slice 鍚?values/count/capacity 絳変俊鎭? 鏄寜鍊間紶閫?/p></li><li style="padding: 0px; margin: 0px;">slice 涓殑 values 鏄寚閽? 鎸夊間紶閫?/li><li style="padding: 0px; margin: 0px;"><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">鎸夊間紶閫掔殑 slice 鍙兘淇敼values鎸囧悜鐨勬暟鎹? 鍏朵粬閮戒笉鑳戒慨鏀?/p></li><li style="padding: 0px; margin: 0px;"><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">浠ユ寚閽堟垨緇撴瀯浣撶殑瑙掑害鐪? 閮芥槸鍊間紶閫?</p></li></ul><h2>閭o璇█鏈変紶寮曠敤鐨勮娉曞悧?</h2><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">Go璇█鍏跺疄涔熸槸鏈変紶寮曠敤鐨勫湴鏂圭殑, 浣嗘槸涓嶆槸鍑芥暟鐨勫弬鏁? 鑰屾槸闂寘瀵瑰閮ㄧ幆澧冩槸閫氳繃寮曠敤璁塊棶鐨?</p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">鏌ョ湅浠ヤ笅鐨勪唬鐮?</p><pre style="padding: 5px; margin-top: 10px; margin-bottom: 10px; line-height: 18px; font-size: 9pt; font-family: 'Courier New', Arial; border-width: 1px 1px 1px 5px; border-style: solid; border-color: #dddddd #dddddd #dddddd #6ce26c; background-color: #f6f6f6;"><code style="padding: 0px; margin: 0px; border: none; background-color: transparent; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-break: break-all;">func main() { a := new(int) fmt.Println(a) func() { a = nil }() fmt.Println(a) } </code></pre><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">杈撳嚭涓?</p><pre style="padding: 5px; margin-top: 10px; margin-bottom: 10px; line-height: 18px; font-size: 9pt; font-family: 'Courier New', Arial; border-width: 1px 1px 1px 5px; border-style: solid; border-color: #dddddd #dddddd #dddddd #6ce26c; background-color: #f6f6f6;"><code style="padding: 0px; margin: 0px; border: none; background-color: transparent; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-break: break-all;">0xc010000000 <nil> </code></pre><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">鍥犱負闂寘鏄氳繃寮曠敤鐨勬柟寮忎嬌鐢ㄥ閮ㄧ幆澧冪殑<code style="padding: 2px 5px; margin: 0px 2px; border: 1px solid #dddddd; background-color: #f6f6f6; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-break: break-all;">a</code>鍙橀噺, 鍥犳鍙互鐩存帴淇敼<code style="padding: 2px 5px; margin: 0px 2px; border: 1px solid #dddddd; background-color: #f6f6f6; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-break: break-all;">a</code>鐨勫?</p><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">姣斿涓嬮潰2孌典唬鐮佺殑杈撳嚭鏄埅鐒朵笉鍚岀殑, 鍘熷洜灝辨槸絎簩涓唬鐮佹槸閫氳繃闂寘寮曠敤鐨勬柟寮忚緭鍑?code style="padding: 2px 5px; margin: 0px 2px; border: 1px solid #dddddd; background-color: #f6f6f6; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-break: break-all;">i</code>鍙橀噺:</p><pre style="padding: 5px; margin-top: 10px; margin-bottom: 10px; line-height: 18px; font-size: 9pt; font-family: 'Courier New', Arial; border-width: 1px 1px 1px 5px; border-style: solid; border-color: #dddddd #dddddd #dddddd #6ce26c; background-color: #f6f6f6;"><code style="padding: 0px; margin: 0px; border: none; background-color: transparent; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-break: break-all;">for i := 0; i < 5; i++ { defer fmt.Printf("%d ", i) // Output: 4 3 2 1 0 } fmt.Printf("\n") for i := 0; i < 5; i++ { defer func(){ fmt.Printf("%d ", i) } () // Output: 5 5 5 5 5 } </code></pre><p style="padding: 0px; margin: 12px 0px; letter-spacing: 1px;">鍍忕浜屼釜浠g爜灝辨槸浜庨棴鍖呭紩鐢ㄥ鑷寸殑鍓綔鐢? 鍥為伩榪欎釜鍓綔鐢ㄧ殑鍔炴硶鏄氳繃鍙傛暟浼犲兼垨姣忔闂寘鏋勯犱笉鍚岀殑涓存椂鍙橀噺:</p><pre style="padding: 5px; margin-top: 10px; margin-bottom: 10px; line-height: 18px; font-size: 9pt; font-family: 'Courier New', Arial; border-width: 1px 1px 1px 5px; border-style: solid; border-color: #dddddd #dddddd #dddddd #6ce26c; background-color: #f6f6f6;"><code style="padding: 0px; margin: 0px; border: none; background-color: transparent; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; word-break: break-all;">// 鏂規硶1: 姣忔寰幆鏋勯犱竴涓復鏃跺彉閲?i for i := 0; i < 5; i++ { i := i defer func(){ fmt.Printf("%d ", i) } () // Output: 4 3 2 1 0 } // 鏂規硶2: 閫氳繃鍑芥暟鍙傛暟浼犳儴 for i := 0; i < 5; i++ { defer func(i int){ fmt.Printf("%d ", i) } (i) // Output: 4 3 2 1 0 } </code></pre><h2>鎬葷粨</h2><ul style="padding: 0px; margin: 10px 20px; list-style-position: inside;"><li style="padding: 0px; margin: 0px;">鍑芥暟鍙傛暟浼犲? 闂寘浼犲紩鐢?</li><li style="padding: 0px; margin: 0px;">slice 鍚?values/count/capacity 絳変俊鎭? 鏄寜鍊間紶閫?/li><li style="padding: 0px; margin: 0px;">鎸夊間紶閫掔殑 slice 鍙兘淇敼values鎸囧悜鐨勬暟鎹? 鍏朵粬閮戒笉鑳戒慨鏀?/li><li style="padding: 0px; margin: 0px;">slice 鏄粨鏋勪綋鍜屾寚閽堢殑娣峰悎浣?/li></ul></div><img src ="http://www.tkk7.com/oathleo/aggbug/404106.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/oathleo/" target="_blank">oathleo</a> 2013-09-16 09:23 <a href="http://www.tkk7.com/oathleo/archive/2013/09/16/404106.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>鏁扮粍鍜屽垏鐗?/title><link>http://www.tkk7.com/oathleo/archive/2013/09/12/403973.html</link><dc:creator>oathleo</dc:creator><author>oathleo</author><pubDate>Thu, 12 Sep 2013 01:20:00 GMT</pubDate><guid>http://www.tkk7.com/oathleo/archive/2013/09/12/403973.html</guid><wfw:comment>http://www.tkk7.com/oathleo/comments/403973.html</wfw:comment><comments>http://www.tkk7.com/oathleo/archive/2013/09/12/403973.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/oathleo/comments/commentRss/403973.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/oathleo/services/trackbacks/403973.html</trackback:ping><description><![CDATA[<div class="juqinam" id="cnblogs_post_body" style="font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; line-height: normal; background-color: #eeeedd; word-break: normal !important;"><div class="rvwjoue" id="markdown-preview" style="line-height: 1.6; overflow: hidden;"><h3>鏁扮粍 Arrays</h3><p style="margin: 0px 0px 15px; line-height: 21px;">鏁扮粍鏄唴緗?build-in)綾誨瀷,鏄竴緇勫悓綾誨瀷鏁版嵁鐨勯泦鍚堬紝瀹冩槸鍊肩被鍨嬶紝閫氳繃浠?寮濮嬬殑涓嬫爣绱㈠紩璁塊棶鍏冪礌鍊箋傚湪鍒濆鍖栧悗闀垮害鏄浐瀹氱殑錛屾棤娉曚慨鏀瑰叾闀垮害銆傚綋浣滀負鏂規硶鐨勫叆鍙備紶鍏ユ椂灝嗗鍒朵竴浠芥暟緇勮屼笉鏄紩鐢ㄥ悓涓鎸囬拡銆傛暟緇勭殑闀垮害涔熸槸鍏剁被鍨嬬殑涓閮ㄥ垎錛岄氳繃鍐呯疆鍑芥暟len(array)鑾峰彇鍏墮暱搴︺?/p><h4>鍒濆鍖?/h4><p style="margin: 0px 0px 15px; line-height: 21px;">鏁扮粍鐨勫垵濮嬪寲鏈夊縐嶅艦寮?<a style="color: #770000; text-decoration: none;">鏌ョ湅紺轟緥浠g爜</a> , <a style="color: #770000; text-decoration: none;">鍦ㄧ嚎榪愯紺轟緥浠g爜</a></p><ul style="margin: 15px 0px 15px 45px; padding-left: 10px;"><li style="list-style: inherit;"><code style="margin: 0px 2px; padding: 0px 5px; border: 1px solid #eaeaea; background-color: #f8f8f8; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; white-space: nowrap; font-family: monospace, Monaco;">[5] int {1,2,3,4,5}</code> <br />闀垮害涓?鐨勬暟緇勶紝鍏跺厓绱犲間緷嬈′負錛?錛?錛?錛?錛?</li><li style="list-style: inherit;"><code style="margin: 0px 2px; padding: 0px 5px; border: 1px solid #eaeaea; background-color: #f8f8f8; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; white-space: nowrap; font-family: monospace, Monaco;">[5] int {1,2}</code> <br />闀垮害涓?鐨勬暟緇勶紝鍏跺厓绱犲間緷嬈′負錛?錛?錛?錛?錛? 銆傚湪鍒濆鍖栨椂娌℃湁鎸囧畾鍒濆肩殑鍏冪礌灝嗕細璧嬪間負鍏跺厓绱犵被鍨媔nt鐨勯粯璁ゅ?,string鐨勯粯璁ゅ兼槸<strong>""</strong></li><li style="list-style: inherit;"><code style="margin: 0px 2px; padding: 0px 5px; border: 1px solid #eaeaea; background-color: #f8f8f8; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; white-space: nowrap; font-family: monospace, Monaco;">[...] int {1,2,3,4,5}</code> <br />闀垮害涓?鐨勬暟緇勶紝鍏墮暱搴︽槸鏍規嵁鍒濆鍖栨椂鎸囧畾鐨勫厓绱犱釜鏁板喅瀹氱殑</li><li style="list-style: inherit;"><code style="margin: 0px 2px; padding: 0px 5px; border: 1px solid #eaeaea; background-color: #f8f8f8; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; white-space: nowrap; font-family: monospace, Monaco;">[5] int { 2:1,3:2,4:3}</code> <br />闀垮害涓?鐨勬暟緇勶紝key:value,鍏跺厓绱犲間緷嬈′負錛?錛?錛?錛?錛?銆傚湪鍒濆鍖栨椂鎸囧畾浜?錛?錛?绱㈠紩涓搴旂殑鍊鹼細1錛?錛?</li><li style="list-style: inherit;"><code style="margin: 0px 2px; padding: 0px 5px; border: 1px solid #eaeaea; background-color: #f8f8f8; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; white-space: nowrap; font-family: monospace, Monaco;">[...] int {2:1,4:3}</code> <br />闀垮害涓?鐨勬暟緇勶紝璧峰厓绱犲間緷嬈′負錛?錛?錛?錛?錛?銆傜敱浜庢寚瀹氫簡鏈澶х儲寮?瀵瑰簲鐨勫?錛屾牴鎹垵濮嬪寲鐨勫厓绱犱釜鏁扮‘瀹氬叾闀垮害涓?</li></ul><h4><a name="-1" style="color: rgb(119, 0, 0); text-decoration: none; display: block; padding-left: 30px; margin-left: -30px; cursor: pointer; position: absolute; top: 0px; left: 0px; bottom: 0px;"></a>璧嬪間笌浣跨敤</h4><p style="margin: 0px 0px 15px; line-height: 21px;">鏁扮粍閫氳繃涓嬫爣璁塊棶鍏冪礌錛屽彲淇敼鍏跺厓绱犲?/p><pre style="margin: 15px; white-space: pre-wrap; word-wrap: break-word; background-color: #141414; border: 1px solid #cccccc; font-size: 13px; line-height: 19px; overflow: auto; padding: 6px 10px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; color: #f2f2f2; background-position: initial initial; background-repeat: initial initial;"><code style="margin: 0px; padding: 0px; border: none; background-color: transparent; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; white-space: pre; font-size: 14px; font-family: monospace, Monaco; background-position: initial initial; background-repeat: initial initial;">arr :=[...] int {1,2,3,4,5} arr[4]=arr[1]+len(arr) //arr[4]=2+5 </code></pre><p style="margin: 15px 0px; line-height: 21px;">閫氳繃for閬嶅巻鏁扮粍鍏冪礌,<a style="color: #770000; text-decoration: none;">鏌ョ湅紺轟緥浠g爜</a>,<a style="color: #770000; text-decoration: none;">鍦ㄧ嚎榪愯紺轟緥浠g爜</a></p><pre style="margin: 15px; white-space: pre-wrap; word-wrap: break-word; background-color: #141414; border: 1px solid #cccccc; font-size: 13px; line-height: 19px; overflow: auto; padding: 6px 10px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; color: #f2f2f2; background-position: initial initial; background-repeat: initial initial;"><code style="margin: 0px; padding: 0px; border: none; background-color: transparent; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; white-space: pre; font-size: 14px; font-family: monospace, Monaco; background-position: initial initial; background-repeat: initial initial;">arr := [5]int{5, 4, 3} for index, value := range arr { fmt.Printf("arr[%d]=%d \n", index, value) } for index := 0; index < len(arr); index++ { fmt.Printf("arr[%d]=%d \n", index, arr[index]) } </code></pre><p style="margin: 15px 0px; line-height: 21px;">鏁扮粍鏄肩被鍨嬶紝灝嗕竴涓暟緇勮祴鍊肩粰鍙︿竴涓暟緇勬椂灝嗗鍒朵竴浠芥柊鐨勫厓绱?<a style="color: #770000; text-decoration: none;">鏌ョ湅紺轟緥浠g爜</a>,<a style="color: #770000; text-decoration: none;">鍦ㄧ嚎榪愯紺轟緥浠g爜</a></p><pre style="margin: 15px; white-space: pre-wrap; word-wrap: break-word; background-color: #141414; border: 1px solid #cccccc; font-size: 13px; line-height: 19px; overflow: auto; padding: 6px 10px; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; color: #f2f2f2; background-position: initial initial; background-repeat: initial initial;"><code style="margin: 0px; padding: 0px; border: none; background-color: transparent; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; white-space: pre; font-size: 14px; font-family: monospace, Monaco; background-position: initial initial; background-repeat: initial initial;">arr2 := [5]int{1, 2} arr5 := arr2 arr5[0] = 5 arr2[4] = 2 fmt.Printf(" arr5= %d \n arr2=%d \n arr5[0]==arr2[0]= %s \n", arr5, arr2, arr5[0] == arr2[0]) OutPut: arr5=[5 2 0 0 0] arr2=[1 2 0 0 2] arr5[0]==arr2[0]= false </code></pre><h3><a name="-slices" style="color: rgb(119, 0, 0); text-decoration: none; display: block; padding-left: 30px; margin-left: -30px; cursor: pointer; position: absolute; top: 0px; left: 0px; bottom: 0px;"></a>鍒囩墖 Slices</h3><p style="margin: 0px 0px 15px; line-height: 21px;">鏁扮粍鐨勯暱搴︿笉鍙敼鍙橈紝鍦ㄧ壒瀹氬満鏅腑榪欐牱鐨勯泦鍚堝氨涓嶅お閫傜敤錛孏o涓彁渚涗簡涓縐嶇伒媧伙紝鍔熻兘寮烘倣鐨勫唴緗被鍨?strong>Slices</strong>鍒囩墖,涓庢暟緇勭浉姣斿垏鐗囩殑闀垮害鏄笉鍥哄畾鐨勶紝鍙互榪藉姞鍏冪礌錛屽湪榪藉姞鏃跺彲鑳戒嬌鍒囩墖鐨勫閲忓澶с傚垏鐗囦腑鏈変袱涓蹇碉細涓鏄?strong>len闀垮害</strong>錛屼簩鏄?strong>cap瀹歸噺</strong>錛岄暱搴︽槸鎸囧凡緇忚璧嬭繃鍊肩殑鏈澶т笅鏍?1錛屽彲閫氳繃鍐呯疆鍑芥暟len()鑾峰緱銆傚閲忔槸鎸囧垏鐗囩洰鍓嶅彲瀹圭撼鐨勬渶澶氬厓绱犱釜鏁幫紝鍙氳繃鍐呯疆鍑芥暟cap()鑾峰緱銆傚垏鐗囨槸寮曠敤綾誨瀷錛屽洜姝ゅ湪褰撲紶閫掑垏鐗囨椂灝嗗紩鐢ㄥ悓涓鎸囬拡錛屼慨鏀瑰煎皢浼氬獎鍝嶅叾浠栫殑瀵硅薄銆?/p><h4><a name="-2" style="color: rgb(119, 0, 0); text-decoration: none; display: block; padding-left: 30px; margin-left: -30px; cursor: pointer; position: absolute; top: 0px; left: 0px; bottom: 0px;"></a>鍒濆鍖?/h4><p style="margin: 0px 0px 15px; line-height: 21px;">鍒囩墖鍙互閫氳繃鏁扮粍鏉ュ垵濮嬪寲錛屼篃鍙互閫氳繃鍐呯疆鍑芥暟make()鍒濆鍖?.鍒濆鍖栨椂len=cap,鍦ㄨ拷鍔犲厓绱犳椂濡傛灉瀹歸噺cap涓嶈凍鏃跺皢鎸塴en鐨?strong>2</strong>鍊嶆墿瀹?nbsp;<a style="color: #770000; text-decoration: none;">鏌ョ湅紺轟緥浠g爜</a>錛?a style="color: #770000; text-decoration: none;">鍦ㄧ嚎榪愯紺轟緥浠g爜</a></p><ul style="margin: 15px 0px 15px 45px; padding-left: 10px;"><li style="list-style: inherit;"><code style="margin: 0px 2px; padding: 0px 5px; border: 1px solid #eaeaea; background-color: #f8f8f8; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; white-space: nowrap; font-family: monospace, Monaco;">s :=[] int {1,2,3 }</code> <br />鐩存帴鍒濆鍖栧垏鐗囷紝<strong>[]</strong>琛ㄧず鏄垏鐗囩被鍨嬶紝<strong>{1,2,3}</strong>鍒濆鍖栧間緷嬈℃槸1,2,3.鍏禼ap=len=3</li><li style="list-style: inherit;"><code style="margin: 0px 2px; padding: 0px 5px; border: 1px solid #eaeaea; background-color: #f8f8f8; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; white-space: nowrap; font-family: monospace, Monaco;">s := arr[:]</code> <br />鍒濆鍖栧垏鐗噑,鏄暟緇刟rr鐨勫紩鐢?/li><li style="list-style: inherit;"><code style="margin: 0px 2px; padding: 0px 5px; border: 1px solid #eaeaea; background-color: #f8f8f8; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; white-space: nowrap; font-family: monospace, Monaco;">s := arr[startIndex:endIndex]</code> <br />灝哸rr涓粠涓嬫爣startIndex鍒癳ndIndex-1 涓嬬殑鍏冪礌鍒涘緩涓轟竴涓柊鐨勫垏鐗?/li><li style="list-style: inherit;"><code style="margin: 0px 2px; padding: 0px 5px; border: 1px solid #eaeaea; background-color: #f8f8f8; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; white-space: nowrap; font-family: monospace, Monaco;">s := arr[startIndex:]</code> <br />緙虹渷endIndex鏃跺皢琛ㄧず涓鐩村埌arr鐨勬渶鍚庝竴涓厓绱?/li><li style="list-style: inherit;"><code style="margin: 0px 2px; padding: 0px 5px; border: 1px solid #eaeaea; background-color: #f8f8f8; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; white-space: nowrap; font-family: monospace, Monaco;">s := arr[:endIndex]</code> <br />緙虹渷startIndex鏃跺皢琛ㄧず浠巃rr鐨勭涓涓厓绱犲紑濮?/li><li style="list-style: inherit;"><code style="margin: 0px 2px; padding: 0px 5px; border: 1px solid #eaeaea; background-color: #f8f8f8; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; white-space: nowrap; font-family: monospace, Monaco;">s1 := s[startIndex:endIndex]</code> <br />閫氳繃鍒囩墖s鍒濆鍖栧垏鐗噑1</li><li style="list-style: inherit;"><code style="margin: 0px 2px; padding: 0px 5px; border: 1px solid #eaeaea; background-color: #f8f8f8; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; white-space: nowrap; font-family: monospace, Monaco;">s :=make([]int,len,cap)</code> <br />閫氳繃鍐呯疆鍑芥暟make()鍒濆鍖栧垏鐗噑,[]int 鏍囪瘑涓哄叾鍏冪礌綾誨瀷涓篿nt鐨勫垏鐗?/li></ul><h4><a name="-3" style="color: rgb(119, 0, 0); text-decoration: none; display: block; padding-left: 30px; margin-left: -30px; cursor: pointer; position: absolute; top: 0px; left: 0px; bottom: 0px;"></a>璧嬪間笌浣跨敤</h4><p style="margin: 0px 0px 15px; line-height: 21px;">鍒囩墖鏄紩鐢ㄧ被鍨嬶紝鍦ㄤ嬌鐢ㄦ椂闇瑕佹敞鎰忓叾鎿嶄綔銆?a style="color: #770000; text-decoration: none;">鏌ョ湅紺轟緥浠g爜</a> 錛?a style="color: #770000; text-decoration: none;">鍦ㄧ嚎榪愯紺轟緥浠g爜</a> 鍒囩墖鍙互閫氳繃鍐呯疆鍑芥暟append(slice []Type,elems ...Type)榪藉姞鍏冪礌錛宔lems鍙互鏄竴鎺抰ype綾誨瀷鐨勬暟鎹紝涔熷彲浠ユ槸slice,鍥犱負榪藉姞鐨勪竴涓竴涓殑鍏冪礌錛屽洜姝ゅ鏋滃皢涓涓猻lice榪藉姞鍒板彟涓涓猻lice涓渶瑕佸甫涓?<strong>...</strong>"錛岃繖鏍鋒墠鑳借〃紺烘槸灝唖lice涓殑鍏冪礌渚濇榪藉姞鍒板彟涓涓猻lice涓傚彟澶栧湪閫氳繃涓嬫爣璁塊棶鍏冪礌鏃朵笅鏍囦笉鑳借秴榪噇en澶у皬錛屽鍚屾暟緇勭殑涓嬫爣涓嶈兘瓚呭嚭len鑼冨洿涓鏍楓?/p><ul style="margin-top: 15px; margin-right: 0px; margin-left: 45px; padding-left: 10px; margin-bottom: 0px !important;"><li style="list-style: inherit;"><code style="margin: 0px 2px; padding: 0px 5px; border: 1px solid #eaeaea; background-color: #f8f8f8; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; white-space: nowrap; font-family: monospace, Monaco;">s :=append(s,1,2,3,4)</code></li><li style="list-style: inherit;"><code style="margin: 0px 2px; padding: 0px 5px; border: 1px solid #eaeaea; background-color: #f8f8f8; border-top-left-radius: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; border-bottom-left-radius: 3px; white-space: nowrap; font-family: monospace, Monaco;">s :=append(s,s1...)</code></li></ul></div></div><div class="ksrfmjj" id="MySignature" style="margin-top: 10px; font-family: Verdana, Geneva, Arial, Helvetica, sans-serif; line-height: normal; background-color: #eeeedd;">杞澆鏃惰娉ㄦ槑鍑哄錛佽佽櫈http://www.cnblogs.com/howDo/</div><img src ="http://www.tkk7.com/oathleo/aggbug/403973.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/oathleo/" target="_blank">oathleo</a> 2013-09-12 09:20 <a href="http://www.tkk7.com/oathleo/archive/2013/09/12/403973.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>Socket read writehttp://www.tkk7.com/oathleo/archive/2013/09/11/403935.htmloathleooathleoWed, 11 Sep 2013 00:56:00 GMThttp://www.tkk7.com/oathleo/archive/2013/09/11/403935.htmlhttp://www.tkk7.com/oathleo/comments/403935.htmlhttp://www.tkk7.com/oathleo/archive/2013/09/11/403935.html#Feedback0http://www.tkk7.com/oathleo/comments/commentRss/403935.htmlhttp://www.tkk7.com/oathleo/services/trackbacks/403935.html榪欎釜鏃跺?read 瑕佸畬鏁達紝絎竴嬈℃病鏈塺ead瀹岋紝灝眞rite錛岀浜屾read 鍒扮殑浠嶇劧鏄笂嬈℃病鏈塺ead瀹岀殑鏁版嵁

oathleo 2013-09-11 08:56 鍙戣〃璇勮
]]>
bufio 鍖?/title><link>http://www.tkk7.com/oathleo/archive/2013/09/05/403714.html</link><dc:creator>oathleo</dc:creator><author>oathleo</author><pubDate>Thu, 05 Sep 2013 08:01:00 GMT</pubDate><guid>http://www.tkk7.com/oathleo/archive/2013/09/05/403714.html</guid><wfw:comment>http://www.tkk7.com/oathleo/comments/403714.html</wfw:comment><comments>http://www.tkk7.com/oathleo/archive/2013/09/05/403714.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/oathleo/comments/commentRss/403714.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/oathleo/services/trackbacks/403714.html</trackback:ping><description><![CDATA[<div>// bufio 鍖呭疄鐜頒簡甯︾紦瀛樼殑 I/O 鎿嶄綔</div><div>// 瀹冨皝瑁呬竴涓?io.Reader 鎴?io.Writer 瀵硅薄</div><div>// 浣垮叾鍏鋒湁緙撳瓨鍜屼竴浜涙枃鏈鍐欏姛鑳?/div><div></div><div>------------------------------------------------------------</div><div></div><div>// bufio.go</div><div></div><div>------------------------------------------------------------</div><div></div><div>// Reader 瀹炵幇浜嗗甫緙撳瓨鐨?io.Reader 瀵硅薄</div><div>type Reader struct {</div><div><span style="white-space:pre"> </span>// 縐佹湁瀛楁</div><div>}</div><div></div><div>// NewReaderSize 灝?rd 灝佽鎴愪竴涓嫢鏈?size 澶у皬緙撳瓨鐨?bufio.Reader 瀵硅薄</div><div>// 濡傛灉 rd 鐨勫熀綾誨瀷灝辨槸 bufio.Reader 綾誨瀷錛岃屼笖鎷ユ湁瓚沖鐨勭紦瀛?/div><div>// 鍒欑洿鎺ュ皢 rd 杞崲涓哄熀綾誨瀷騫惰繑鍥?/div><div>func NewReaderSize(rd io.Reader, size int) *Reader</div><div></div><div>// NewReader 鐩稿綋浜?NewReaderSize(rd, 4096)</div><div>func NewReader(rd io.Reader) *Reader</div><div></div><div>------------------------------------------------------------</div><div></div><div>// Peek 榪斿洖緙撳瓨鐨勪竴涓垏鐗囷紝璇ュ垏鐗囧紩鐢ㄧ紦瀛樹腑鍓?n 瀛楄妭鏁版嵁</div><div>// 璇ユ搷浣滀笉浼氬皢鏁版嵁璇誨嚭錛屽彧鏄紩鐢?/div><div>// 寮曠敤鐨勬暟鎹湪涓嬩竴嬈¤鍙栨搷浣滀箣鍓嶆槸鏈夋晥鐨?/div><div>// 濡傛灉寮曠敤鐨勬暟鎹暱搴﹀皬浜?n錛屽垯榪斿洖涓涓敊璇俊鎭?/div><div>// 濡傛灉 n 澶т簬緙撳瓨鐨勬誨ぇ灝忥紝鍒欒繑鍥?ErrBufferFull</div><div>// 閫氳繃 Peek 鐨勮繑鍥炲鹼紝鍙互淇敼緙撳瓨涓殑鏁版嵁</div><div>// 浣嗘槸涓嶈兘淇敼搴曞眰 io.Reader 涓殑鏁版嵁</div><div>func (b *Reader) Peek(n int) ([]byte, error)</div><div></div><div>func main() {</div><div><span style="white-space:pre"> </span>s := strings.NewReader("ABCDEFG")</div><div><span style="white-space:pre"> </span>br := bufio.NewReader(s)</div><div></div><div><span style="white-space:pre"> </span>b, _ := br.Peek(5)</div><div><span style="white-space:pre"> </span>fmt.Printf("%s\n", b)</div><div><span style="white-space:pre"> </span>// ABCDE</div><div></div><div><span style="white-space:pre"> </span>b[0] = 'a'</div><div><span style="white-space:pre"> </span>b, _ = br.Peek(5)</div><div><span style="white-space:pre"> </span>fmt.Printf("%s\n", b)</div><div><span style="white-space:pre"> </span>// aBCDE</div><div>}</div><div></div><div>------------------------------------------------------------</div><div></div><div>// Read 浠?b 涓鍑烘暟鎹埌 p 涓紝榪斿洖璇誨嚭鐨勫瓧鑺傛暟</div><div>// 濡傛灉 p 鐨勫ぇ灝?>= 緙撳瓨鐨勬誨ぇ灝忥紝鑰屼笖緙撳瓨涓嶄負絀?/div><div>// 鍒欏彧鑳借鍑虹紦瀛樹腑鐨勬暟鎹紝涓嶄細浠庡簳灞?io.Reader 涓彁鍙栨暟鎹?/div><div>// 濡傛灉 p 鐨勫ぇ灝?>= 緙撳瓨鐨勬誨ぇ灝忥紝鑰屼笖緙撳瓨涓虹┖</div><div>// 鍒欑洿鎺ヤ粠搴曞眰 io.Reader 鍚?p 涓鍑烘暟鎹紝涓嶇粡榪囩紦瀛?/div><div>// 鍙湁褰?b 涓棤鍙鏁版嵁鏃訛紝鎵嶈繑鍥?(0, io.EOF)</div><div>func (b *Reader) Read(p []byte) (n int, err error)</div><div></div><div>func main() {</div><div><span style="white-space:pre"> </span>s := strings.NewReader("ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890")</div><div><span style="white-space:pre"> </span>br := bufio.NewReader(s)</div><div><span style="white-space:pre"> </span>b := make([]byte, 20)</div><div></div><div><span style="white-space:pre"> </span>n, err := br.Read(b)</div><div><span style="white-space:pre"> </span>fmt.Printf("%-20s %-2v %v\n", b[:n], n, err)</div><div><span style="white-space:pre"> </span>// ABCDEFGHIJKLMNOPQRST 20 <nil></div><div></div><div><span style="white-space:pre"> </span>n, err = br.Read(b)</div><div><span style="white-space:pre"> </span>fmt.Printf("%-20s %-2v %v\n", b[:n], n, err)</div><div><span style="white-space:pre"> </span>// UVWXYZ1234567890     16 <nil> </div><div></div><div><span style="white-space:pre"> </span>n, err = br.Read(b)</div><div><span style="white-space:pre"> </span>fmt.Printf("%-20s %-2v %v\n", b[:n], n, err)</div><div><span style="white-space:pre"> </span>//                      0  EOF</div><div>}</div><div></div><div>------------------------------------------------------------</div><div></div><div>// ReadByte 浠?b 涓鍑轟竴涓瓧鑺傚茍榪斿洖</div><div>// 濡傛灉 b 涓棤鍙鏁版嵁錛屽垯榪斿洖涓涓敊璇?/div><div>func (b *Reader) ReadByte() (c byte, err error)</div><div></div><div>// UnreadByte 鎾ゆ秷鏈鍚庝竴嬈¤鍑虹殑瀛楄妭</div><div>// 鍙湁鏈鍚庤鍑虹殑瀛楄妭鍙互琚挙娑?/div><div>// 鏃犺浠諱綍鎿嶄綔錛屽彧瑕佹湁鍐呭琚鍑猴紝灝卞彲浠ョ敤 UnreadByte 鎾ゆ秷涓涓瓧鑺?/div><div>func (b *Reader) UnreadByte() error</div><div></div><div>func main() {</div><div><span style="white-space:pre"> </span>s := strings.NewReader("ABCDEFG")</div><div><span style="white-space:pre"> </span>br := bufio.NewReader(s)</div><div></div><div><span style="white-space:pre"> </span>c, _ := br.ReadByte()</div><div><span style="white-space:pre"> </span>fmt.Printf("%c\n", c)</div><div><span style="white-space:pre"> </span>// A</div><div></div><div><span style="white-space:pre"> </span>c, _ = br.ReadByte()</div><div><span style="white-space:pre"> </span>fmt.Printf("%c\n", c)</div><div><span style="white-space:pre"> </span>// B</div><div></div><div><span style="white-space:pre"> </span>br.UnreadByte()</div><div><span style="white-space:pre"> </span>c, _ = br.ReadByte()</div><div><span style="white-space:pre"> </span>fmt.Printf("%c\n", c)</div><div><span style="white-space:pre"> </span>// B</div><div>}</div><div></div><div>------------------------------------------------------------</div><div></div><div>// ReadRune 浠?b 涓鍑轟竴涓?UTF8 緙栫爜鐨勫瓧絎﹀茍榪斿洖</div><div>// 鍚屾椂榪斿洖璇ュ瓧絎︾殑 UTF8 緙栫爜闀垮害</div><div>// 濡傛灉 UTF8 搴忓垪鏃犳硶瑙g爜鍑轟竴涓紜殑 Unicode 瀛楃</div><div>// 鍒欏彧璇誨嚭 b 涓殑涓涓瓧鑺傦紝騫惰繑鍥?U+FFFD 瀛楃錛宻ize 榪斿洖 1</div><div>func (b *Reader) ReadRune() (r rune, size int, err error)</div><div></div><div>// UnreadRune 鎾ゆ秷鏈鍚庝竴嬈¤鍑虹殑 Unicode 瀛楃</div><div>// 濡傛灉鏈鍚庝竴嬈℃墽琛岀殑涓嶆槸 ReadRune 鎿嶄綔錛屽垯榪斿洖涓涓敊璇?/div><div>// 鍥犳錛孶nreadRune 姣?UnreadByte 鏇翠弗鏍?/div><div>func (b *Reader) UnreadRune() error</div><div></div><div>func main() {</div><div><span style="white-space:pre"> </span>s := strings.NewReader("浣犲ソ錛屼笘鐣岋紒")</div><div><span style="white-space:pre"> </span>br := bufio.NewReader(s)</div><div></div><div><span style="white-space:pre"> </span>c, size, _ := br.ReadRune()</div><div><span style="white-space:pre"> </span>fmt.Printf("%c %v\n", c, size)</div><div><span style="white-space:pre"> </span>// 浣?3</div><div></div><div><span style="white-space:pre"> </span>c, size, _ = br.ReadRune()</div><div><span style="white-space:pre"> </span>fmt.Printf("%c %v\n", c, size)</div><div><span style="white-space:pre"> </span>// 濂?3</div><div></div><div><span style="white-space:pre"> </span>br.UnreadRune()</div><div><span style="white-space:pre"> </span>c, size, _ = br.ReadRune()</div><div><span style="white-space:pre"> </span>fmt.Printf("%c %v\n", c, size)</div><div><span style="white-space:pre"> </span>// 濂?3</div><div>}</div><div></div><div>------------------------------------------------------------</div><div></div><div>// Buffered 榪斿洖緙撳瓨涓暟鎹殑闀垮害</div><div>func (b *Reader) Buffered() int</div><div></div><div>func main() {</div><div><span style="white-space:pre"> </span>s := strings.NewReader("浣犲ソ錛屼笘鐣岋紒")</div><div><span style="white-space:pre"> </span>br := bufio.NewReader(s)</div><div></div><div><span style="white-space:pre"> </span>fmt.Println(br.Buffered())</div><div><span style="white-space:pre"> </span>// 0</div><div></div><div><span style="white-space:pre"> </span>br.Peek(1)</div><div><span style="white-space:pre"> </span>fmt.Println(br.Buffered())</div><div><span style="white-space:pre"> </span>// 18</div><div>}</div><div></div><div>------------------------------------------------------------</div><div></div><div>// ReadSlice 鍦?b 涓煡鎵?delim 騫惰繑鍥?delim 鍙婂叾涔嬪墠鐨勬墍鏈夋暟鎹殑鍒囩墖</div><div>// 璇ユ搷浣滀細璇誨嚭鏁版嵁錛岃繑鍥炵殑鍒囩墖鏄凡璇誨嚭鏁版嵁鐨勫紩鐢?/div><div>// 鍒囩墖涓殑鏁版嵁鍦ㄤ笅涓嬈¤鍙栨搷浣滀箣鍓嶆槸鏈夋晥鐨?/div><div>//</div><div>// 濡傛灉 ReadSlice 鍦ㄦ壘鍒?delim 涔嬪墠閬囧埌閿欒</div><div>// 鍒欒鍑虹紦瀛樹腑鐨勬墍鏈夋暟鎹茍榪斿洖錛屽悓鏃惰繑鍥為亣鍒扮殑閿欒錛堥氬父鏄?io.EOF錛?/div><div>// 濡傛灉鍦ㄦ暣涓紦瀛樹腑閮芥壘涓嶅埌 delim錛屽垯 err 榪斿洖 ErrBufferFull</div><div>// 濡傛灉 ReadSlice 鑳芥壘鍒?delim錛屽垯 err 濮嬬粓榪斿洖 nil</div><div>//</div><div>// 鍥犱負榪斿洖鐨勫垏鐗囦腑鐨勬暟鎹湁鍙兘琚笅涓嬈¤鍐欐搷浣滀慨鏀?/div><div>// 鍥犳澶у鏁版搷浣滃簲璇ヤ嬌鐢?ReadBytes 鎴?ReadString錛屽畠浠繑鍥炵殑涓嶆槸鏁版嵁寮曠敤</div><div>func (b *Reader) ReadSlice(delim byte) (line []byte, err error)</div><div></div><div>func main() {</div><div><span style="white-space:pre"> </span>s := strings.NewReader("ABC DEF GHI JKL")</div><div><span style="white-space:pre"> </span>br := bufio.NewReader(s)</div><div></div><div><span style="white-space:pre"> </span>w, _ := br.ReadSlice(' ')</div><div><span style="white-space:pre"> </span>fmt.Printf("%q\n", w)</div><div><span style="white-space:pre"> </span>// "ABC "</div><div></div><div><span style="white-space:pre"> </span>w, _ = br.ReadSlice(' ')</div><div><span style="white-space:pre"> </span>fmt.Printf("%q\n", w)</div><div><span style="white-space:pre"> </span>// "DEF "</div><div></div><div><span style="white-space:pre"> </span>w, _ = br.ReadSlice(' ')</div><div><span style="white-space:pre"> </span>fmt.Printf("%q\n", w)</div><div><span style="white-space:pre"> </span>// "GHI "</div><div>}</div><div></div><div>------------------------------------------------------------</div><div></div><div>// ReadLine 鏄竴涓綆綰х殑鍘熷鐨勮璇誨彇鎿嶄綔</div><div>// 澶у鏁版儏鍐典笅錛屽簲璇ヤ嬌鐢?ReadBytes('\n') 鎴?ReadString('\n')</div><div>// 鎴栬呬嬌鐢ㄤ竴涓?Scanner</div><div>//</div><div>// ReadLine 閫氳繃璋冪敤 ReadSlice 鏂規硶瀹炵幇錛岃繑鍥炵殑涔熸槸緙撳瓨鐨勫垏鐗?/div><div>// ReadLine 灝濊瘯榪斿洖涓涓崟琛屾暟鎹紝涓嶅寘鎷灝炬爣璁幫紙\n 鎴?\r\n錛?/div><div>// 濡傛灉鍦ㄧ紦瀛樹腑鎵句笉鍒拌灝炬爣璁幫紝鍒欒緗?isPrefix 涓?true錛岃〃紺烘煡鎵炬湭瀹屾垚</div><div>// 鍚屾椂璇誨嚭緙撳瓨涓殑鏁版嵁騫朵綔涓哄垏鐗囪繑鍥?/div><div>// 鍙湁鍦ㄥ綋鍓嶇紦瀛樹腑鎵懼埌琛屽熬鏍囪錛屾墠灝?isPrefix 璁劇疆涓?false錛岃〃紺烘煡鎵懼畬鎴?/div><div>// 鍙互澶氭璋冪敤 ReadLine 鏉ヨ鍑轟竴琛?/div><div>// 榪斿洖鐨勬暟鎹湪涓嬩竴嬈¤鍙栨搷浣滀箣鍓嶆槸鏈夋晥鐨?/div><div>// 濡傛灉 ReadLine 鏃犳硶鑾峰彇浠諱綍鏁版嵁錛屽垯榪斿洖涓涓敊璇俊鎭紙閫氬父鏄?io.EOF錛?/div><div>func (b *Reader) ReadLine() (line []byte, isPrefix bool, err error)</div><div></div><div>func main() {</div><div><span style="white-space:pre"> </span>s := strings.NewReader("ABC\nDEF\r\nGHI\r\nJKL")</div><div><span style="white-space:pre"> </span>br := bufio.NewReader(s)</div><div></div><div><span style="white-space:pre"> </span>w, isPrefix, _ := br.ReadLine()</div><div><span style="white-space:pre"> </span>fmt.Printf("%q %v\n", w, isPrefix)</div><div><span style="white-space:pre"> </span>// "ABC" false</div><div></div><div><span style="white-space:pre"> </span>w, isPrefix, _ = br.ReadLine()</div><div><span style="white-space:pre"> </span>fmt.Printf("%q %v\n", w, isPrefix)</div><div><span style="white-space:pre"> </span>// "DEF" false</div><div></div><div><span style="white-space:pre"> </span>w, isPrefix, _ = br.ReadLine()</div><div><span style="white-space:pre"> </span>fmt.Printf("%q %v\n", w, isPrefix)</div><div><span style="white-space:pre"> </span>// "GHI" false</div><div>}</div><div></div><div>------------------------------------------------------------</div><div></div><div>// ReadBytes 鍦?b 涓煡鎵?delim 騫惰鍑?delim 鍙婂叾涔嬪墠鐨勬墍鏈夋暟鎹?/div><div>// 濡傛灉 ReadBytes 鍦ㄦ壘鍒?delim 涔嬪墠閬囧埌閿欒</div><div>// 鍒欒繑鍥為亣鍒伴敊璇箣鍓嶇殑鎵鏈夋暟鎹紝鍚屾椂榪斿洖閬囧埌鐨勯敊璇紙閫氬父鏄?io.EOF錛?/div><div>// 鍙湁褰?ReadBytes 鎵句笉鍒?delim 鏃訛紝err 鎵嶄笉涓?nil</div><div>// 瀵逛簬綆鍗曠殑鐢ㄩ旓紝浣跨敤 Scanner 鍙兘鏇存柟渚?/div><div>func (b *Reader) ReadBytes(delim byte) (line []byte, err error)</div><div></div><div>func main() {</div><div><span style="white-space:pre"> </span>s := strings.NewReader("ABC DEF GHI JKL")</div><div><span style="white-space:pre"> </span>br := bufio.NewReader(s)</div><div></div><div><span style="white-space:pre"> </span>w, _ := br.ReadBytes(' ')</div><div><span style="white-space:pre"> </span>fmt.Printf("%q\n", w)</div><div><span style="white-space:pre"> </span>// "ABC "</div><div></div><div><span style="white-space:pre"> </span>w, _ = br.ReadBytes(' ')</div><div><span style="white-space:pre"> </span>fmt.Printf("%q\n", w)</div><div><span style="white-space:pre"> </span>// "DEF "</div><div></div><div><span style="white-space:pre"> </span>w, _ = br.ReadBytes(' ')</div><div><span style="white-space:pre"> </span>fmt.Printf("%q\n", w)</div><div><span style="white-space:pre"> </span>// "GHI "</div><div>}</div><div></div><div>------------------------------------------------------------</div><div></div><div>// ReadString 鍔熻兘鍚?ReadBytes錛屽彧涓嶈繃榪斿洖鐨勬槸涓涓瓧絎︿覆</div><div>func (b *Reader) ReadString(delim byte) (line string, err error)</div><div></div><div>func main() {</div><div><span style="white-space:pre"> </span>s := strings.NewReader("ABC DEF GHI JKL")</div><div><span style="white-space:pre"> </span>br := bufio.NewReader(s)</div><div></div><div><span style="white-space:pre"> </span>w, _ := br.ReadString(' ')</div><div><span style="white-space:pre"> </span>fmt.Printf("%q\n", w)</div><div><span style="white-space:pre"> </span>// "ABC "</div><div></div><div><span style="white-space:pre"> </span>w, _ = br.ReadString(' ')</div><div><span style="white-space:pre"> </span>fmt.Printf("%q\n", w)</div><div><span style="white-space:pre"> </span>// "DEF "</div><div></div><div><span style="white-space:pre"> </span>w, _ = br.ReadString(' ')</div><div><span style="white-space:pre"> </span>fmt.Printf("%q\n", w)</div><div><span style="white-space:pre"> </span>// "GHI "</div><div>}</div><div></div><div>------------------------------------------------------------</div><div></div><div>// WriteTo 瀹炵幇浜?io.WriterTo 鎺ュ彛</div><div>func (b *Reader) WriteTo(w io.Writer) (n int64, err error)</div><div></div><div>func main() {</div><div><span style="white-space:pre"> </span>s := strings.NewReader("ABCEFG")</div><div><span style="white-space:pre"> </span>br := bufio.NewReader(s)</div><div><span style="white-space:pre"> </span>b := bytes.NewBuffer(make([]byte, 0))</div><div></div><div><span style="white-space:pre"> </span>br.WriteTo(b)</div><div><span style="white-space:pre"> </span>fmt.Printf("%s\n", b)</div><div><span style="white-space:pre"> </span>// ABCEFG</div><div>}</div><div></div><div>------------------------------------------------------------</div><div></div><div>// Writer 瀹炵幇浜嗗甫緙撳瓨鐨?io.Writer 瀵硅薄</div><div>// 濡傛灉鍦ㄥ悜 Writer 涓啓鍏ユ暟鎹殑榪囩▼涓亣鍒伴敊璇?/div><div>// 鍒?Writer 涓嶄細鍐嶆帴鍙椾換浣曟暟鎹?/div><div>// 鑰屼笖鍚庣畫鐨勫啓鍏ユ搷浣滈兘灝嗚繑鍥為敊璇俊鎭?/div><div>type Writer struct {</div><div><span style="white-space:pre"> </span>// 縐佹湁瀛楁</div><div>}</div><div></div><div>// NewWriterSize 灝?wr 灝佽鎴愪竴涓嫢鏈?size 澶у皬緙撳瓨鐨?bufio.Writer 瀵硅薄</div><div>// 濡傛灉 wr 鐨勫熀綾誨瀷灝辨槸 bufio.Writer 綾誨瀷錛岃屼笖鎷ユ湁瓚沖鐨勭紦瀛?/div><div>// 鍒欑洿鎺ュ皢 wr 杞崲涓哄熀綾誨瀷騫惰繑鍥?/div><div>func NewWriterSize(wr io.Writer, size int) *Writer</div><div></div><div>// NewWriter 鐩稿綋浜?NewWriterSize(wr, 4096)</div><div>func NewWriter(wr io.Writer) *Writer</div><div></div><div>------------------------------------------------------------</div><div></div><div>// Flush 灝嗙紦瀛樹腑鐨勬暟鎹彁浜ゅ埌搴曞眰鐨?io.Writer 涓?/div><div>func (b *Writer) Flush() error</div><div></div><div>// Available 榪斿洖緙撳瓨涓殑鍙互絀洪棿</div><div>func (b *Writer) Available() int</div><div></div><div>// Buffered 榪斿洖緙撳瓨涓湭鎻愪氦鐨勬暟鎹暱搴?/div><div>func (b *Writer) Buffered() int</div><div></div><div>// Write 灝?p 涓殑鏁版嵁鍐欏叆 b 涓紝榪斿洖鍐欏叆鐨勫瓧鑺傛暟</div><div>// 濡傛灉鍐欏叆鐨勫瓧鑺傛暟灝忎簬 p 鐨勯暱搴︼紝鍒欒繑鍥炰竴涓敊璇俊鎭?/div><div>func (b *Writer) Write(p []byte) (nn int, err error)</div><div></div><div>// WriteString 鍚?Write錛屽彧涓嶈繃鍐欏叆鐨勬槸瀛楃涓?/div><div>func (b *Writer) WriteString(s string) (int, error)</div><div></div><div>func main() {</div><div><span style="white-space:pre"> </span>b := bytes.NewBuffer(make([]byte, 0))</div><div><span style="white-space:pre"> </span>bw := bufio.NewWriter(b)</div><div><span style="white-space:pre"> </span>fmt.Println(bw.Available()) // 4096</div><div><span style="white-space:pre"> </span>fmt.Println(bw.Buffered())  // 0</div><div></div><div><span style="white-space:pre"> </span>bw.WriteString("ABCDEFGH")</div><div><span style="white-space:pre"> </span>fmt.Println(bw.Available()) // 4088</div><div><span style="white-space:pre"> </span>fmt.Println(bw.Buffered())  // 8</div><div><span style="white-space:pre"> </span>fmt.Printf("%q\n", b)       // ""</div><div></div><div><span style="white-space:pre"> </span>bw.Flush()</div><div><span style="white-space:pre"> </span>fmt.Println(bw.Available()) // 4096</div><div><span style="white-space:pre"> </span>fmt.Println(bw.Buffered())  // 0</div><div><span style="white-space:pre"> </span>fmt.Printf("%q\n", b)       // "ABCEFG"</div><div>}</div><div></div><div>------------------------------------------------------------</div><div></div><div>// WriteByte 鍚?b 涓啓鍏ヤ竴涓瓧鑺?/div><div>func (b *Writer) WriteByte(c byte) error</div><div></div><div>// WriteRune 鍚?b 涓啓鍏?r 鐨?UTF8 緙栫爜</div><div>// 榪斿洖 r 鐨勭紪鐮侀暱搴?/div><div>func (b *Writer) WriteRune(r rune) (size int, err error)</div><div></div><div>func main() {</div><div><span style="white-space:pre"> </span>b := bytes.NewBuffer(make([]byte, 0))</div><div><span style="white-space:pre"> </span>bw := bufio.NewWriter(b)</div><div><span style="white-space:pre"> </span>bw.WriteByte('H')</div><div><span style="white-space:pre"> </span>bw.WriteByte('e')</div><div><span style="white-space:pre"> </span>bw.WriteByte('l')</div><div><span style="white-space:pre"> </span>bw.WriteByte('l')</div><div><span style="white-space:pre"> </span>bw.WriteByte('o')</div><div><span style="white-space:pre"> </span>bw.WriteByte(' ')</div><div><span style="white-space:pre"> </span>bw.WriteRune('涓?)</div><div><span style="white-space:pre"> </span>bw.WriteRune('鐣?)</div><div><span style="white-space:pre"> </span>bw.WriteRune('錛?)</div><div><span style="white-space:pre"> </span>bw.Flush()</div><div><span style="white-space:pre"> </span>fmt.Println(b) // Hello 涓栫晫錛?/div><div>}</div><div></div><div>------------------------------------------------------------</div><div></div><div>// ReadFrom 瀹炵幇浜?io.ReaderFrom 鎺ュ彛</div><div>func (b *Writer) ReadFrom(r io.Reader) (n int64, err error)</div><div></div><div>func main() {</div><div><span style="white-space:pre"> </span>b := bytes.NewBuffer(make([]byte, 0))</div><div><span style="white-space:pre"> </span>s := strings.NewReader("Hello 涓栫晫錛?)</div><div><span style="white-space:pre"> </span>bw := bufio.NewWriter(b)</div><div><span style="white-space:pre"> </span>bw.ReadFrom(s)</div><div><span style="white-space:pre"> </span>bw.Flush()</div><div><span style="white-space:pre"> </span>fmt.Println(b) // Hello 涓栫晫錛?/div><div>}</div><div></div><div>------------------------------------------------------------</div><div></div><div>// ReadWriter 闆嗘垚浜?bufio.Reader 鍜?bufio.Writer</div><div>// 瀹冨疄鐜頒簡 io.ReadWriter 鎺ュ彛</div><div>type ReadWriter struct {</div><div><span style="white-space:pre"> </span>*Reader</div><div><span style="white-space:pre"> </span>*Writer</div><div>}</div><div></div><div>// NewReadWriter 灝佽 r 鍜?w 涓轟竴涓?bufio.ReadWriter 瀵硅薄</div><div>func NewReadWriter(r *Reader, w *Writer) *ReadWriter</div><div></div><div>------------------------------------------------------------</div><div></div><div>// scan.go</div><div></div><div>------------------------------------------------------------</div><div></div><div>// Scanner 鎻愪緵浜嗕竴涓柟渚跨殑鎺ュ彛鏉ヨ鍙栨暟鎹紝渚嬪璇誨彇涓涓琛屾枃鏈?/div><div>// 榪炵畫璋冪敤 Scan 鏂規硶灝嗘壂鎻忔暟鎹腑鐨?#8220;鎸囧畾閮ㄥ垎”錛岃煩榪囧悇涓?#8220;鎸囧畾閮ㄥ垎”涔嬮棿鐨勬暟鎹?/div><div>// Scanner 浣跨敤浜嗙紦瀛橈紝鎵浠?#8220;鎸囧畾閮ㄥ垎”鐨勯暱搴︿笉鑳借秴鍑虹紦瀛樼殑闀垮害</div><div>// Scanner 闇瑕佷竴涓?SplitFunc 綾誨瀷鐨?#8220;鍒囧垎鍑芥暟”鏉ョ‘瀹?#8220;鎸囧畾閮ㄥ垎”鐨勬牸寮?/div><div>// 鏈寘涓彁渚涚殑“鍒囧垎鍑芥暟”鏈?#8220;琛屽垏鍒嗗嚱鏁?#8221;銆?#8220;瀛楄妭鍒囧垎鍑芥暟”銆?#8220;UTF8瀛楃緙栫爜鍒囧垎鍑芥暟”</div><div>// 鍜?#8220;鍗曡瘝鍒囧垎鍑芥暟”錛岀敤鎴蜂篃鍙互鑷畾涔?#8220;鍒囧垎鍑芥暟”</div><div>// 榛樿鐨?#8220;鍒囧垎鍑芥暟”涓?#8220;琛屽垏鍒嗗嚱鏁?#8221;錛岀敤浜庤幏鍙栨暟鎹腑鐨勪竴琛屾暟鎹紙涓嶅寘鎷灝劇錛?/div><div>//</div><div>// 鎵弿鍦ㄩ亣鍒頒笅闈㈢殑鎯呭喌鏃朵細鍋滄錛?/div><div>// 1銆佹暟鎹壂鎻忓畬姣曪紝閬囧埌 io.EOF</div><div>// 2銆侀亣鍒拌鍐欓敊璇?/div><div>// 3銆?#8220;鎸囧畾閮ㄥ垎”鐨勯暱搴﹁秴榪囦簡緙撳瓨鐨勯暱搴?/div><div>// 濡傛灉瑕佸鏁版嵁榪涜鏇村鐨勬帶鍒訛紝姣斿鐨勯敊璇鐞嗘垨鎵弿鏇村ぇ鐨?#8220;鎸囧畾閮ㄥ垎”鎴栭『搴忔壂鎻?/div><div>// 鍒欏簲璇ヤ嬌鐢?bufio.Reader</div><div>type Scanner struct {</div><div><span style="white-space:pre"> </span>// 縐佹湁瀛楁</div><div>}</div><div></div><div>// SplitFunc 鐢ㄦ潵瀹氫箟“鍒囧垎鍑芥暟”綾誨瀷</div><div>// data 鏄鎵弿鐨勬暟鎹?/div><div>// atEOF 鏍囪搴曞眰 io.Reader 涓殑鏁版嵁鏄惁宸茬粡璇誨畬</div><div>// advance 榪斿洖 data 涓凡澶勭悊鐨勬暟鎹暱搴?/div><div>// token 榪斿洖鎵懼埌鐨?#8220;鎸囧畾閮ㄥ垎”</div><div>// err 榪斿洖閿欒淇℃伅</div><div>// 濡傛灉鍦?data 涓棤娉曟壘鍒頒竴涓畬鏁寸殑“鎸囧畾閮ㄥ垎”</div><div>// 鍒?SplitFunc 榪斿洖 (0, nil) 鏉ュ憡璇?Scanner</div><div>// 鍚戠紦瀛樹腑濉厖鏇村鏁版嵁錛岀劧鍚庡啀嬈℃壂鎻?/div><div>//</div><div>// 濡傛灉榪斿洖鐨?err 鏄潪 nil 鍊鹼紝鎵弿灝嗚緇堟錛屽茍榪斿洖閿欒淇℃伅</div><div>//</div><div>// 濡傛灉 data 涓虹┖錛屽垯“鍒囧垎鍑芥暟”灝嗕笉琚皟鐢?/div><div>// 鎰忔濇槸鍦?SplitFunc 涓笉蹇呰冭檻 data 涓虹┖鐨勬儏鍐?/div><div>//</div><div>// SplitFunc 鐨勪綔鐢ㄥ緢綆鍗曪紝浠?data 涓壘鍑轟綘鎰熷叴瓚g殑鏁版嵁錛岀劧鍚庤繑鍥?/div><div>// 騫跺憡璇夎皟鐢ㄨ咃紝data 涓湁澶氬皯鏁版嵁浣犲凡緇忓鐞嗚繃浜?/div><div>type SplitFunc func(data []byte, atEOF bool) (advance int, token []byte, err error)</div><div></div><div>// NewScanner 鍒涘緩涓涓?Scanner 鏉ユ壂鎻?r</div><div>// 榛樿鍒囧垎鍑芥暟涓?ScanLines</div><div>func NewScanner(r io.Reader) *Scanner</div><div></div><div>// Err 榪斿洖鎵弿榪囩▼涓亣鍒扮殑闈?EOF 閿欒</div><div>// 渚涚敤鎴瘋皟鐢紝浠ヤ究鑾峰彇閿欒淇℃伅</div><div>func (s *Scanner) Err() error</div><div></div><div>------------------------------------------------------------</div><div></div><div>// Bytes 灝嗘渶鍚庝竴嬈℃壂鎻忓嚭鐨?#8220;鎸囧畾閮ㄥ垎”浣滀負涓涓垏鐗囪繑鍥烇紙寮曠敤浼犻掞級</div><div>// 涓嬩竴嬈$殑 Scan 鎿嶄綔浼氳鐩栨湰嬈¤繑鍥炵殑緇撴灉</div><div>func (s *Scanner) Bytes() []byte</div><div></div><div>// Text 灝嗘渶鍚庝竴嬈℃壂鎻忓嚭鐨?#8220;鎸囧畾閮ㄥ垎”浣滀負瀛楃涓茶繑鍥烇紙鍊間紶閫掞級</div><div>func (s *Scanner) Text() string</div><div></div><div>------------------------------------------------------------</div><div></div><div>// Scan 鍦?Scanner 鐨勬暟鎹腑鎵弿“鎸囧畾閮ㄥ垎”</div><div>// 鎵懼埌鍚庯紝鐢ㄦ埛鍙互閫氳繃 Bytes 鎴?Text 鏂規硶鏉ュ彇鍑?#8220;鎸囧畾閮ㄥ垎”</div><div>// 濡傛灉鎵弿榪囩▼涓亣鍒伴敊璇紝鍒欑粓姝㈡壂鎻忥紝騫惰繑鍥?false</div><div>func (s *Scanner) Scan() bool</div><div></div><div>func main() {</div><div><span style="white-space:pre"> </span>s := strings.NewReader("ABC\nDEF\r\nGHI\nJKL")</div><div><span style="white-space:pre"> </span>bs := bufio.NewScanner(s)</div><div><span style="white-space:pre"> </span>for bs.Scan() {</div><div><span style="white-space:pre"> </span>fmt.Printf("%s %v\n", bs.Bytes(), bs.Text())</div><div><span style="white-space:pre"> </span>}</div><div><span style="white-space:pre"> </span>// ABC ABC</div><div><span style="white-space:pre"> </span>// DEF DEF</div><div><span style="white-space:pre"> </span>// GHI GHI</div><div><span style="white-space:pre"> </span>// JKL JKL</div><div>}</div><div></div><div>------------------------------------------------------------</div><div></div><div>// Split 鐢ㄤ簬璁劇疆 Scanner 鐨?#8220;鍒囧垎鍑芥暟”</div><div>// 榪欎釜鍑芥暟蹇呴』鍦ㄨ皟鐢?Scan 鍓嶆墽琛?/div><div>func (s *Scanner) Split(split SplitFunc)</div><div></div><div>func main() {</div><div><span style="white-space:pre"> </span>s := strings.NewReader("ABC DEF GHI JKL")</div><div><span style="white-space:pre"> </span>bs := bufio.NewScanner(s)</div><div><span style="white-space:pre"> </span>bs.Split(bufio.ScanWords)</div><div><span style="white-space:pre"> </span>for bs.Scan() {</div><div><span style="white-space:pre"> </span>fmt.Println(bs.Text())</div><div><span style="white-space:pre"> </span>}</div><div><span style="white-space:pre"> </span>// ABC</div><div><span style="white-space:pre"> </span>// DEF</div><div><span style="white-space:pre"> </span>// GHI</div><div><span style="white-space:pre"> </span>// JKL</div><div>}</div><div></div><div>------------------------------------------------------------</div><div></div><div>// ScanBytes 鏄竴涓?#8220;鍒囧垎鍑芥暟”</div><div>// 鐢ㄦ潵鎵懼嚭 data 涓殑鍗曚釜瀛楄妭騫惰繑鍥?/div><div>func ScanBytes(data []byte, atEOF bool) (advance int, token []byte, err error)</div><div></div><div>func main() {</div><div><span style="white-space:pre"> </span>s := strings.NewReader("Hello 涓栫晫錛?)</div><div><span style="white-space:pre"> </span>bs := bufio.NewScanner(s)</div><div><span style="white-space:pre"> </span>bs.Split(bufio.ScanBytes)</div><div><span style="white-space:pre"> </span>for bs.Scan() {</div><div><span style="white-space:pre"> </span>fmt.Printf("%s ", bs.Text())</div><div><span style="white-space:pre"> </span>}</div><div>}</div><div></div><div>------------------------------------------------------------</div><div></div><div>// ScanRunes 鏄竴涓?#8220;鍒囧垎鍑芥暟”</div><div>// 鐢ㄦ潵鎵懼嚭 data 涓殑鍗曚釜 UTF8 瀛楃鐨勭紪鐮佸茍榪斿洖</div><div>// 濡傛灉 UTF8 瑙g爜鍑洪敊錛屽垯榪斿洖鐨?U+FFFD 浼氳鍋氫負 "\xef\xbf\xbd" 榪斿洖</div><div>// 榪欎嬌寰楃敤鎴鋒棤娉曞尯鍒?#8220;鐪熸鐨刄+FFFD瀛楃”鍜?#8220;瑙g爜閿欒鐨勮繑鍥炲?#8221;</div><div>func ScanRunes(data []byte, atEOF bool) (advance int, token []byte, err error)</div><div></div><div>func main() {</div><div><span style="white-space:pre"> </span>s := strings.NewReader("Hello 涓栫晫錛?)</div><div><span style="white-space:pre"> </span>bs := bufio.NewScanner(s)</div><div><span style="white-space:pre"> </span>bs.Split(bufio.ScanRunes)</div><div><span style="white-space:pre"> </span>for bs.Scan() {</div><div><span style="white-space:pre"> </span>fmt.Printf("%s ", bs.Text())</div><div><span style="white-space:pre"> </span>} // H e l l o   涓?鐣?錛?/div><div>}</div><div></div><div>------------------------------------------------------------</div><div></div><div>// ScanLines 鏄竴涓?#8220;鍒囧垎鍑芥暟”</div><div>// 鐢ㄦ潵鎵懼嚭 data 涓殑鍗曡鏁版嵁騫惰繑鍥烇紙鍖呮嫭絀鴻錛?/div><div>// 琛屽熬鏍囪鍙兘鏄?\n 鎴?\r\n錛堣繑鍥炲間笉鍖呮嫭琛屽熬鏍囪錛?/div><div>func ScanLines(data []byte, atEOF bool) (advance int, token []byte, err error)</div><div></div><div>------------------------------------------------------------</div><div></div><div>// ScanWords 鏄竴涓?#8220;鍒囧垎鍑芥暟”</div><div>// 鐢ㄦ潵鎵懼嚭 data 涓殑鍗曡瘝</div><div>// 鍗曡瘝浠ョ┖鐧藉瓧絎﹀垎闅旓紝絀虹櫧瀛楃鐢?unicode.IsSpace 瀹氫箟</div><div>func ScanWords(data []byte, atEOF bool) (advance int, token []byte, err error)</div><div></div><img src ="http://www.tkk7.com/oathleo/aggbug/403714.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/oathleo/" target="_blank">oathleo</a> 2013-09-05 16:01 <a href="http://www.tkk7.com/oathleo/archive/2013/09/05/403714.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>Golang 綾誨瀷杞崲鏁寸悊http://www.tkk7.com/oathleo/archive/2013/08/30/403491.htmloathleooathleoFri, 30 Aug 2013 03:37:00 GMThttp://www.tkk7.com/oathleo/archive/2013/08/30/403491.htmlhttp://www.tkk7.com/oathleo/comments/403491.htmlhttp://www.tkk7.com/oathleo/archive/2013/08/30/403491.html#Feedback0http://www.tkk7.com/oathleo/comments/commentRss/403491.htmlhttp://www.tkk7.com/oathleo/services/trackbacks/403491.html 

Golang 綾誨瀷杞崲鏁寸悊

鍒嗙被錛?nbsp;Go2013-07-31 11:02 177浜洪槄璇?/span> 璇勮(0) 鏀惰棌 涓炬姤
1銆佹暣褰㈠埌瀛楃涓詫細
    
  1. var i int = 1  
  2. var s string  
  1. s = strconv.Itoa(i) 鎴栬?nbsp;s = FormatInt(int64(i), 10)  

2銆佸瓧絎︿覆鍒版暣褰?br />    
  1. var s string = "1"  
  2. var i int  
  3. i, err = strconv.Atoi(s) 鎴栬?nbsp;i, err = ParseInt(s, 10, 0)  

3銆佸瓧絎︿覆鍒癴loat(32 / 64)
    
  1. var s string = 1  
  2. var f float32  
  3. f, err = ParseFloat(s, 32)  


 float 64鐨勬椂鍊欏皢涓婇潰鍑芥暟涓殑32杞負64鍗沖彲


4銆佹暣褰㈠埌float鎴栬協loat鍒版暣褰?br />    鐩存帴浣跨敤float(i) 鎴栬?int(f) 鐩存帴榪涜杞崲鍗沖彲


oathleo 2013-08-30 11:37 鍙戣〃璇勮
]]>golang strconvhttp://www.tkk7.com/oathleo/archive/2013/08/30/403488.htmloathleooathleoFri, 30 Aug 2013 03:26:00 GMThttp://www.tkk7.com/oathleo/archive/2013/08/30/403488.htmlhttp://www.tkk7.com/oathleo/comments/403488.htmlhttp://www.tkk7.com/oathleo/archive/2013/08/30/403488.html#Feedback0http://www.tkk7.com/oathleo/comments/commentRss/403488.htmlhttp://www.tkk7.com/oathleo/services/trackbacks/403488.html

golang strconv

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


a:=strconv.FormatFloat(10.100,'f',-1,32)

杈撳嚭:

10.1

a := strconv.FormatFloat(10.101, 'f', -1, 64)

杈撳嚭:

10.101

a := strconv.FormatFloat(10.010, 'f', -1, 64)

杈撳嚭錛?0.01

a:=strconv.FormatFloat(10.1,'f',2,64)

杈撳嚭:10.10


f 鍙傛暟鍙互鏃秂,E,g,G

-1 浠h〃杈撳嚭鐨勭簿搴﹀皬鏁扮偣鍚庣殑浣嶆暟錛屽鏋滄槸<0鐨勫鹼紝鍒欒繑鍥炴渶灝戠殑浣嶆暟鏉ヨ〃紺鴻鏁幫紝濡傛灉鏄ぇ浜?鐨勫垯榪斿洖瀵瑰簲浣嶆暟鐨勫?/p>

64 涓篺loat鐨勭被鍨嬶紝go涓璮loat鍒嗕負32鍜?4浣嶏紝鍥犳灝遍渶瑕佷紶鍏?2鎴栬?4


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


golang strconv.ParseInt 鏄皢瀛楃涓茶漿鎹負鏁板瓧鐨勫嚱鏁?鍔熻兘鐏板父涔嬪己澶?鐪嬬殑鎴戝彛姘寸洿嫻?

func ParseInt(s string, base int, bitSize int) (i int64, err error)

鍙傛暟1 鏁板瓧鐨勫瓧絎︿覆褰㈠紡

鍙傛暟2 鏁板瓧瀛楃涓茬殑榪涘埗 姣斿浜岃繘鍒?nbsp;鍏繘鍒?nbsp;鍗佽繘鍒?nbsp;鍗佸叚榪涘埗

鍙傛暟3 榪斿洖緇撴灉鐨刡it澶у皬 涔熷氨鏄痠nt8 int16 int32 int64

浠g爜:

01package main
02     
03import (
04    "strconv"
05)
06     
07func main() {
08    i, err := strconv.ParseInt("123", 10, 32)
09    if err != nil {
10        panic(err)
11    }
12    println(i)
13}




oathleo 2013-08-30 11:26 鍙戣〃璇勮
]]>Pragma: no-cache 瀵規ц兘鐨勫獎鍝?/title><link>http://www.tkk7.com/oathleo/archive/2013/08/27/403367.html</link><dc:creator>oathleo</dc:creator><author>oathleo</author><pubDate>Tue, 27 Aug 2013 07:29:00 GMT</pubDate><guid>http://www.tkk7.com/oathleo/archive/2013/08/27/403367.html</guid><wfw:comment>http://www.tkk7.com/oathleo/comments/403367.html</wfw:comment><comments>http://www.tkk7.com/oathleo/archive/2013/08/27/403367.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.tkk7.com/oathleo/comments/commentRss/403367.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/oathleo/services/trackbacks/403367.html</trackback:ping><description><![CDATA[鍋氫簡涓媑o鍜宩ava鐨刪ttp鎬ц兘鐨勭畝鍗曟瘮杈?br />鏈嶅姟绔洿鎺ヨ緭鍑哄瓧絎︿覆<br />浣跨敤JMeter<br />windows涓?br /> <img src="file:///C:/Users/Leo/AppData/Roaming/Foxmail/FoxmailTemp(2)/Catch2C57.jpg" alt="" /><img src="http://www.tkk7.com/images/blogjava_net/oathleo/1.jpg" border="0" alt="" width="1023" height="87" /><br /><br /><img src="http://www.tkk7.com/images/blogjava_net/oathleo/2.jpg" border="0" alt="" width="1014" height="77" /><br /><br />2000鐨勫茍鍙戯紝嫻嬭瘯緇撴灉寰堝嚭涔庢剰鏂欙紝go涓嶄細榪欎箞宸惂<br /><br /><br />鐮旂┒浜嗗崐灝忔椂錛屽師鍥犲涓?br />tomcat鐨剆ervlet閲屽姞浜?span style="background-color: #eeeeee; font-size: 13px;">        response.setHeader(</span><span style="background-color: #eeeeee; font-size: 13px;">"</span><span style="background-color: #eeeeee; font-size: 13px;">Pragma</span><span style="background-color: #eeeeee; font-size: 13px;">"</span><span style="background-color: #eeeeee; font-size: 13px;">, </span><span style="background-color: #eeeeee; font-size: 13px;">"</span><span style="background-color: #eeeeee; font-size: 13px;">no-cache</span><span style="background-color: #eeeeee; font-size: 13px;">"</span><span style="background-color: #eeeeee; font-size: 13px;">);<br /></span>go閲屾病鏈夎緗鍙傛暟<br /><br />璁劇疆鍚庨噸鏂拌窇嫻嬭瘯<br /><img src="http://www.tkk7.com/images/blogjava_net/oathleo/33.jpg" border="0" alt="" width="1021" height="84" /><br /><br /><br />鍙互浜嗗惂<br /><br /><br /><br /><br /><img src ="http://www.tkk7.com/oathleo/aggbug/403367.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/oathleo/" target="_blank">oathleo</a> 2013-08-27 15:29 <a href="http://www.tkk7.com/oathleo/archive/2013/08/27/403367.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>golang html 涓?golang瀹㈡埛绔?涓婁紶鏂囦歡 杞澆http://www.tkk7.com/oathleo/archive/2013/08/27/403336.htmloathleooathleoTue, 27 Aug 2013 01:10:00 GMThttp://www.tkk7.com/oathleo/archive/2013/08/27/403336.htmlhttp://www.tkk7.com/oathleo/comments/403336.htmlhttp://www.tkk7.com/oathleo/archive/2013/08/27/403336.html#Feedback0http://www.tkk7.com/oathleo/comments/commentRss/403336.htmlhttp://www.tkk7.com/oathleo/services/trackbacks/403336.htmlgolang html 涓?golang瀹㈡埛绔?涓婁紶鏂囦歡
 May 30 , 2013 at 08:30 am -  263鐐瑰嚮 -  0 璇勮

灝忔枃浠朵笂浼?/span>

 var buffer bytes.Buffer

w := multipart.NewWriter(&buffer)
// Write fields and files
w.CreateFormField("input1")
w.WriteField(
"input1","value1")
w.CreateFormFile(
"file","filename.dat")

resp,err :
= http.Post(url,w.FormDataContentType(),&buffer)


鏈嶅姟鍣ㄧ殑handler:

func uploadHandler(w http.ResponseWriter, r 
*http.Request){

 
if r.URL.Path=="/upload.go" {   

        fn,header,err:
=r.FormFile("file")

        defer fn.Close()

        f,err:
=os.Create("filenametosaveas")

        defer f.Close()

        io.Copy(f,fn)

    }

}


瀹㈡埛绔唬鐮侊細
func Upload() (err error) {

    
// Create buffer

    buf :
= new(bytes.Buffer) // caveat IMO dont use this for large files, \

    
// create a tmpfile and assemble your multipart from there (not tested)

    w :
= multipart.NewWriter(buf)

    
// Create file field

    fw, err :
= w.CreateFormFile("file""helloworld.go"//榪欓噷鐨刦ile寰堥噸瑕侊紝蹇呴』鍜屾湇鍔″櫒绔殑FormFile涓鑷?/span>

    
if err != nil {

        fmt.Println(
"c")

        
return err

    }

    fd, err :
= os.Open("helloworld.go")

    
if err != nil {

        fmt.Println(
"d")

        
return err

    }

    defer fd.Close()

    
// Write file field from file to upload

    _, err 
= io.Copy(fw, fd)

    
if err != nil {

        fmt.Println(
"e")

        
return err

    }

    
// Important if you do not close the multipart writer you will not have a

    
// terminating boundry

    w.Close()

    req, err :
= http.NewRequest("POST","http://192.168.2.127/configure.go?portId=2", buf)

    
if err != nil {

        fmt.Println(
"f")

        
return err

    }

    req.Header.Set(
"Content-Type", w.FormDataContentType())

      var client http.Client

    res, err :
= client.Do(req)

    
if err != nil {

        fmt.Println(
"g")

        
return err

    }

    io.Copy(os.Stderr, res.Body) 
// Replace this with Status.Code check

    fmt.Println(
"h")

    
return err

}


html涓婁紶錛?a style="color: #1570a6; text-decoration: none;">鍘熸枃

package main

import (
    
"fmt"
    
"io"
    
"net/http"
    
"log"
)

// 鑾峰彇澶у皬鐨勬帴鍙?/span>
type Sizer interface {
    Size() int64
}

// hello world, the web server
func HelloServer(w http.ResponseWriter, r *http.Request) {
    
if "POST" == r.Method {
        file, _, err :
= r.FormFile("file")
        
if err != nil {
            http.Error(w, err.Error(), 
500)
            
return
        }
        defer file.Close()
        f,err:
=os.Create("filenametosaveas")
        defer f.Close()
        io.Copy(f,file)
        fmt.Fprintf(w, 
"涓婁紶鏂囦歡鐨勫ぇ灝忎負: %d", file.(Sizer).Size())
        
return
    }

    
// 涓婁紶欏甸潰
    w.Header().Add("Content-Type""text/html")
    w.WriteHeader(
200)
    html :
= `
<form enctype="multipart/form-data" action="/hello" method="POST">
    Send 
this file: <input name="file" type="file" />
    
<input type="submit" value="Send File" />
</form>
`
    io.WriteString(w, html)
}

func main() {
    http.HandleFunc(
"/hello", HelloServer)
    err :
= http.ListenAndServe(":12345", nil)
    
if err != nil {
        log.Fatal(
"ListenAndServe: ", err)
    }
}



澶ф枃浠朵笂浼?/span>

鍏抽敭鐨勪笉鍚屾槸io.MultiReader

package main 

import ( 
  
"fmt" 
  
"net/http" 
  
"mime/multipart" 
  
"bytes" 
  
"os" 
  
"io" 
  ) 


func postFile(filename 
string, target_url string) (*http.Response, error) { 
  body_buf :
= bytes.NewBufferString(""
  body_writer :
= multipart.NewWriter(body_buf) 

  
// use the body_writer to write the Part headers to the buffer 
  _, err := body_writer.CreateFormFile("upfile", filename) 
  
if err != nil { 
    fmt.Println(
"error writing to buffer"
    
return nil, err 
  } 

  
// the file data will be the second part of the body 
  fh, err := os.Open(filename) 
  
if err != nil { 
    fmt.Println(
"error opening file"
    
return nil, err 
  } 
  defer fh.Close()
  
// need to know the boundary to properly close the part myself. 
  boundary := body_writer.Boundary()
  close_string :
= fmt.Sprintf("\r\n--%s--\r\n", boundary)
  close_buf :
= bytes.NewBufferString(close_string)
  
// use multi-reader to defer the reading of the file data until writing to the socket buffer. 
  request_reader := io.MultiReader(body_buf, fh, close_buf) 
  fi, err :
= fh.Stat() 
  
if err != nil { 
    fmt.Printf(
"Error Stating file: %s", filename) 
    
return nil, err 
  } 
  req, err :
= http.NewRequest("POST", target_url, request_reader) 
  
if err != nil { 
    
return nil, err 
  } 

  
// Set headers for multipart, and Content Length 
  req.Header.Add("Content-Type""multipart/form-data; boundary=" + boundary) 
  req.ContentLength 
= fi.Size()+int64(body_buf.Len())+int64(close_buf.Len()) 

  
return http.DefaultClient.Do(req) 
}





oathleo 2013-08-27 09:10 鍙戣〃璇勮
]]>
golang string rune len 鍙兘涓嶅悓http://www.tkk7.com/oathleo/archive/2013/08/19/403027.htmloathleooathleoMon, 19 Aug 2013 03:31:00 GMThttp://www.tkk7.com/oathleo/archive/2013/08/19/403027.htmlhttp://www.tkk7.com/oathleo/comments/403027.htmlhttp://www.tkk7.com/oathleo/archive/2013/08/19/403027.html#Feedback0http://www.tkk7.com/oathleo/comments/commentRss/403027.htmlhttp://www.tkk7.com/oathleo/services/trackbacks/403027.html        rune_str := []rune(info)
        fmt.Print("rune_len:" , len(rune_str))
        fmt.Print("string_len:" , len(info))

string 鍜屽搴旂殑 rune鏁扮粍鐨刲en涓嶄竴瀹氱浉鍚?/div>
濡傛灉info鏄湁涓枃鐨勶紝鍒欎袱涓猯ength鏄笉涓鏍風殑錛屽仛string澶勭悊鐨勬椂鍊欙紝瑕佹敞鎰?br />

oathleo 2013-08-19 11:31 鍙戣〃璇勮
]]>golang xml 澶勭悊涔嬬敓鎴?灞炴у繀欏誨ぇ鍐?/title><link>http://www.tkk7.com/oathleo/archive/2013/08/16/402934.html</link><dc:creator>oathleo</dc:creator><author>oathleo</author><pubDate>Fri, 16 Aug 2013 07:53:00 GMT</pubDate><guid>http://www.tkk7.com/oathleo/archive/2013/08/16/402934.html</guid><wfw:comment>http://www.tkk7.com/oathleo/comments/402934.html</wfw:comment><comments>http://www.tkk7.com/oathleo/archive/2013/08/16/402934.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.tkk7.com/oathleo/comments/commentRss/402934.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/oathleo/services/trackbacks/402934.html</trackback:ping><description><![CDATA[xml瀵瑰簲鐨剆truct 灞炴у繀欏誨ぇ鍐欙紝鍚﹀垯鏃犳硶瀹炵幇錛?br /> Code鏄繀欏葷殑<br /> <div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->package main<br /> <br /> import (<br />     "encoding/xml"<br />     "fmt"<br />     "os"<br /> )<br /> <br /> type xmldas <span style="color: #0000FF; ">struct</span> {<br />     XMLName  xml.Name       `xml:"das"`<br />     DataPort <span style="color: #0000FF; ">string</span>         `xml:"DataPort,attr"`<br />     Desc     <span style="color: #0000FF; ">string</span>         `xml:"desc,attr"`<br />     Src      xmlsource      `xml:"source"`<br />     Dest     xmldestination `xml:"destination"`<br /> }<br /> <br /> type xmlsource <span style="color: #0000FF; ">struct</span> {<br />     Path  <span style="color: #0000FF; ">string</span> `xml:"path,attr"`<br />     Param <span style="color: #0000FF; ">string</span> `xml:"param,attr"`<br /> }<br /> <br /> type xmldestination <span style="color: #0000FF; ">struct</span> {<br />     Path  <span style="color: #0000FF; ">string</span> `xml:"path,attr"`<br />     Param <span style="color: #0000FF; ">string</span> `xml:"param,attr"`<br /> }<br /> <br /> func main() {<br />     v := xmldas{DataPort: "8250", Desc: "123"}<br />     v.Src = xmlsource{Path: "123", Param: "456"}<br />     v.Dest = xmldestination{Path: "789", Param: "000"}<br />     output, err := xml.MarshalIndent(v, "  ", "    ")<br />     <span style="color: #0000FF; ">if</span> err != nil {<br />         fmt.Printf("error: %v\n", err)<br />     }<br />     os.Stdout.Write([]<span style="color: #0000FF; ">byte</span>(xml.Header))<br />     os.Stdout.Write(output)<br /> }</div><img src ="http://www.tkk7.com/oathleo/aggbug/402934.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/oathleo/" target="_blank">oathleo</a> 2013-08-16 15:53 <a href="http://www.tkk7.com/oathleo/archive/2013/08/16/402934.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>golang xml 澶勭悊http://www.tkk7.com/oathleo/archive/2013/08/12/402704.htmloathleooathleoMon, 12 Aug 2013 09:03:00 GMThttp://www.tkk7.com/oathleo/archive/2013/08/12/402704.htmlhttp://www.tkk7.com/oathleo/comments/402704.htmlhttp://www.tkk7.com/oathleo/archive/2013/08/12/402704.html#Feedback0http://www.tkk7.com/oathleo/comments/commentRss/402704.htmlhttp://www.tkk7.com/oathleo/services/trackbacks/402704.html灝唜ml鏂囦歡瑙f瀽鎴愬搴旂殑struct瀵硅薄鏄氳繃xml.Unmarshal鏉ュ畬鎴愮殑錛岃繖涓繃紼嬫槸濡備綍瀹炵幇鐨勶紵鍙互鐪嬪埌鎴戜滑鐨剆truct瀹氫箟鍚庨潰澶氫簡涓浜涚被浼間簬xml:"serverName"榪欐牱鐨勫唴瀹?榪欎釜鏄痵truct鐨勪竴涓壒鎬э紝瀹冧滑琚О涓?struct tag錛屽畠浠槸鐢ㄦ潵杈呭姪鍙嶅皠鐨勩?br />

package main

import (
    "encoding/xml"
    "fmt"
    "os"
)

type Servers struct {
    XMLName xml.Name `xml:"servers"`
    Version string   `xml:"version,attr"`
    Svs     []server `xml:"server"`
}

type server struct {
    ServerName string `xml:"serverName"`
    ServerIP   string `xml:"serverIP"`
}

func main() {
    v := &Servers{Version: "1"}
    v.Svs = append(v.Svs, server{"Shanghai_VPN", "127.0.0.1"})
    v.Svs = append(v.Svs, server{"Beijing_VPN", "127.0.0.2"})
    output, err := xml.MarshalIndent(v, "  ", "    ")
    if err != nil {
        fmt.Printf("error: %v\n", err)
    }
    os.Stdout.Write([]byte(xml.Header))

    os.Stdout.Write(output)
}




oathleo 2013-08-12 17:03 鍙戣〃璇勮
]]>
exec starthttp://www.tkk7.com/oathleo/archive/2013/08/08/402538.htmloathleooathleoThu, 08 Aug 2013 01:07:00 GMThttp://www.tkk7.com/oathleo/archive/2013/08/08/402538.htmlhttp://www.tkk7.com/oathleo/comments/402538.htmlhttp://www.tkk7.com/oathleo/archive/2013/08/08/402538.html#Feedback0http://www.tkk7.com/oathleo/comments/commentRss/402538.htmlhttp://www.tkk7.com/oathleo/services/trackbacks/402538.htmlexec鍗′綇浜嗭紝闃誨璋冪敤鑲畾鍗′綇浜?br />璋冪敤Start

func (*Cmd) Run
func (c *Cmd) Run() error

Run starts the specified command and waits for it to complete.

The returned error is nil if the command runs, has no problems copying stdin, stdout, and stderr, and exits with a zero exit status.

If the command fails to run or doesn't complete successfully, the error is of type *ExitError. Other error types may be returned for I/O problems.

func (*Cmd) Start

func (c *Cmd) Start() error

Start starts the specified command but does not wait for it to complete.



oathleo 2013-08-08 09:07 鍙戣〃璇勮
]]>
Golang璇硶涓庝唬鐮佹牸寮忛熻http://www.tkk7.com/oathleo/archive/2013/08/02/402316.htmloathleooathleoFri, 02 Aug 2013 08:15:00 GMThttp://www.tkk7.com/oathleo/archive/2013/08/02/402316.htmlhttp://www.tkk7.com/oathleo/comments/402316.htmlhttp://www.tkk7.com/oathleo/archive/2013/08/02/402316.html#Feedback0http://www.tkk7.com/oathleo/comments/commentRss/402316.htmlhttp://www.tkk7.com/oathleo/services/trackbacks/402316.html
// Description: Golang璇硶涓庝唬鐮佹牸寮忛熻
// Author: cxy
// Date: 2013-04-01
// Version: 0.3
// TODO 璇存槑


// TODO package

// Go鏄噰鐢ㄨ娉曡В鏋愬櫒鑷姩鍦ㄦ瘡琛屾湯灝懼鍔犲垎鍙鳳紝鎵浠ュ湪鍐欎唬鐮佺殑鏃跺欏彲浠ユ妸鍒嗗彿鐪佺暐銆?br />// Go緙栫▼涓彧鏈夊嚑涓湴鏂歸渶瑕佹墜宸ュ鍔犲垎鍙鳳紝濡? for寰幆浣跨敤鍒嗗彿鎶婂垵濮嬪寲錛屾潯浠跺拰閬嶅巻鍏冪礌鍒嗗紑銆傚湪涓琛屼腑鏈夊鏉¤鍙ユ椂錛岄渶瑕佸鍔犲垎鍙楓?br />// 涓嶈兘鎶婃帶鍒惰鍙?if, for, switch, or select)銆佸嚱鏁般佹柟娉?nbsp;鐨勫乏澶ф嫭鍙峰崟鐙斁鍦ㄤ竴琛岋紝 濡傛灉浣犺繖鏍蜂綔浜嗚娉曡В鏋愬櫒浼氬湪澶ф嫭鍙蜂箣鍓嶆彃鍏ヤ竴涓垎鍙鳳紝瀵艱嚧緙栬瘧閿欒銆?br />
// 寮曠敤鍖呭悕涓庡鍏ヨ礬寰勭殑鏈鍚庝竴涓洰褰曚竴鑷?/span>
import "fmt"
import "math/rand"
fmt.Println(rand.Intn(10))    // 0鍒?0涔嬮棿鐨勯潪璐熶吉闅忔満鏁?br />
// 鐢ㄥ渾鎷彿緇勫悎瀵煎叆鍖咃紝榪欐槸“factored”瀵煎叆璇彞
import ("fmt"; "math")
import (
    "fmt"
    "math"
)
// 瀵煎叆鍖呭彲浠ュ畾涔夊埆鍚嶏紝闃叉鍚屽悕縐扮殑鍖呭啿紿?/span>
import n "net/http"
import (
    鎺у埗鍙?nbsp;"fmt"
    m "math"
)
鎺у埗鍙?Println(m.Pi)

// 棣栧瓧姣嶅ぇ鍐欑殑鍚嶇О鏄瀵煎嚭鐨? 棣栧瓧姣嶅皬鍐欑殑鍚嶇О鍙兘鍦ㄥ悓涓鍖呭唴璁塊棶(鍚屽寘璺ㄦ枃浠朵篃鑳借闂?
var In int // In is public
var in byte // in is private
var 鐪嬩笉瑙?nbsp;string // 鐪嬩笉瑙?nbsp;is private
const Com bool = false // Com is public
const 榪樻槸鐪嬩笉瑙?nbsp;uint8 = 1 // 榪樻槸鐪嬩笉瑙?nbsp;is private
type Integer int // Integer is public
type 銉栥兗銉偄銉?nbsp;*bool // 銉栥兗銉偄銉?nbsp;is private
func Export() {// Export is public
func 瀵煎叆() {// 瀵煎叆 is private
func (me *Integer) valueOf(s stringint {// valueOf is private
func (i 銉栥兗銉偄銉? String() string {// String is public

// Go 鐨勫熀鏈被鍨嬶細
┌──────┬─────────┬────────┬─────────┬───────────┬────────────┐
│ bool │ string  │        │         │           │            │
├──────┼─────────┼────────┼─────────┼───────────┼────────────┤
│ int  │ int8    │ int16  │ int32   │ int64     │            │
│      │         │        │ rune    │           │            │
├──────┼─────────┼────────┼─────────┼───────────┼────────────┤
│ uint │ uint8   │ uint16 │ uint32  │ uint64    │ uintptr    │
│      │ byte    │        │         │           │            │
├──────┼─────────┼────────┼─────────┼───────────┼────────────┤
│      │         │        │ float32 │ float64   │            │
├──────┼─────────┼────────┼─────────┼───────────┼────────────┤
│      │         │        │         │ complex64 │ complex128 │
└──────┴─────────┴────────┴─────────┴───────────┴────────────┘
// byte 鏄?nbsp;uint8 鐨勫埆鍚?br />// rune 鏄?nbsp;int32 鐨勫埆鍚嶏紝浠h〃涓涓猆nicode鐮佺偣

// 鍙橀噺澹版槑, 浣跨敤var鍏抽敭瀛?nbsp;   (Go涓彧鑳戒嬌鐢╲ar澹版槑鍙橀噺錛屾棤闇鏄懼紡鍒濆鍖栧鹼級
var i int    // i = 0
var s string    // s = ""    (Go涓殑string涓嶅瓨鍦╪il(null)鍊鹼紝榛樿闆跺煎氨鏄┖涓?nbsp;"" 鎴?nbsp;``)
var e error    // e = nil, error鏄疓o鐨勫唴寤烘帴鍙g被鍨嬶紝涓嶆槸鍩烘湰綾誨瀷銆?br />
// var 璇彞澹版槑浜嗕竴涓彉閲忕殑鍒楄〃錛岀被鍨嬪湪鍙橀噺鍚嶄箣鍚?/span>
var a,b,c int    // a = 0, b = 0, c = 0
var (
    a int    // a = 0
    b string    // b = ""
    c uint    // c = 0
)

// 鍙橀噺瀹氫箟鏃跺垵濮嬪寲璧嬪鹼紝姣忎釜鍙橀噺瀵瑰簲涓涓?/span>
var a int = 0
var a,b int = 0, 1

// 鍒濆鍖栦嬌鐢ㄨ〃杈懼紡鏃訛紝鍙互鐪佺暐綾誨瀷錛屽彉閲忎粠鍒濆鍊間腑鑾峰緱綾誨瀷
var a = 'A'    // a int32
c := 1 + 2i    // c complex128
var a,b = 0, "B"    // a int, b string
a, b := 0, "B"    // a int, b string
c := `formatted
 string`    // c string

// := 緇撴瀯涓嶈兘浣跨敤鍦ㄥ嚱鏁板錛屽嚱鏁板鐨勬瘡涓娉曞潡閮藉繀欏諱互鍏抽敭瀛楀紑濮?br />
// 甯擱噺鍙互鏄瓧絎︺佸瓧絎︿覆銆佸竷灝旀垨鏁板瓧綾誨瀷鐨勫鹼紝鏁板煎父閲忔槸楂樼簿搴︾殑鍊?/span>
const x int = 3
const (
    a byte = 'A'
    b string = "B"
    c bool = true
    d int = 4
    e float32 = 5.1
    f complex64 = 6 + 6i
)

// 鏈寚瀹氱被鍨嬬殑甯擱噺鐢卞父閲忓煎喅瀹氬叾綾誨瀷
const a = 0    // a int
const (
    b = 2.3    // b float64
    c = true    // c bool
)

// 鑷姩鏋氫婦甯擱噺 iota
// iota鐨勬灇涓懼煎彲浠ヨ祴鍊肩粰鏁板煎吋瀹圭被鍨?br />// 姣忎釜甯擱噺鍗曠嫭澹版槑鏃? iota涓嶄細鑷姩閫掑(鏃犳剰涔?
const a int = iota    // a = 0
const b int = iota    // b = 0
const c byte = iota    // c = 0
const d uint64 = iota    // d = 0

// 甯擱噺緇勫悎澹版槑鏃? iota姣忔寮曠敤浼氶愭鑷, 鍒濆鍊間負0,姝ヨ繘鍊間負1
const (
    a uint8 = iota    // a = 0
    b int16 = iota    // b = 1
    c rune = iota    // c = 2
    d float64 = iota    // d = 3
    e uintptr = iota    // e = 4
)

// 鏋氫婦鐨勫父閲忛兘涓哄悓涓綾誨瀷鏃? 鍙互浣跨敤綆鍗曞簭鍒楁牸寮?
const (
    a = iota    // a int32 = 0
    b            // b int32 = 1
    c            // c int32 = 2
)

// 鏋氫婦搴忓垪涓殑鏈寚瀹氱被鍨嬬殑甯擱噺浼氳窡闅忓簭鍒楀墠闈㈡渶鍚庝竴嬈″嚭鐜扮被鍨嬪畾涔夌殑綾誨瀷
const (
    a byte = iota    // a uint8 = 0
    b                // b uint8 = 1
    c                // c uint8 = 2
    d rune = iota    // d int32 = 3
    e                // e int32 = 4
    f                // f int32 = 5
)

// iota鑷鍊煎彧鍦ㄤ竴涓父閲忓畾涔夌粍鍚堜腑鏈夋晥,璺沖嚭甯擱噺緇勫悎瀹氫箟鍚巌ota鍊煎綊0
const (
    a = iota    // a int32 = 0
    b            // b int32 = 1
    c            // c int32 = 2
)
const (
    e = iota    // e int32 = 0    (iota閲嶆柊鍒濆鍖栧茍鑷)
    f            // f int32 = 1
)

// 瀹氬埗iota搴忓垪鍒濆鍊間笌姝ヨ繘鍊?nbsp;(閫氳繃鏁板鍏紡瀹炵幇)
const (
    a = (iota + 2) * 3    // a int32 = 0    (a=(0+2)*3) 鍒濆鍊間負6,姝ヨ繘鍊間負3
    b                    // b int32 = 3    (b=(1+2)*3)
    c                    // c int32 = 6    (c=(2+2)*3)
    d                    // d int32 = 9    (d=(3+2)*3)
)

// 鏁扮粍澹版槑甯︽湁闀垮害淇℃伅錛屾暟緇勭殑闀垮害鍥哄畾
var a [3]int = [3]int{0, 1, 2}    // a = [0 1 2]
var b [3]int = [3]int{}    // b = [0 0 0]
var c = [3]int{}    // c = [0 0 0]
d := [3]int{}    // d = [0 0 0]
fmt.Printf("%T\t%#v\t%d\t%d\n", d, d, len(d), cap(d))    // [3]int    [3]int{0, 0, 0}    3    3
// 浣跨敤鑷姩璁$畻鏁扮粍鍒濆鏁版嵁鐨勯暱搴?/span>
var a = []int{0, 1, 2}
x := [][3]int{{0, 1, 2}, {3, 4, 5}}

// slice 鎸囧悜鏁扮粍鐨勫鹼紝騫朵笖鍚屾椂鍖呭惈浜嗛暱搴︿俊鎭?/span>
var a []int
fmt.Printf("%T\t%#v\t%d\t%d\n", a, a, len(a), cap(a))    // []int    []int(nil)    0    0
var a = new([]int)
fmt.Printf("%T\t%#v\t%d\t%d\n", a, a, len(*a), cap(*a))    // *[]int    &[]int(nil)    0    0
var b = make([]int, 0)
fmt.Printf("%T\t%#v\t%d\t%d\n", b, b, len(b), cap(b))    // []int    []int{}    0    0
var c = make([]int, 3, 10)
fmt.Printf("%T\t%#v\t%d\t%d\n", c, c, len(c), cap(c))    // []int    []int{}    3    10
var d []int = []int{0, 1, 2}
fmt.Printf("%T\t%#v\t%d\t%d\n", d, d, len(d), cap(d))    // []int    []int{0, 1, 2}    3    3

// slice 鍙互閲嶆柊鍒囩墖錛屽垱寤轟竴涓柊鐨?nbsp;slice 鍊兼寚鍚戠浉鍚岀殑鏁扮粍
s := []int{0, 1, 2, 3, 4}
fmt.Println(s[1,3])    // [1 2]    (鎴彇浠庡紑濮嬬儲寮曞埌緇撴潫绱㈠紩-1 涔嬮棿鐨勭墖孌?
fmt.Println(s[:4])    // [0 1 2 3]
fmt.Println(s[1:])    // [1 2 3 4]
fmt.Println(s[1:1])    // []

// 鍚憇lice涓坊鍔犲厓绱?/span>
s := make([]string, 3)
s = append(s, "a")


// map 鍦ㄤ嬌鐢ㄤ箣鍓嶅繀欏葷敤 make 鏉ュ垱寤猴紙涓嶆槸 new錛夛紱涓涓間負 nil 鐨?nbsp;map 鏄┖鐨勶紝騫朵笖涓嶈兘璧嬪?/span>
var m map[int]int
m[0] = 0    // × runtime error: assignment to entry in nil map
fmt.Printf("type: %T\n", m)    // map[int]int
fmt.Printf("value: %#v\n", m)    // map[int]int(nil)
fmt.Printf("value: %v\n", m)    // map[]
fmt.Println("is nil: ", nil == m)    // true
fmt.Println("length: ", len(m))    // 0錛宨f m is nil, len(m) is zero.

var m map[int]int = make(map[int]int)
m[0] = 0    // 鎻掑叆鎴栦慨鏀瑰厓绱?/span>
fmt.Printf("type: %T\n", m)        // map[int]int
fmt.Printf("value: %#v\n", m)        // map[int]int(0:0)
fmt.Printf("value: %v\n", m)        // map[0:0]
fmt.Println("is nil: ", nil == m)    // false
fmt.Println("length: ", len(m))        // 1

m = map[int]int{
0:0,
1:1,    // 鏈鍚庣殑閫楀彿鏄繀欏葷殑
}
m = map[string]S{
"a":S{0,1},
"b":{2,3},    // 綾誨瀷鍚嶇О鍙渷鐣?/span>
}
a := m["a"]    // 鍙栧?/span>
a, ok := m["a"]    // 鍙栧? 騫墮氳繃ok(bool)鍒ゆ柇key瀵瑰簲鐨勫厓绱犳槸鍚﹀瓨鍦?
delete(m, "a")    // 鍒犻櫎key瀵瑰簲鐨勫厓绱?

// 緇撴瀯浣擄紙struct錛夊氨鏄竴涓瓧孌電殑闆嗗悎錛?nbsp;type 瀹氫箟璺熷叾瀛楅潰鎰忔濈浉絎?/span>
type S struct {
    A int
    B, c string
}
type (
    A struct {
        s *S
    }
    B struct {
        A    // 緇勫悎
    }
)
// 緇撴瀯浣撴枃娉曡〃紺洪氳繃緇撴瀯浣撳瓧孌電殑鍊間綔涓哄垪琛ㄦ潵鏂板垎閰嶄竴涓粨鏋勪綋銆?/span>
var s S = S{0, "1", "2"}
// 浣跨敤 Name: 璇硶鍙互浠呭垪鍑洪儴鍒嗗瓧孌點傦紙瀛楁鍚嶇殑欏哄簭鏃犲叧銆傦級
var s S = S{A: 0, B: "1"}
var s S = S{}
// 鐗規畩鐨勫墠緙 & 鏋勯犱簡鎸囧悜緇撴瀯浣撴枃娉曠殑鎸囬拡銆?/span>
var s *S = &S{0, "1", "2"}

// 琛ㄨ揪寮?nbsp;new(T) 鍒嗛厤浜嗕竴涓浂鍒濆鍖栫殑 T 鍊鹼紝騫惰繑鍥炴寚鍚戝畠鐨勬寚閽?/span>
var s *S = new(S)
// 鏈夋寚閽堬紝浣嗘槸娌℃湁鎸囬拡榪愮畻錛岀粨鏋勪綋瀛楁浣跨敤鐐瑰彿鏉ヨ闂?br />// 緇撴瀯浣撳瓧孌靛彲浠ラ氳繃緇撴瀯浣撴寚閽堟潵璁塊棶銆傞氳繃鎸囬拡闂存帴鐨勮闂槸閫忔槑鐨?/span>
fmt.Println(s.A)
fmt.Println((*s).A)

// TODO interface
type IF interface {
    a()
}

// TODO chanel

// TODO error

// if 璇彞 灝忔嫭鍙?nbsp;( )鏄彲閫夌殑錛岃?nbsp;{ } 鏄繀欏葷殑銆?/span>
if (i < 0)        // 緙栬瘧閿欒.
    println(i)

if i < 0        // 緙栬瘧閿欒.
    println(i)

if (i < 0) {    // 緙栬瘧閫氳繃.
    println(i)
}
if i < 0 {
    println(i)
else {
    println(i)
}

// 鍙互鍦ㄦ潯浠朵箣鍓嶆墽琛屼竴涓畝鍗曠殑璇彞錛岀敱榪欎釜璇彞瀹氫箟鐨勫彉閲忕殑浣滅敤鍩熶粎鍦?nbsp;if/else 鑼冨洿涔嬪唴
if (i := 0; i < 1) {    // 緙栬瘧閿欒.
    println(i)
}

if i := 0; (i < 1) {    // 緙栬瘧閫氳繃.
    println(i)
}

if i := 0; i < 0 {    // 浣跨敤gofmt鏍煎紡鍖栦唬鐮佷細鑷姩縐婚櫎浠g爜涓笉蹇呰鐨勫皬鎷彿( )
    println(i)
else if i == 0 {
    println(i)
else {
    println(i)
}

// if璇彞浣滅敤鍩熻寖鍥村唴瀹氫箟鐨勫彉閲忎細瑕嗙洊澶栭儴鍚屽悕鍙橀噺,(涓庢柟娉曞嚱鏁板唴灞閮ㄥ彉閲忚鐩栧叏灞鍙橀噺鐩稿悓)
a, b := 0, 1
if a, b := 3, 4; a > 1 && b > 2 {
    println(a, b)    // 3 4
}
println(a, b)    // 0 1


// 鍙湁涓縐嶅驚鐜粨鏋勶紝for 寰幆銆傚彲浠ヨ鍓嶇疆銆佸悗緗鍙ヤ負絀猴紝鎴栬呭叏涓虹┖
for i := 0; i < 10; i++ {}
for i := 0; i < 10; {}
for ; i < 10; i++ {}
for ; i < 10; {}
for i < 10 {}
for ; ; {}
for {}

// 灝忔嫭鍙?nbsp;( )鏄彲閫夌殑錛岃?nbsp;{ } 鏄繀欏葷殑銆?/span>
for (i := 0; i < 10; i++) {}    // 緙栬瘧閿欒.
for i := 0; (i < 10); i++ {}    // 緙栬瘧閫氳繃.
for (i < 10) {}    // 緙栬瘧閫氳繃.

// TODO continue

// TODO for range

// TODO switch
// TODO fallthrough break
// TODO type assertion

// TODO select

// TODO goto

// 鍑芥暟鍙互娌℃湁鍙傛暟鎴栨帴鍙楀涓弬鏁?/span>
func f() {}
func f(a int) {}
func f(a int, b byte) {}
func f(a int) {}    // 鍙彉鍙傛暟
func f(a int, b bool, c string) {}
// 鍑芥暟鍙互榪斿洖浠繪剰鏁伴噺鐨勮繑鍥炲?/span>
func f() int {
    return 0
}
func f() intstring {
    return 0, "A"
}
// 鍑芥暟榪斿洖緇撴灉鍙傛暟錛屽彲浠ュ儚鍙橀噺閭f牱鍛藉悕鍜屼嬌鐢?/span>
func f() a int, b string {
    a = 1
    b = "B"
    return    // 鎴栬?nbsp;return a, b
}

// 褰撲袱涓垨澶氫釜榪炵畫鐨勫嚱鏁板懡鍚嶅弬鏁版槸鍚屼竴綾誨瀷錛屽垯闄や簡鏈鍚庝竴涓被鍨嬩箣澶栵紝鍏朵粬閮藉彲浠ョ渷鐣?/span>
func f(a,b,c int) {}
func f() a,b,c int {}
func f(a,b,c int) x,y,z int {}

// 鍑芥暟涔熸槸鍊鹼紝鍙互灝嗗嚱鏁拌祴鍊肩粰鍙橀噺
var f (func(i intint) = func(i intint {
    return i
}
fmt.Println(f(3))    // 3
var f func() int = func() int {
    return 0
}
fmt.Println(f())    // 0
var f func() = func() {}
var f = func() {}
f := func() {}

// TODO defer

// TODO 鏂規硶

// TODO 鍐呭緩鍑芥暟
append 
cap 
close 
complex 
copy 
delete 
imag 
len 
make 
new 
panic 
print 
println 
real 
recover

// TODO 騫跺彂
go func() {}


oathleo 2013-08-02 16:15 鍙戣〃璇勮
]]>
Go璇█鏂囦歡鎿嶄綔http://www.tkk7.com/oathleo/archive/2013/08/02/402287.htmloathleooathleoFri, 02 Aug 2013 02:43:00 GMThttp://www.tkk7.com/oathleo/archive/2013/08/02/402287.htmlhttp://www.tkk7.com/oathleo/comments/402287.htmlhttp://www.tkk7.com/oathleo/archive/2013/08/02/402287.html#Feedback0http://www.tkk7.com/oathleo/comments/commentRss/402287.htmlhttp://www.tkk7.com/oathleo/services/trackbacks/402287.html鍐欑▼搴忕涓嶄簡鏂囦歡鎿嶄綔錛?/span>榪欓噷鎬葷粨涓?/span>go璇█鏂囦歡鎿嶄綔銆?/span>

涓銆佸緩绔嬩笌鎵撳紑

寤虹珛鏂囦歡鍑芥暟錛?/p>

func Create(name string) (file *File, err Error)

func NewFile(fd int, name string) *File

鍏蜂綋瑙佸畼緗戯細http://golang.org/pkg/os/#Create

 

鎵撳紑鏂囦歡鍑芥暟錛?/p>

func Open(name string) (file *File, err Error)

func OpenFile(name string, flag int, perm uint32) (file *File, err Error)

鍏蜂綋瑙佸畼緗戯細http://golang.org/pkg/os/#Open

 

浜屻佸啓鏂囦歡

鍐欐枃浠跺嚱鏁幫細

func (file *File) Write(b []byte) (n int, err Error)

func (file *File) WriteAt(b []byte, off int64) (n int, err Error)

func (file *File) WriteString(s string) (ret int, err Error)

鍏蜂綋瑙佸畼緗戯細http://golang.org/pkg/os/#File.Write 

鍐欐枃浠剁ず渚嬩唬鐮侊細

package main import (         "os"         "fmt" ) func main() {         userFile := "test.txt"         fout,err := os.Create(userFile)         defer fout.Close()         if err != nil {                 fmt.Println(userFile,err)                 return         }         for i:= 0;i<10;i++ {                 fout.WriteString("Just a test!\r\n")                 fout.Write([]byte("Just a test!\r\n"))         } }

涓夈佽鏂囦歡

璇繪枃浠跺嚱鏁幫細

func (file *File) Read(b []byte) (n int, err Error)

func (file *File) ReadAt(b []byte, off int64) (n int, err Error)

鍏蜂綋瑙佸畼緗戯細http://golang.org/pkg/os/#File.Read

璇繪枃浠剁ず渚嬩唬鐮侊細

package main import (         "os"         "fmt" ) func main() {         userFile := "test.txt"         fin,err := os.Open(userFile)         defer fin.Close()         if err != nil {                 fmt.Println(userFile,err)                 return         }         buf := make([]byte, 1024)         for{                 n, _ := fin.Read(buf)                 if 0 == n { break }                 os.Stdout.Write(buf[:n])         } }

鍥涖佸垹闄ゆ枃浠?/span>

鍑芥暟錛?/span>

func Remove(name string) Error



oathleo 2013-08-02 10:43 鍙戣〃璇勮
]]>
goLang 璇誨彇Inthttp://www.tkk7.com/oathleo/archive/2013/08/02/402283.htmloathleooathleoFri, 02 Aug 2013 02:13:00 GMThttp://www.tkk7.com/oathleo/archive/2013/08/02/402283.htmlhttp://www.tkk7.com/oathleo/comments/402283.htmlhttp://www.tkk7.com/oathleo/archive/2013/08/02/402283.html#Feedback0http://www.tkk7.com/oathleo/comments/commentRss/402283.htmlhttp://www.tkk7.com/oathleo/services/trackbacks/402283.html
func readInt32(conn net.Conn) int32 {
    num_byte := make([]byte, 4)
    conn.Read(num_byte)
    var value int32 = 0
//    //windows
//    byte2 := num_byte[2]
//    byte3 := num_byte[3]
//    num_byte[3] = num_byte[0]
//    num_byte[0] = byte3
//    num_byte[2] = num_byte[1]
//    num_byte[1] = byte2
//    //windows

    
//windows
    num_byte[0],num_byte[1],num_byte[2],num_byte[3] = num_byte[3],num_byte[2],num_byte[1],num_byte[0]

    for i := 0; i < 4; i++ {
        shift := uint32((4 - 1 - i) * 8)
        value = value + (int32(num_byte[i])&0x000000FF)<<shift
    }
    return value
}


oathleo 2013-08-02 10:13 鍙戣〃璇勮
]]>
主站蜘蛛池模板: 成人看的午夜免费毛片| 四虎永久成人免费影院域名| 国产免费一区二区三区VR| 国产美女亚洲精品久久久综合| www.xxxx.com日本免费| 91九色老熟女免费资源站| 最近最新中文字幕完整版免费高清| 国产免费久久精品99re丫y| 内射无码专区久久亚洲| 亚洲欧洲国产经精品香蕉网| 免费人成视频在线播放| 四虎在线最新永久免费| JLZZJLZZ亚洲乱熟无码| 日韩亚洲国产综合高清| 在线涩涩免费观看国产精品 | 久久精品中文字幕免费| 免费看a级黄色片| 久久精品国产亚洲AV香蕉| 黄页网站在线免费观看| 国产精品久久永久免费| 亚洲精品成人无码中文毛片不卡| 亚洲精品美女久久久久99| 亚洲免费综合色在线视频| 鲁大师在线影院免费观看| 国产免费观看黄AV片| 亚洲国产成+人+综合| 免费看黄的成人APP| 国产yw855.c免费视频| 亚洲人成免费电影| 国产免费一区二区三区在线观看| 2021精品国产品免费观看| 亚洲av无码天堂一区二区三区| 亚洲乳大丰满中文字幕| 国产一区二区三区亚洲综合| 青草草色A免费观看在线| 亚洲日本乱码在线观看| 免费无码国产V片在线观看| 嫩草影院在线免费观看| 亚洲人成在线免费观看| 67194国产精品免费观看| 国产亚洲精品国产|