Go使用用兩種方式列印自然數

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。 這道題可以作為筆試題,現在給定下面一個條件
go func() {     for i := 1; i < 10; i++ {         println(2*i - 1)     }}()go func() {     for i := 1; i < 10; i++ {         println(2 * i)     }}()

讓你使用多種方式將奇偶合并,並列印自然數,這道題目很簡單,思考幾秒鐘,看看你的實現。。。。。。好了我的實現比較low,沒辦法,golang 的代碼怎麼寫都那個慫樣。。。

1.第一種方式


package mainimport ("fmt""time")var count = 15func ping(c chan<- int) {for i := 1; i < count; i++ {c <- 2*i - 1}}func pong(c chan<- int) {for i := 1; i < count; i++ {c <- 2 * i}}func print(ch <-chan int) {for {msg := <-chfmt.Println(msg)time.Sleep(time.Millisecond * 50)}}func main() {ch := make(chan int)go ping(ch)go pong(ch)go print(ch)var input stringfmt.Scanln(&input)}

上面的代碼,如果將

go print(ch) 改成下面這樣 channel不使用傳參的形式而是直接使用全域的變數可以嗎?for {       msg := <-ch       fmt.Println(msg)       time.Sleep(time.Millisecond * 50)}如果不行的話那是為什嗎?

2.第二種方式

package mainimport ("fmt""runtime"// "time")var count = 15func main() {runtime.GOMAXPROCS(1)go func() {for i := 1; i < count; i++ {fmt.Println(2 * i)runtime.Gosched()}}()go func() {for i := 1; i < count; i++ {fmt.Println(2*i - 1)runtime.Gosched()}}()var input stringfmt.Scanln(&input)}

第二種方式,在main函數中啟用兩個Goroutinue 思考一下,交換了他們的代碼位置可不可以,為什麼那?比如這樣:

go func() {       for i := 1; i < count; i++ {           fmt.Println(2*i - 1)           runtime.Gosched()       }}()go func() {       for i := 1; i < count; i++ {           fmt.Println(2 * i)           runtime.Gosched()       }}()


這兩種方式其實都是我強行舉的一個栗子,可能不太現實,但是如果瞭解golang內部結構的話,以上問題都不攻自破,接下來細節我會在日後的文章中將上面代碼作為例子來講解channel資料結構。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.