日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

专科 java转go 翱翔之路(二)基础语法:匿名组合,方法,接口,map,json,异常处理,channel管道,select用法

發布時間:2024/4/19 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 专科 java转go 翱翔之路(二)基础语法:匿名组合,方法,接口,map,json,异常处理,channel管道,select用法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

2.4 面向對象編程

2.4.1匿名組合

type Person struct {id intname stringage int }type Student struct {Person //只有類型 沒有名字,匿名字段 繼承了person的成員garde stringclass string }

2.4.1.2 定義類,賦值,修改

//定義類var per1 Student = Student{Person{1, "生活", 18}, "初中", "初一"}fmt.Println("per1", per1)//自動推導類型per2 := Student{Person{1, "生活", 18}, "初中", "初一"}fmt.Printf("per2 %v\n", per2)//單獨復制per3 := Student{class: "初一"}fmt.Printf("per3 %v\n", per3)per4 := Student{Person: Person{id: 5}, class: "初一"}per4.name = "sss"per4.Person = Person{5, "aaa", 22}fmt.Printf("per4 %v\n", per4)

2.4.1.3 匿名字段追加

//非結構匿名字段 type addColum string func main() {per2 := Student{Person{1, "生活", 18}, "初中", "初一", "追加字段"}fmt.Printf("per2 %v\n", per2)//per2 {{1 生活 18} 初中 初一 追加字段} }

2.4.1.4 地址匿名字段追加

//非結構匿名字段 type addColum stringtype Person struct {id intname stringage int }type Student struct {*Person //只有類型 沒有名字,匿名字段 繼承了person的成員garde stringclass stringaddColum }func main() {per2 := Student{&Person{1, "生活", 18}, "初中", "初一", "追加字段"}fmt.Printf("per2 %v\n", per2)fmt.Println(per2.id, per2.name, per2.age, per2.garde, per2.class)var per3 Studentper3.Person = new(Person)per3.addColum = "append"per3.id = 5per3.name = "sss"fmt.Println(per3.id, per3.name, per3.age, per3.garde, per3.class) }

2.4.2方法

2.4.2.1 定義

//面向對象,方法:給某個類型綁定一個函數 type long int//tmp叫接受者,接受者傳遞的一個參數 func (tmp long) Add02(other long) long {fmt.Println("tmp =", tmp)//1return tmp + other}func main() {//定義一個變量var test long = 1//調用方法格式 :變量名.函數r := test.Add02(3)fmt.Println("r =", r)//4}

2.4.2.2 賦值,輸出

//輸出函數 func (per Person) pringInfo() {fmt.Println("per =", per) }//賦值函數 func (per Person) setInfo(a int, b string, c int) {per.id = aper.name = bper.age = cfmt.Println("per =", per) }func main() {per1 := Person{1, "小三", 20}per1.pringInfo()per1.setInfo(2, "小三的小三", 21)}

2.4.2.3 值傳遞與引用傳遞

type Person struct {id intname stringage int }//賦值函數 func (per Person) setInfo(a int, b string, c int) {per.id = aper.name = bper.age = cfmt.Printf("per = %v\n", per)//per = {3 修改 22} }//引用傳遞 func (per *Person) setInfoPoint(a int, b string, c int) {per.id = aper.name = bper.age = cfmt.Printf("per = %v\n", per)//per = &{4 修改 32} }func main() {per1 := Person{1, "小三", 20}per1.setInfo(3, "修改", 22) //引用傳遞fmt.Println(per1)//{1 小三 20}per2 := Person{2, "小三的小三", 21}per2.setInfoPoint(4, "修改", 32) //值傳遞fmt.Println(per2) //{4 修改 32}}

2.4.2.4 繼承傳遞

type Person struct {id intname stringage int }type Student struct {Persongarde string } //輸出函數 func (per Person) pringInfo() {fmt.Println("per =", per) }func main() {//繼承stu := Student{Person{5, "小三5", 25}, "s"}stu.pringInfo()fmt.Println(stu)}

2.4.2.5 方法值

stu := Student{Person{5, "小三5", 25}, "s"}stu.pringInfo()//方法值 保存方式入口地址pFunc := stu.pringInfo //這個就是方法值,調用函數時,無需再傳遞接受者pFunc() //等價于 stu.pringInfo()

2.4.2.5 方法表達式

//方法表達式f := (*PePerson).setInfoPointf(&stu) //等價于 stu.setInfoPoint()f1 := (PePerson).setInfof1(stu) //等價于 stu.setInfo()fmt.Println(stu)

2.4.3接口

2.4.3.1 定義

//定義接口 type inter interface {say() }//studnt實現了say方法 func (tmp *Teacher) say() {fmt.Printf("Studnt %s\n", tmp.zz) }func main() {var i inter//只要實現 該接口,就可以給這個接口賦值s := &Teacher{"是啥"}i = si.say()//Studnt 是啥 }

2.4.3.2 繼承實現

type inter interface {say() } type inter1 interface {intersay1() }//studnt實現了say方法 func (tmp *Teacher) say() {fmt.Printf("Studnt %s\n", tmp.zz) }//studnt實現了say1方法 func (tmp *Teacher) say1() {fmt.Printf("Studnt %s\n", tmp.zz) }func main() {var i inter1//只要實現 該接口,就可以給這個接口賦值s := &Teacher{"是啥"}i = si.say()i.say1() }

2.4.3.3 接口轉換

var i1 inter1 //超集i1 = &Teacher{"是啥"}var i inter //子集i = i1 //可以 超集可以轉換為子集i.say()

2.4.3.4 空接口

i := make([]interface{}, 3)i[0] = 1i[1] = "ss"for index, data := range i {if value, ok := data.(int); ok == true {fmt.Printf("index [%v] ,x[%d]\n", index, value)}}

2.5 異常處理,字符串

2.5.1錯誤接口(error)

err1 := fmt.Errorf("%s", "no error")fmt.Println(err1)err2 := errors.New("錯誤")fmt.Println(err2)

2.5.1.1錯誤接口的應用

func MyDiv(a, b int) (result int, err error) {err = nilif b == 0 {err = errors.New("B不能為0")} else {result = a / b}return}func main() {val, err := MyDiv(1, 0)if err != nil {fmt.Println(err)} else {fmt.Println(val)}}

2.5.2函數程序中斷(panic)

func test() {//導致程序中斷panic("this is a panic") }

2.5.3函數程序(recover)

func test1() {defer func() {//err是該函數默認返回值if err := recover(); err != nil {fmt.Println(err)}}() //()調用此函數 }

2.5.4字符串函數的使用

fmt.Println(strings.Contains("abcdefg", "abc")) //truearr := []string{"abc", "hello", "arr"}fmt.Println(strings.Join(arr, "@")) //abc@hello@arrfmt.Println(strings.Index("abcdefg", "b")) //1arrStr := "abc@hello@arr"fmt.Println(strings.Split(arrStr, "@")) //[abc hello arr]

2.5.5 strconv包

arr1 := make([]byte, 0, 1024)arr1 = strconv.AppendBool(arr1, true)//整數轉字符串arr2 := strconv.Itoa(6666)fmt.Println(arr2)//其他類型轉換為字符串var str stringstr = strconv.FormatBool(false)fmt.Println(str)

2.6 json

2.6.1 結構體轉json

import "fmt" import "encoding/json"//首字母必須大寫 type Student struct {Id int `json:"-"` //此字段不會輸出Name string `json:"name"` //返回時返回指定字段Sub []stringIsOk bool `json:",string"` //返回字符串Price float64 }func main() {stu := Student{1, "小明", []string{"go", "java", "php"}, true, 50.00}fmt.Println(stu)//json轉義buf, err := json.Marshal(stu)if err != nil {fmt.Println(err)return}fmt.Println(buf) //[123 34 73 100 34 58 49 44 34 78 97 109 101 34 58 34 229 176 143 230 152 142 34 44 34 83 117 98 34 58 91 34 103 111 34 44 34 106 97 118 97 34 44 34 112 104 112 34 93 44 34 73 115 79 107 34 58 116 114 117 101 44 34 80 114 105 99 101 34 58 53 48 125]fmt.Println(string(buf)) }

2.6.2 map轉json

map1 := make(map[string]interface{}, 4)map1["id"] = 5map1["name"] = "實時"buf, err := json.MarshalIndent(map1, "", " ")fmt.Println(string(buf))fmt.Println(err)

2.6.3 json轉實體

func main() {jsonBuf := `{"id": 5,"name": "實時"}`var stu1 Studentjson.Unmarshal([]byte(jsonBuf), &stu1)fmt.Println(stu1)//{0 實時 [] false 0}}

2.6.4 json轉map

func main() {jsonBuf := `{"id": 5,"name": "實時"}`map2 := make(map[string]interface{}, 4)json.Unmarshal([]byte(jsonBuf), &map2)fmt.Println(map2)//斷言 判斷類型var str stringfor key, value := range map2 {switch data := value.(type) {case string:str = datafmt.Printf("map[%s]的值類型為string", key)case []interface{}:fmt.Printf("map[%s]interface{}", key)}}}

2.7 goroutine并發并行

2.7.1 demo

import "fmt" import "time"func newWork() {for {fmt.Println("this is newWork")time.Sleep(1000)} }func main() {//設置并行處理器num := runtime.GOMAXPROCS(1)fmt.Println(num)//goroutinego newWork() //新建一個協程任務for {fmt.Println("this is mainWork")time.Sleep(1000)} }

2.7.2主協程退出,子協程也退出

func main() {//主協程退出了,其它子協程也要跟著退出go func() {for {fmt.Println("this is goroutine")}}()i := 0for {i++fmt.Println("this is mainFor")time.Sleep(1000)if i > 2 {break}}}

2.7.3 Goschedr讓出調度資源 Goexit 終止

import "runtime" func main() {//設置并行處理器num := runtime.GOMAXPROCS(1)fmt.Println(num)//Goschedrgo func() {for j := 0; j < 2; j++ {fmt.Println("this is goroutine")runtime.Goexit() //終止所有協程}}()i := 0for {i++fmt.Println("this is mainFor")runtime.Gosched() //讓出時間片,先讓其他協議執行if i > 2 {break}}}

2.7.4

2.7.4.1 Demo channel管道

//創建一個無緩存的channel var ch = make(chan int)func printWork(val string) {fmt.Println(val)fmt.Println(val)fmt.Println(val)fmt.Println(val)fmt.Println(val)}func per(sendv string) {printWork(sendv)ch <- 666 //給管道協數據,發送 }func per1(sendv string) {<-ch //從管道取數據,接收,如果管道沒有數據阻塞printWork(sendv) }func main() {go per("per1")go per("per2")for {}// per2// per2// per2// per2// per1// per1// per1 }

2.7.4.2 channel 特點

func main() { var ch3 chan<- float64 //ch3是單向channel 只用于讀寫float64數據 ch := make(chan int)//雙向隱轉單向var writhCh chan<- int = ch //只能寫,不能讀var readCh <-chan int = ch //只能讀,不能寫writh <-666 //寫<-readch//讀//單向無法轉換為雙向var ch2 chan int = writhCh}

2.7.4.3 channel 應用

//生產者 只能寫,不能讀 func product(out chan<- int) {for i := 0; i < 10; i++ {out <- i * i}close(out)}//消費者 只能讀,不能寫 func consumer(in <-chan int) {for num := range in {fmt.Println("consumer=", num)}}func main() {//創建一個雙向通道ch := make(chan int)//生產者go product(ch)//消費者consumer(ch)}

2.7.4.4 定時器

import "time"func main() {//只執行一次timer := time.NewTimer(2 * time.Second)//重復執行timer1 :=time.NewTicker(2 * time.Second)fmt.Println(time.Now())t := <-timer.Cfmt.Println(t)timer.Reset(1 * time.Second) //重新設置timer.Stop() //定時器停止//2020-06-13 14:06:05.8875131 +0800 CST m=+0.008002001//2020-06-13 14:06:07.8881753 +0800 CST m=+2.008664201 }

2.7.4.5 select用法

func main() {ch := make(chan int)quit := make(chan bool)//新開一個協程//讀數據go func() {for {select {case num := <-ch:fmt.Println("num = ", num)case <-time.After(3 * time.Second):fmt.Println("超時")quit <- true}}}() //自調用//寫數據for i := 0; i < 5; i++ {ch <- itime.Sleep(time.Second)}<-quitfmt.Println("程序結束")}

?
?

?
?
?
?
?

總結

以上是生活随笔為你收集整理的专科 java转go 翱翔之路(二)基础语法:匿名组合,方法,接口,map,json,异常处理,channel管道,select用法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产伦理片在线观看 | 天堂网在线看 | 成人在线观看免费高清 | 欧美日韩一区二区三区在线播放 | 黄色私人影院 | 一区二区三区视频播放 | 97精品人妻一区二区 | 亚洲一二三四 | www.色视频 | 一区二区三区精品视频在线观看 | 人人人人爽 | 久久天天躁狠狠躁夜夜av | 可以免费看黄的网站 | 欧美一区二区三区爽爽爽 | 亚洲国产精品久 | 国产成人精品一区二区三区无码熬 | 国产又粗又猛又爽 | 日韩美女黄色 | 伊人成综合网 | 91大神网址 | 另类天堂网 | 日本少妇激情舌吻 | 欧美久久久久久久久中文字幕 | 日本动漫艳母 | 97精品国产97久久久久久免费 | 国产精品丝袜一区二区 | 2020国产精品 | 成人动漫在线观看 | 日韩中文字幕在线一区 | 8090av| 亚洲精品aⅴ中文字幕乱码 国产精品调教视频 | 激情网站免费 | 亚洲最大成人在线 | 国内精品在线播放 | 久久av无码精品人妻出轨 | 日本少妇xxxx | 国产成人自拍一区 | 琪琪电影午夜理论片八戒八戒 | 一区二区视频在线看 | 中文字幕一区二区三区四区视频 | 久久密桃 | 天堂中文字幕免费一区 | 一区二区三区视频在线 | 亚洲精品www久久久 一级aaa毛片 | 超碰人人人人 | 国产熟女高潮一区二区三区 | 夜夜嗨一区二区 | 免费黄色网址观看 | 特黄特色特刺激免费播放 | 午夜影院免费 | 日韩av电影一区 | 伊人论坛| 久久免费看少妇高潮 | 欧美91精品久久久久国产性生爱 | 99re在线视频 | 国产精品毛片久久久久久久av | 大j8黑人w巨大888a片 | 免费人成年激情视频在线观看 | 7777在线视频 | av波多野吉衣 | 亚洲欧洲精品一区二区 | 免费大黄网站 | 一道本在线视频 | 欧美高清视频在线观看 | 91视| 香蕉传媒 | 极品美妇后花庭翘臀娇吟小说 | 国产不卡a | 天天干天天插天天操 | 伊人色网 | 日韩操 | 精品无码黑人又粗又大又长 | 女人扒开双腿让男人捅 | 日韩成年视频 | 亚洲国产精品成人午夜在线观看 | 日本a级黄 | 欧美黑人性xxx | 草久影院| 亚洲一级中文字幕 | 亚洲av无码国产在丝袜线观看 | 伊人色影院 | 日本高清www免费视频 | 免费一级网站 | 爱草在线| 欧美色图亚洲天堂 | 亚洲www啪成人一区二区麻豆 | 欧美精品一区二区三区四区 | 欧美,日韩,国产在线 | 美女扒开屁股让男人捅 | 亚洲毛片视频 | 青青久操| 久久av综合 | 国产不卡一区 | 国外成人在线视频 | 一二三区免费 | 精品一区二区三区国产 | 57pao国产成永久免费视频 | 高清亚洲 | av资源站|