2013-07-24 28 views

Trả lời

29

Xác định loại tùy chỉnh có các trường cho cả hai giá trị, sau đó tạo chan loại đó.

EDIT: Tôi cũng đã thêm một ví dụ (ngay ở dưới cùng) sử dụng nhiều kênh thay vì loại tùy chỉnh. Tôi không chắc đó là thành ngữ hơn.

Ví dụ:

type Result struct { 
    Field1 string 
    Field2 int 
} 

sau đó

ch := make(chan Result) 

Ví dụ về cách sử dụng một kênh của một kiểu tùy chỉnh (Playground):

package main 

import (
    "fmt" 
    "strings" 
) 

type Result struct { 
    allCaps string 
    length int 
} 

func capsAndLen(words []string, c chan Result) { 
    defer close(c) 
    for _, word := range words { 
     res := new(Result) 
     res.allCaps = strings.ToUpper(word) 
     res.length = len(word) 
     c <- *res  
    } 
} 

func main() { 
    words := []string{"lorem", "ipsum", "dolor", "sit", "amet"} 
    c := make(chan Result) 
    go capsAndLen(words, c) 
    for res := range c { 
     fmt.Println(res.allCaps, ",", res.length) 
    } 
} 

Tạo:

Lorem, 5
Ipsum, 5
dolor, 5
SIT, 3
Amet, 4

EDIT: Ví dụ sử dụng nhiều kênh thay vì một kiểu tùy chỉnh để tạo đầu ra tương tự (Playground) :

package main 

import (
    "fmt" 
    "strings" 
) 

func capsAndLen(words []string, cs chan string, ci chan int) { 
    defer close(cs) 
    defer close(ci) 
    for _, word := range words { 
     cs <- strings.ToUpper(word) 
     ci <- len(word) 
    } 
} 

func main() { 
    words := []string{"lorem", "ipsum", "dolor", "sit", "amet"} 
    cs := make(chan string) 
    ci := make(chan int) 
    go capsAndLen(words, cs, ci) 
    for allCaps := range cs { 
     length := <-ci 
     fmt.Println(allCaps, ",", length) 
    } 
} 
+1

@ nick-craig-wood Cảm ơn bạn đã chỉnh sửa, gửi vội vã một phần. – Intermernet

+2

Điều đó quá tệ; dường như đánh bại toàn bộ điểm cho phép nhiều giá trị trả về –

+4

Điểm thú vị. Sẽ rất tuyệt khi có thể thực hiện 'c: = make (chan string, err)' hoặc tương tự và có các cấu trúc dữ liệu có liên quan được tạo ra "đằng sau hậu trường". Có thể đáng để yêu cầu tính năng Go? – Intermernet

Các vấn đề liên quan