锘??xml version="1.0" encoding="utf-8" standalone="yes"?>国产日韩亚洲大尺度高清,亚洲欧洲国产精品久久,亚洲av日韩av天堂影片精品http://www.tkk7.com/stevenjohn/category/55274.html閭d簺闈掓槬鐨勫瞾鏈?/description>zh-cnThu, 03 Aug 2017 05:37:30 GMTThu, 03 Aug 2017 05:37:30 GMT60GoLang涔嬫柟娉曚笌鎺ュ彛http://www.tkk7.com/stevenjohn/archive/2017/08/03/432720.htmlabinabinThu, 03 Aug 2017 03:34:00 GMThttp://www.tkk7.com/stevenjohn/archive/2017/08/03/432720.htmlhttp://www.tkk7.com/stevenjohn/comments/432720.htmlhttp://www.tkk7.com/stevenjohn/archive/2017/08/03/432720.html#Feedback0http://www.tkk7.com/stevenjohn/comments/commentRss/432720.htmlhttp://www.tkk7.com/stevenjohn/services/trackbacks/432720.htmlGo璇█娌℃湁娌胯浼犵粺闈㈠悜瀵硅薄緙栫▼涓殑璇稿姒傚康錛屾瘮濡傜戶鎵褲佽櫄鍑芥暟銆佹瀯閫犲嚱鏁板拰鏋愭瀯鍑芥暟銆侀殣钘忕殑this鎸囬拡絳夈?/p>

 

鏂規硶

Go 璇█涓悓鏃舵湁鍑芥暟鍜屾柟娉曘?span style="color: #ff0000;">鏂規硶灝辨槸涓涓寘鍚簡鎺ュ彈鑰咃紙receiver錛夌殑鍑芥暟錛宺eceiver鍙互鏄唴緗被鍨嬫垨鑰呯粨鏋勪綋綾誨瀷鐨勪竴涓兼垨鑰呮槸涓涓寚閽堛傛墍鏈夌粰瀹氱被鍨嬬殑鏂規硶灞炰簬璇ョ被鍨嬬殑鏂規硶闆嗐?br />

濡備笅闈㈢殑榪欎釜渚嬪瓙錛屽畾涔変簡涓涓柊綾誨瀷Integer錛屽畠鍜宨nt涓鏍鳳紝鍙槸涓哄畠鍐呯疆鐨刬nt綾誨瀷澧炲姞浜嗕釜鏂版柟娉昄ess()

澶嶅埗浠g爜
type Integer int   func (a Integer) Less(b Integer) bool {     return a < b  }  func main() {     var a Integer = 1       if a.Less(2) {         fmt.Println("less then 2")     }    }
澶嶅埗浠g爜

鍙互鐪嬪嚭錛孏o璇█鍦ㄨ嚜瀹氫箟綾誨瀷鐨勫璞′腑娌℃湁C++/Java閭g闅愯棌鐨則his鎸囬拡錛岃屾槸鍦ㄥ畾涔夋垚鍛樻柟娉曟椂鏄懼紡澹版槑浜嗗叾鎵灞炵殑瀵硅薄銆?/p>

 

method鐨勮娉曞涓嬶細

func (r ReceiverType) funcName(parameters) (results)

褰撹皟鐢╩ethod鏃訛紝浼氬皢receiver浣滀負鍑芥暟鐨勭涓涓弬鏁幫細

funcName(r, parameters);

鎵浠ワ紝receiver鏄肩被鍨嬭繕鏄寚閽堢被鍨嬭鐪媘ethod鐨勪綔鐢ㄣ傚鏋滆淇敼瀵硅薄鐨勫鹼紝灝遍渶瑕佷紶閫掑璞$殑鎸囬拡銆?/p>

鎸囬拡浣滀負Receiver浼氬瀹炰緥瀵硅薄鐨勫唴瀹瑰彂鐢熸搷浣?鑰屾櫘閫氱被鍨嬩綔涓篟eceiver浠呬粎鏄互鍓湰浣滀負鎿嶄綔瀵硅薄,騫朵笉瀵瑰師瀹炰緥瀵硅薄鍙戠敓鎿嶄綔銆?/p>

