日韩性视频-久久久蜜桃-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用法的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 黄色片女人| 特级淫片aaaaaaa级附近的 | 日韩第一页在线观看 | 日本伊人色| 日韩一区二区三区视频 | 香蕉成人av| 欧美日韩亚洲不卡 | 国产又粗又猛又黄又爽的视频 | 亚洲综合免费观看高清完整版 | 欧美精品99久久久 | 久久99国产精品久久99果冻传媒 | 欧美做受69 | 久久亚洲成人av | 美女脱衣服一干二净 | 欧美精品一区二区三 | 中文字幕88| 99视频在线精品 | 午夜18视频在线观看 | 在线观看免费高清在线观看 | 一区二区三区四区高清视频 | 欧美高清精品一区二区 | 美国一区二区 | 国产成人无码AA精品区 | 亚洲涩综合 | 日韩精品久久久 | 亚洲一区二区黄 | 无码人妻丰满熟妇区五十路百度 | 香蕉人人精品 | 日韩一区二区视频在线观看 | 亚洲AV无码成人片在线观看 | 日本做爰三级床戏 | 国产乱色精品成人免费视频 | 丁香激情婷婷 | 亚洲激情视频在线观看 | 成人播放器 | 在线免费看mv的网站入口 | 色欲av永久无码精品无码蜜桃 | 欧美亚洲影院 | 久久性av | 69视频一区二区三区 | 五十路六十路七十路熟婆 | 欧美超碰在线观看 | 国产精品人成 | 国产成人不卡 | 老女人一区 | 成人无码精品1区2区3区免费看 | 久久久精品影院 | 国产免费高清视频 | 91在线视频免费观看 | 亚洲精品中文无码AV在线播放 | melody在线高清免费观看 | 日本韩国欧美中文字幕 | 日韩一区中文 | 一区二区高清视频 | 久久9999久久免费精品国产 | 日本午夜网 | 成人人伦一区二区三区 | 久久精品视频久久 | 99艹| 99热亚洲 | 黄网视频在线观看 | 欧美一区日韩一区 | 成人国产欧美 | 欧美日韩 一区二区三区 | 日本泡妞xxxx免费视频软件 | 久久久精品人妻一区二区三区四 | 五月婷婷激情网 | 亚洲日本不卡 | 精品久久久久久久无码 | 97精品熟女少妇一区二区三区 | 在线观看一区二区三区四区 | 久久鲁视频 | 我们的2018在线观看免费高清 | 激情欧美日韩 | 性色欲网站人妻丰满中文久久不卡 | 黄色免费网站视频 | 黄色网址av| 日本a区 | 国产98在线 | 69视频污| 国产aⅴ | 国内毛片视频 | 奇米影视四色在线 | 国产精品一区二区入口九绯色 | 国产日韩在线视频 | 久久无码精品丰满人妻 | 午夜成人鲁丝片午夜精品 | 8mav在线| 伊伊总综合网 | c逼| 69视频入口 | 久久久久香蕉视频 | 三级艳丽杨钰莹三级 | xxxxx69| 福利视频在线播放 | 中日韩av在线 | 国内三级视频 | 一区二区日韩精品 | 欧美性猛交aaaa片黑人 |