澶嶅埗浠g爜
func (a *Ingeger) Add(b Integer) {     *a += b }  func main() {     var a Integer = 1      a.Add(3)     fmt.Println("a =", a)     //  a = 4 }
澶嶅埗浠g爜

濡傛灉Add鏂規硶涓嶄嬌鐢ㄦ寚閽堬紝鍒檃榪斿洖鐨勭粨鏋滀笉鍙橈紝榪欐槸鍥犱負Go璇█鍑芥暟鐨勫弬鏁頒篃鏄熀浜庡間紶閫掋?/p>

娉ㄦ剰錛?span style="color: #ff0000;">褰撴柟娉曠殑鎺ュ彈鑰呮槸鎸囬拡鏃訛紝鍗充嬌鐢ㄥ肩被鍨嬭皟鐢ㄩ偅涔堟柟娉曞唴閮ㄤ篃鏄鎸囬拡鐨勬搷浣溿?/span>

 

涔嬪墠璇磋繃錛孏o璇█娌℃湁鏋勯犲嚱鏁扮殑姒傚康錛岄氬父浣跨敤涓涓叏灞鍑芥暟鏉ュ畬鎴愩備緥濡傦細

澶嶅埗浠g爜
func NewRect(x, y, width, height float64) *Rect {     return &Rect{x, y, width, height} }     func main() {     rect1 := NewRect(1,2,10,20)     fmt.Println(rect1.width) }
澶嶅埗浠g爜

 

 


鍖垮悕緇勫悎

Go璇█鎻愪緵浜嗙戶鎵匡紝浣嗘槸閲囩敤浜嗙粍鍚堢殑璇硶錛屾垜浠皢鍏剁О涓哄尶鍚嶇粍鍚堬紝渚嬪錛?/span>

澶嶅埗浠g爜
type Base struct {     name string }  func (base *Base) Set(myname string) {     base.name = myname }  func (base *Base) Get() string {     return base.name }  type Derived struct {     Base     age int  }  func (derived *Derived) Get() (nm string, ag int) {     return derived.name, derived.age }   func main() {     b := &Derived{}      b.Set("sina")     fmt.Println(b.Get()) }
澶嶅埗浠g爜

渚嬪瓙涓紝鍦˙ase綾誨瀷瀹氫箟浜唃et()鍜宻et()涓や釜鏂規硶錛岃孌erived綾誨瀷緇ф壙浜咮ase綾伙紝騫舵敼鍐欎簡Get()鏂規硶錛屽湪Derived瀵硅薄璋冪敤Set()鏂規硶錛屼細鍔犺澆鍩虹被瀵瑰簲鐨勬柟娉曪紱鑰岃皟鐢℅et()鏂規硶鏃訛紝鍔犺澆媧劇敓綾繪敼鍐欑殑鏂規硶銆?/p>

 

緇勫悎鐨勭被鍨嬪拰琚粍鍚堢殑綾誨瀷鍖呭惈鍚屽悕鎴愬憳鏃訛紝 浼氫笉浼氭湁闂鍛紵鍙互鍙傝冧笅闈㈢殑渚嬪瓙錛?/p>

澶嶅埗浠g爜
type Base struct {     name string     age int }  func (base *Base) Set(myname string, myage int) {     base.name = myname     base.age = myage }  type Derived struct {     Base     name string }  func main() {     b := &Derived{}      b.Set("sina", 30)     fmt.Println("b.name =",b.name, "\tb.Base.name =", b.Base.name)     fmt.Println("b.age =",b.age, "\tb.Base.age =", b.Base.age) }
澶嶅埗浠g爜

 

 

 


鍊艱涔夊拰寮曠敤璇箟

鍊艱涔夊拰寮曠敤璇箟鐨勫樊鍒湪浜庤祴鍊鹼紝姣斿

b = a b.Modify()

濡傛灉b鐨勪慨鏀逛笉浼氬獎鍝峚鐨勫鹼紝閭d箞姝ょ被鍨嬪睘浜庡肩被鍨嬶紱濡傛灉浼氬獎鍝峚鐨勫鹼紝閭d箞姝ょ被鍨嬫槸寮曠敤綾誨瀷銆?/span>

Go璇█涓殑澶у鏁扮被鍨嬮兘鍩轟簬鍊艱涔夛紝鍖呮嫭錛?/p>

  • 鍩烘湰綾誨瀷錛屽byte銆乮nt銆乥ool銆乫loat32銆乻tring絳夛紱
  • 澶嶅悎綾誨瀷錛屽arry銆乻truct銆乸ointer絳夛紱

 

C璇█涓殑鏁扮粍姣旇緝鐗瑰埆錛岄氳繃鍑芥暟浼犻掍竴涓暟緇勭殑鏃跺欏熀浜庡紩鐢ㄨ涔夛紝浣嗘槸鍦ㄧ粨鏋勪綋瀹氫箟鏁扮粍鍙橀噺鐨勬椂鍊欏熀浜庡艱涔夈傝屽湪Go璇█涓紝鏁扮粍鍜屽熀鏈被鍨嬫病鏈夊尯鍒紝鏄緢綰補鐨勫肩被鍨嬶紝渚嬪錛?/p>

var a = [3] int{1,2,3} var b = a b[1]++ fmt.Println(a, b)   // [1 2 3] [1 3 3]

浠庣粨鏋滅湅錛宐=a璧嬪艱鍙ユ槸鏁扮粍鍐呭鐨勫畬鏁村鍒訛紝瑕佹兂琛ㄨ揪寮曠敤錛岄渶瑕佺敤鎸囬拡錛?/p>

var a = [3] int{1,2,3} var b = &a銆銆銆銆// 寮曠敤璇箟 b[1]++ fmt.Println(a, b)   // [1 3 3] [1 3 3]

 

 


鎺ュ彛

Interface 鏄竴緇勬娊璞℃柟娉曪紙鏈叿浣撳疄鐜扮殑鏂規硶/浠呭寘鍚柟娉曞悕鍙傛暟榪斿洖鍊肩殑鏂規硶錛夌殑闆嗗悎錛屽鏋滃疄鐜頒簡 interface 涓殑鎵鏈夋柟娉曪紝鍗寵綾?瀵硅薄灝卞疄鐜頒簡璇ユ帴鍙c?/p>

Interface 鐨勫0鏄庢牸寮忥細

type interfaceName interface {       //鏂規硶鍒楄〃   }  

Interface 鍙互琚換鎰忓璞″疄鐜幫紝涓涓被鍨?瀵硅薄涔熷彲浠ュ疄鐜板涓?interface錛?br />interface鐨勫彉閲忓彲浠ユ寔鏈変換鎰忓疄鐜拌interface綾誨瀷鐨勫璞°?/span>

 濡備笅闈㈢殑渚嬪瓙錛?/p>

澶嶅埗浠g爜
package main      import "fmt"      type Human struct {         name string         age int         phone string     }      type Student struct {         Human //鍖垮悕瀛楁         school string         loan float32     }      type Employee struct {         Human //鍖垮悕瀛楁         company string         money float32     }      //Human瀹炵幇SayHi鏂規硶     func (h Human) SayHi() {         fmt.Printf("Hi, I am %s you can call me on %s\n", h.name, h.phone)     }      //Human瀹炵幇Sing鏂規硶     func (h Human) Sing(lyrics string) {         fmt.Println("La la la la...", lyrics)     }      //Employee閲嶈澆Human鐨凷ayHi鏂規硶     func (e Employee) SayHi() {         fmt.Printf("Hi, I am %s, I work at %s. Call me on %s\n", e.name,             e.company, e.phone)         }      // Interface Men琚獺uman,Student鍜孍mployee瀹炵幇     // 鍥犱負榪欎笁涓被鍨嬮兘瀹炵幇浜嗚繖涓や釜鏂規硶     type Men interface {         SayHi()         Sing(lyrics string)     }      func main() {         mike := Student{Human{"Mike", 25, "222-222-XXX"}, "MIT", 0.00}         paul := Student{Human{"Paul", 26, "111-222-XXX"}, "Harvard", 100}         sam := Employee{Human{"Sam", 36, "444-222-XXX"}, "Golang Inc.", 1000}         tom := Employee{Human{"Tom", 37, "222-444-XXX"}, "Things Ltd.", 5000}          //瀹氫箟Men綾誨瀷鐨勫彉閲廼         var i Men          //i鑳藉瓨鍌⊿tudent         i = mike銆銆銆銆         fmt.Println("This is Mike, a Student:")         i.SayHi()         i.Sing("November rain")          //i涔熻兘瀛樺偍Employee         i = tom         fmt.Println("This is tom, an Employee:")         i.SayHi()         i.Sing("Born to be wild")          //瀹氫箟浜唖lice Men         fmt.Println("Let's use a slice of Men and see what happens")         x := make([]Men, 3)         //榪欎笁涓兘鏄笉鍚岀被鍨嬬殑鍏冪礌錛屼絾鏄粬浠疄鐜頒簡interface鍚屼竴涓帴鍙?/span>         x[0], x[1], x[2] = paul, sam, mike          for _, value := range x{             value.SayHi()         }     }
澶嶅埗浠g爜

 

絀烘帴鍙?/h3>

絀篿nterface(interface{})涓嶅寘鍚換浣曠殑method錛屾鍥犱負濡傛錛?span style="background-color: #ffff00;">鎵鏈夌殑綾誨瀷閮藉疄鐜頒簡絀篿nterface銆傜┖interface瀵逛簬鎻忚堪璧蜂笉鍒頒換浣曠殑浣滅敤(鍥犱負瀹冧笉鍖呭惈浠諱綍鐨刴ethod錛夛紝浣嗘槸絀篿nterface鍦ㄦ垜浠渶瑕佸瓨鍌ㄤ換鎰忕被鍨嬬殑鏁板肩殑鏃跺欑浉褰撴湁鐢紝鍥犱負瀹冨彲浠ュ瓨鍌ㄤ換鎰忕被鍨嬬殑鏁板箋傚畠鏈夌偣綾諱技浜嶤璇█鐨剉oid*綾誨瀷銆?/span>

澶嶅埗浠g爜
// 瀹氫箟a涓虹┖鎺ュ彛     var a interface{}     var i int = 5     s := "Hello world"     // a鍙互瀛樺偍浠繪剰綾誨瀷鐨勬暟鍊?/span>     a = i     a = s
澶嶅埗浠g爜

 

interface鐨勫彉閲忛噷闈㈠彲浠ュ瓨鍌ㄤ換鎰忕被鍨嬬殑鏁板鹼紙璇ョ被鍨嬪疄鐜頒簡interface錛夛紝閭d箞鎴戜滑鎬庝箞鍙嶅悜鐭ラ亾榪欎釜interface鍙橀噺閲岄潰瀹為檯淇濆瓨浜嗙殑鏄摢涓被鍨嬬殑瀵硅薄鍛紵鐩墠甯哥敤鐨勬湁涓ょ鏂規硶錛歴witch嫻嬭瘯銆丆omma-ok鏂█銆?/p>

 

switch嫻嬭瘯濡備笅錛?/p>

澶嶅埗浠g爜
type Element interface{} type List [] Element  type Person struct {     name string     age int  }  //鎵撳嵃 func (p Person) String() string {     return "(name: " + p.name + " - age: "+strconv.Itoa(p.age)+ " years)" }  func main() {     list := make(List, 3)     list[0] = 1 //an int      list[1] = "Hello" //a string     list[2] = Person{"Dennis", 70}       for index, element := range list{         switch value := element.(type) {             case int:                 fmt.Printf("list[%d] is an int and its value is %d\n", index, value)             case string:                 fmt.Printf("list[%d] is a string and its value is %s\n", index, value)             case Person:                 fmt.Printf("list[%d] is a Person and its value is %s\n", index, value)             default:                 fmt.Println("list[%d] is of a different type", index)         }        }    }
澶嶅埗浠g爜

 

濡傛灉浣跨敤Comma-ok鏂█鐨勮瘽錛?/p>

澶嶅埗浠g爜
func main() {     list := make(List, 3)     list[0] = 1 // an int     list[1] = "Hello" // a string     list[2] = Person{"Dennis", 70}      for index, element := range list {         if value, ok := element.(int); ok {             fmt.Printf("list[%d] is an int and its value is %d\n", index, value)         } else if value, ok := element.(string); ok {             fmt.Printf("list[%d] is a string and its value is %s\n", index, value)         } else if value, ok := element.(Person); ok {             fmt.Printf("list[%d] is a Person and its value is %s\n", index, value)         } else {             fmt.Printf("list[%d] is of a different type\n", index)         }     } }
澶嶅埗浠g爜

 

 

宓屽叆鎺ュ彛

姝estruct綾誨瀷鍙互鍖呭惈涓涓尶鍚嶅瓧孌碉紝interface涔熷彲浠ュ祵濂楀彟澶栦竴涓帴鍙c?/p>

濡傛灉涓涓猧nterface1浣滀負interface2鐨勪竴涓祵鍏ュ瓧孌碉紝閭d箞interface2闅愬紡鐨勫寘鍚簡interface1閲岄潰鐨刴ethod銆?/p>

 

 

鍙嶅皠

鎵璋撳弽灝勶紙reflect錛夊氨鏄兘媯鏌ョ▼搴忓湪榪愯鏃剁殑鐘舵併?/p>

浣跨敤reflect涓鑸垎鎴愪笁姝ワ紝涓嬮潰綆瑕佺殑璁茶В涓涓嬶細瑕佸幓鍙嶅皠鏄竴涓被鍨嬬殑鍊?榪欎簺鍊奸兘瀹炵幇浜嗙┖interface)錛岄鍏堥渶瑕佹妸瀹冭漿鍖栨垚reflect瀵硅薄(reflect.Type鎴栬卹eflect.Value錛屾牴鎹笉鍚岀殑鎯呭喌璋冪敤涓嶅悓鐨勫嚱鏁?銆傝繖涓ょ鑾峰彇鏂瑰紡濡備笅錛?/p>

 t := reflect.TypeOf(i)    //寰楀埌綾誨瀷鐨勫厓鏁版嵁,閫氳繃t鎴戜滑鑳借幏鍙栫被鍨嬪畾涔夐噷闈㈢殑鎵鏈夊厓绱?/span>  v := reflect.ValueOf(i)   //寰楀埌瀹為檯鐨勫鹼紝閫氳繃v鎴戜滑鑾峰彇瀛樺偍鍦ㄩ噷闈㈢殑鍊鹼紝榪樺彲浠ュ幓鏀瑰彉鍊?/span>

 

杞寲涓簉eflect瀵硅薄涔嬪悗鎴戜滑灝卞彲浠ヨ繘琛屼竴浜涙搷浣滀簡錛屼篃灝辨槸灝唕eflect瀵硅薄杞寲鎴愮浉搴旂殑鍊鹼紝渚嬪

tag := t.Elem().Field(0).Tag  //鑾峰彇瀹氫箟鍦╯truct閲岄潰鐨勬爣絳?/span> name := v.Elem().Field(0).String()  //鑾峰彇瀛樺偍鍦ㄧ涓涓瓧孌甸噷闈㈢殑鍊?/span>

 

鑾峰彇鍙嶅皠鍊艱兘榪斿洖鐩稿簲鐨勭被鍨嬪拰鏁板?/p>

var x float64 = 3.4 v := reflect.ValueOf(x) fmt.Println("type:", v.Type()) fmt.Println("kind is float64:", v.Kind() == reflect.Float64) fmt.Println("value:", v.Float())

 

鏈鍚庯紝鍙嶅皠鐨勮瘽錛岄偅涔堝弽灝勭殑瀛楁蹇呴』鏄彲淇敼鐨勶紝鎴戜滑鍓嶉潰瀛︿範榪囦紶鍊煎拰浼犲紩鐢紝榪欎釜閲岄潰涔熸槸涓鏍風殑閬撶悊銆傚弽灝勭殑瀛楁蹇呴』鏄彲璇誨啓鐨勬剰鎬濇槸錛屽鏋滀笅闈㈣繖鏍峰啓錛岄偅涔堜細鍙戠敓閿欒

var x float64 = 3.4 v := reflect.ValueOf(x) v.SetFloat(7.1)

 

濡傛灉瑕佷慨鏀圭浉搴旂殑鍊鹼紝蹇呴』榪欐牱鍐?/p>

var x float64 = 3.4 p := reflect.ValueOf(&x) v := p.Elem() v.SetFloat(7.1)

涓婇潰鍙槸瀵瑰弽灝勭殑綆鍗曚粙緇嶏紝鏇存繁鍏ョ殑鐞嗚В榪橀渶瑕佽嚜宸卞湪緙栫▼涓笉鏂殑瀹炶返銆?/p>

 

 

鍙傝冩枃妗o細

http://se77en.cc/2014/05/05/methods-interfaces-and-embedded-types-in-golang/

http://se77en.cc/2014/05/04/choose-whether-to-use-a-value-or-pointer-receiver-on-methods/

 http://www.cnblogs.com/chenny7/p/4497969.html







abin 2017-08-03 11:34 鍙戣〃璇勮
]]>
鑰佽櫈瑕佸GoLang-鍑芥暟(涓?http://www.tkk7.com/stevenjohn/archive/2017/08/02/432718.htmlabinabinWed, 02 Aug 2017 08:39:00 GMThttp://www.tkk7.com/stevenjohn/archive/2017/08/02/432718.htmlhttp://www.tkk7.com/stevenjohn/comments/432718.htmlhttp://www.tkk7.com/stevenjohn/archive/2017/08/02/432718.html#Feedback0http://www.tkk7.com/stevenjohn/comments/commentRss/432718.htmlhttp://www.tkk7.com/stevenjohn/services/trackbacks/432718.html涓嶅彲鎴栫己鐨勫嚱鏁幫紝鍦℅o涓畾涔夊嚱鏁扮殑鏂瑰紡濡備笅錛?/p>
func (p myType ) funcName ( a, b int , c string ) ( r , s int ) {     return } 

閫氳繃鍑芥暟瀹氫箟錛屾垜浠彲浠ョ湅鍒癎o涓嚱鏁板拰鍏朵粬璇█涓殑鍏辨у拰鐗規?/p>

鍏辨?/h3>
  • 鍏抽敭瀛?#8212;—func
  • 鏂規硶鍚?#8212;—funcName
  • 鍏ュ弬——— a,b int,b string
  • 榪斿洖鍊?#8212;— r,s int
  • 鍑芥暟浣?#8212;— {}

鐗規?/h3>

Go涓嚱鏁扮殑鐗規ф槸闈炲父閰風殑錛岀粰鎴戜滑甯︽潵涓嶄竴鏍風殑緙栫▼浣撻獙銆?/p>

涓虹壒瀹氱被鍨嬪畾涔夊嚱鏁幫紝鍗充負綾誨瀷瀵硅薄瀹氫箟鏂規硶

鍦℅o涓氳繃緇欏嚱鏁版爣鏄庢墍灞炵被鍨嬶紝鏉ョ粰璇ョ被鍨嬪畾涔夋柟娉曪紝涓婇潰鐨?nbsp;p myType 鍗寵〃紺虹粰myType澹版槑浜嗕竴涓柟娉曪紝 p myType 涓嶆槸蹇呴』鐨勩傚鏋滄病鏈夛紝鍒欑函綺規槸涓涓嚱鏁幫紝閫氳繃鍖呭悕縐拌闂俻ackageName.funcationName

濡傦細

//瀹氫箟鏂扮殑綾誨瀷double錛屼富瑕佺洰鐨勬槸緇檉loat64綾誨瀷鎵╁厖鏂規硶 type double float64  //鍒ゆ柇a鏄惁絳変簬b func (a double) IsEqual(b double) bool {     var r = a - b     if r == 0.0 {         return true     } else if r < 0.0 {         return r > -0.0001     }     return r < 0.0001 }  //鍒ゆ柇a鏄惁絳変簬b func IsEqual(a, b float64) bool {     var r = a - b     if r == 0.0 {         return true     } else if r < 0.0 {         return r > -0.0001     }     return r < 0.0001 }  func main() {     var a double = 1.999999     var b double = 1.9999998     fmt.Println(a.IsEqual(b))     fmt.Println(a.IsEqual(3))     fmt.Println( IsEqual( (float64)(a), (float64)(b) ) )  } 

涓婅堪紺轟緥涓?float64 鍩烘湰綾誨瀷鎵╁厖浜嗘柟娉旾sEqual錛岃鏂規硶涓昏鏄В鍐崇簿搴﹂棶棰樸?鍏舵柟娉曡皟鐢ㄦ柟寮忎負錛?nbsp;a.IsEqual(double) 錛屽鏋滀笉鎵╁厖鏂規硶錛屾垜浠彧鑳戒嬌鐢ㄥ嚱鏁?code style="margin: 0px 2px; padding: 0px 5px; border: 1px solid #eaeaea; background-color: #f8f8f8; border-radius: 3px; white-space: nowrap; font-family: monospace, Monaco;">IsEqual(a, b float64)

鍏ュ弬涓紝濡傛灉榪炵畫鐨勫弬鏁扮被鍨嬩竴鑷達紝鍒欏彲浠ョ渷鐣ヨ繛緇涓弬鏁扮殑綾誨瀷錛屽彧淇濈暀鏈鍚庝竴涓被鍨嬪0鏄庛?/h4>

濡?nbsp;func IsEqual(a, b float64) bool 榪欎釜鏂規硶灝卞彧淇濈暀浜嗕竴涓被鍨嬪0鏄?姝ゆ椂鍏ュ弬a鍜宐鍧囨槸float64鏁版嵁綾誨瀷銆?榪欐牱涔熸槸鍙互鐨勶細 func IsEqual(a, b float64, accuracy int) bool

鍙樺弬錛氬叆鍙傛敮鎸佸彉鍙?鍗沖彲鎺ュ彈涓嶇‘瀹氭暟閲忕殑鍚屼竴綾誨瀷鐨勫弬鏁?/h4>

濡?nbsp;func Sum(args ...int) 鍙傛暟args鏄殑slice錛屽叾鍏冪礌綾誨瀷涓篿nt 銆傜粡甯鎬嬌鐢ㄧ殑fmt.Printf灝辨槸涓涓帴鍙椾換鎰忎釜鏁板弬鏁扮殑鍑芥暟 fmt.Printf(format string, args ...interface{})

鏀寔澶氳繑鍥炲?/h4>

鍓嶉潰鎴戜滑瀹氫箟鍑芥暟鏃惰繑鍥炲兼湁涓や釜r,s 銆傝繖鏄潪甯告湁鐢ㄧ殑錛屾垜鍦ㄥ啓C#浠g爜鏃訛紝甯稿父涓轟簡浠庡凡鏈夊嚱鏁頒腑鑾峰緱鏇村鐨勪俊鎭紝闇瑕佷慨鏀瑰嚱鏁扮鍚嶏紝浣跨敤out ,ref 絳夋柟寮忓幓鑾峰緱鏇村榪斿洖緇撴灉銆傝岀幇鍦ㄤ嬌鐢℅o鏃跺垯寰堢畝鍗曪紝鐩存帴鍦ㄨ繑鍥炲煎悗闈㈡坊鍔犺繑鍥炲弬鏁板嵆鍙?/p>

濡?鍦–#涓竴涓瓧絎︿覆杞崲涓篿nt綾誨瀷鏃墮昏緫浠g爜

int v=0;  if ( int.TryPase("123456",out v) ) {     //code } 

鑰屽湪Go涓紝鍒欏彲浠ヨ繖鏍峰疄鐜?閫昏緫綺劇畝鑰屾槑紜?/p>

if v,isOk :=int.TryPase("123456") ; isOk {     //code } 

鍚屾椂鍦℅o涓緢澶氬嚱鏁板厖鍒嗗埄鐢ㄤ簡澶氳繑鍥炲?/p>

  • func (file *File) Write(b []byte) (n int, err error)
  • func Sincos(x float64) (sin, cos float64)

閭d箞濡傛灉鎴戝彧闇瑕佹煇涓涓繑鍥炲鹼紝鑰屼笉鍏沖績鍏朵粬榪斿洖鍊肩殑璇濓紝鎴戣濡備綍鍔炲憿錛?榪欐椂鍙互綆鍗曠殑浣跨敤絎﹀彿涓嬪垝綰?#8221;_“ 鏉ュ拷鐣ヤ笉鍏沖績鐨勮繑鍥炲箋傚錛?/p>

_, cos = math.Sincos(3.1415) //鍙渶瑕乧os璁$畻鐨勫?

鍛藉悕榪斿洖鍊?/h4>

鍓嶉潰鎴戜滑璇翠簡鍑芥暟鍙互鏈夊涓繑鍥炲鹼紝榪欓噷鎴戣繕瑕佽鐨勬槸錛屽湪鍑芥暟瀹氫箟鏃跺彲浠ョ粰鎵鏈夌殑榪斿洖鍊煎垎鍒懡鍚嶏紝榪欐牱灝辮兘鍦ㄥ嚱鏁頒腑浠繪剰浣嶇疆緇欎笉鍚岃繑鍥炲煎鍒訛紝鑰屼笉闇瑕佸湪return璇彞涓墠鎸囧畾榪斿洖鍊箋傚悓鏃朵篃鑳藉寮哄彲璇繪э紝涔熸彁楂榞odoc鎵鐢熸垚鏂囨。鐨勫彲璇繪?/p>

濡傛灉涓嶆敮鎸佸懡鍚嶈繑鍥炲鹼紝鎴戝彲鑳戒細鏄繖鏍峰仛鐨?/p>

func ReadFull(r Reader, buf []byte) (int, error) {     var n int     var err error      for len(buf) > 0  {         var nr int         nr, err = r.Read(buf)          n += nr         if err !=nil {             return n,err         }         buf = buf[nr:]     }     return n,err } 

浣嗘敮鎸佺粰榪斿洖鍊煎懡鍚嶅悗錛屽疄闄呬笂灝辨槸鐪佺暐浜嗗彉閲忕殑澹版槑錛宺eturn鏃舵棤闇鍐欐垚return n,err 鑰屾槸灝嗙洿鎺ュ皢鍊艱繑鍥?/p>

func ReadFull(r Reader, buf []byte) (n int, err error) {     for len(buf) > 0 && err == nil {         var nr int         nr, err = r.Read(buf)         n += nr         buf = buf[nr:]     }     return } 

鍑芥暟涔熸槸“鍊?#8221;

鍜孏o涓叾浠栦笢瑗夸竴鏍鳳紝鍑芥暟涔熸槸鍊鹼紝榪欐牱灝卞彲浠ュ0鏄庝竴涓嚱鏁扮被鍨嬬殑鍙橀噺錛屽皢鍑芥暟浣滀負鍙傛暟浼犻掋?/p>

澹版槑鍑芥暟涓哄肩殑鍙橀噺(鍖垮悕鍑芥暟:鍙祴鍊間釜鍙橀噺錛屼篃鍙洿鎺ユ墽琛?

//璧嬪?fc := func(msg string) {     fmt.Println("you say :", msg) } fmt.Printf("%T \n", fc) fc("hello,my love") //鐩存帴鎵ц func(msg string) {     fmt.Println("say :", msg) }("I love to code") 

杈撳嚭緇撴灉濡備笅錛岃繖閲岃〃鏄巉c 鐨勭被鍨嬩負錛歠unc(string)

func(string)  you say : hello,my love say : I love to code 

灝嗗嚱鏁頒綔涓哄叆鍙傦紙鍥炶皟鍑芥暟錛夛紝鑳藉甫鏉ヤ究鍒┿傚鏃ュ織澶勭悊錛屼負浜嗙粺涓澶勭悊錛屽皢淇℃伅鍧囬氳繃鎸囧畾鍑芥暟鍘昏褰曟棩蹇楋紝涓旀槸鍚﹁褰曟棩蹇楄繕鏈夊紑鍏?/p>

func Log(title string, getMsg func() string) {     //濡傛灉寮鍚棩蹇楄褰?鍒欒褰曟棩蹇?    if true {         fmt.Println(title, ":", getMsg())     } } //---------璋冪敤-------------- count := 0 msg := func() string {     count++     return "鎮ㄦ病鏈夊嵆浣挎彁閱掓垜,宸茶Е鐘硶寰? } Log("error", msg) Log("warring", msg) Log("info", msg) fmt.Println(count) 

榪欓噷杈撳嚭緇撴灉濡備笅錛宑ount 涔熷彂鐢熶簡鍙樺寲

error : 鎮ㄦ病鏈夊嵆浣挎彁閱掓垜,宸茶Е鐘硶寰?warring : 鎮ㄦ病鏈夊嵆浣挎彁閱掓垜,宸茶Е鐘硶寰?info : 鎮ㄦ病鏈夊嵆浣挎彁閱掓垜,宸茶Е鐘硶寰?3 

鍑芥暟涔熸槸“綾誨瀷”

浣犳湁娌℃湁娉ㄦ剰鍒頒笂闈㈢ず渚嬩腑鐨?nbsp;fc := func(msg string)... 錛屾棦鐒跺尶鍚嶅嚱鏁板彲浠ヨ祴鍊肩粰涓涓彉閲忥紝鍚屾椂鎴戜滑緇忓父榪欐牱緇檌nt璧嬪?nbsp;value := 2 ,鏄惁鎴戜滑鍙互澹版槑func(string) 綾誨瀷 鍛紝褰撶劧鏄彲浠ョ殑銆?/p>

//涓涓褰曟棩蹇楃殑綾誨瀷錛歠unc(string) type saveLog func(msg string)  //灝嗗瓧絎︿覆杞崲涓篿nt64,濡傛灉杞崲澶辮觸璋冪敤saveLog func stringToInt(s string, log saveLog) int64 {      if value, err := strconv.ParseInt(s, 0, 0); err != nil {         log(err.Error())         return 0     } else {         return value     } }  //璁板綍鏃ュ織娑堟伅鐨勫叿浣撳疄鐜?func myLog(msg string) {     fmt.Println("Find Error:", msg) }  func main() {     stringToInt("123", myLog) //杞崲鏃跺皢璋冪敤mylog璁板綍鏃ュ織     stringToInt("s", myLog) } 

榪欓噷鎴戜滑瀹氫箟浜嗕竴涓被鍨嬶紝涓撻棬鐢ㄤ綔璁板綍鏃ュ織鐨勬爣鍑嗘帴鍙c傚湪stringToInt鍑芥暟涓鏋滆漿鎹㈠け璐ュ垯璋冪敤鎴戣嚜宸卞畾涔夌殑鎺ュ彛鍑芥暟榪涜鏃ュ織澶勭悊錛岃嚦浜庢渶緇堟墽琛岀殑鍝釜鍑芥暟錛屽垯鏃犻渶鍏沖績銆?/p>

defer 寤惰繜鍑芥暟

defer 鍙堟槸涓涓垱鏂幫紝瀹冪殑浣滅敤鏄細寤惰繜鎵ц錛屽湪澹版槑鏃朵笉浼氱珛鍗蟲墽琛岋紝鑰屾槸鍦ㄥ嚱鏁皉eturn鍚庢椂鎸夌収鍚庤繘鍏堝嚭鐨勫師鍒欎緷嬈℃墽琛屾瘡涓涓猟efer銆傝繖鏍峰甫鏉ョ殑濂藉鏄紝鑳界‘淇濇垜浠畾涔夌殑鍑芥暟鑳界櫨鍒嗕箣鐧捐兘澶熻鎵ц鍒幫紝榪欐牱灝辮兘鍋氬緢澶氭垜浠兂鍋氱殑浜嬶紝濡傞噴鏀捐祫婧愶紝娓呯悊鏁版嵁錛岃褰曟棩蹇楃瓑

榪欓噷鎴戜滑閲嶇偣鏉ヨ鏄庝笅defer鐨勬墽琛岄『搴?/p>

func deferFunc() int {     index := 0      fc := func() {          fmt.Println(index, "鍖垮悕鍑芥暟1")         index++          defer func() {             fmt.Println(index, "鍖垮悕鍑芥暟1-1")             index++         }()     }      defer func() {         fmt.Println(index, "鍖垮悕鍑芥暟2")         index++     }()      defer fc()      return func() int {         fmt.Println(index, "鍖垮悕鍑芥暟3")         index++         return index     }() }  func main() {     deferFunc() } 

榪欓噷杈撳嚭緇撴灉濡備笅錛?/p>

0 鍖垮悕鍑芥暟3 1 鍖垮悕鍑芥暟1 2 鍖垮悕鍑芥暟1-1 3 鍖垮悕鍑芥暟2 

鏈夊涓嬬粨璁猴細

  • defer 鏄湪鎵ц瀹宺eturn 鍚庢墽琛?/li>
  • defer 鍚庤繘鍏堟墽琛?/li>

鍙﹀錛屾垜浠父浣跨敤defer鍘誨叧闂璉O,鍦ㄦ甯告墦寮鏂囦歡鍚庯紝灝辯珛鍒誨0鏄庝竴涓猟efer錛岃繖鏍峰氨涓嶄細蹇樿鍏抽棴鏂囦歡錛屼篃鑳戒繚璇佸湪鍑虹幇寮傚父絳変笉鍙鏂欑殑鎯呭喌涓嬩篃鑳藉叧闂枃浠躲傝屼笉鍍忓叾浠栬璦錛?code style="margin: 0px 2px; padding: 0px 5px; border: 1px solid #eaeaea; background-color: #f8f8f8; border-radius: 3px; white-space: nowrap; font-family: monospace, Monaco;">try-catch 鎴栬?nbsp;using() 鏂瑰紡榪涜澶勭悊銆?/p>

file , err :=os.Open(file) if err != nil {     return err } defer file.Close()  //dosomething with file 

鍚庣畫錛屾垜灝嗚璁猴細 浣滅敤鍩熴佷紶鍊煎拰浼犳寚閽?浠ュ強 淇濈暀鍑芥暟init(),main()

鏈瑪璁頒腑鎵鍐欎唬鐮佸瓨鍌ㄤ綅緗細



abin 2017-08-02 16:39 鍙戣〃璇勮
]]>
主站蜘蛛池模板: 亚洲国产精品va在线播放 | 中文字幕精品亚洲无线码一区| 亚洲卡一卡二卡乱码新区| 99爱在线精品视频免费观看9| 亚洲va无码手机在线电影| 国产一区二区三区免费观在线| 亚洲情侣偷拍精品| 精品特级一级毛片免费观看| 国产成人yy免费视频| 亚洲电影一区二区| 99精品视频免费观看| 亚洲网站视频在线观看| 2021在线观看视频精品免费| 亚洲精品国产成人中文| 国产一卡二卡四卡免费| 精品久久亚洲中文无码| 大学生美女毛片免费视频| 国产精品亚洲专区无码唯爱网 | 亚洲精品视频久久| 2021免费日韩视频网| 国产人成亚洲第一网站在线播放| 免费高清资源黄网站在线观看| 亚洲av午夜国产精品无码中文字| 亚洲成a人片在线观看久| 久久99久久成人免费播放| 亚洲AV永久精品爱情岛论坛| 97碰公开在线观看免费视频| 亚洲性无码AV中文字幕| www.亚洲色图.com| a级片免费在线观看| 亚洲乱码一区av春药高潮| 情侣视频精品免费的国产| 一本久久A久久免费精品不卡| 亚洲αv在线精品糸列| 91精品视频免费| 国产午夜亚洲精品不卡| 国产亚洲情侣一区二区无码AV| 免费无码又爽又刺激高潮视频| 亚洲老熟女五十路老熟女bbw| 亚洲日韩精品A∨片无码| 久久笫一福利免费导航|