คำถามติดแท็ก go

Go เป็นภาษาโปรแกรมโอเพนซอร์ซ มันถูกพิมพ์แบบคงที่ด้วยไวยากรณ์ที่ได้มาอย่างหลวม ๆ จาก C เพิ่มการจัดการหน่วยความจำอัตโนมัติความปลอดภัยของประเภทความสามารถในการพิมพ์แบบไดนามิกบางชนิดในตัวเพิ่มเติมเช่นอาร์เรย์ความยาวตัวแปร (เรียกว่าชิ้น) และแผนที่คีย์ค่าและ ห้องสมุดมาตรฐานขนาดใหญ่

13
ฉันจะนำเข้าแพ็คเกจเวอร์ชันเฉพาะโดยใช้ go get ได้อย่างไร
มาจากNodeสภาพแวดล้อมที่ฉันเคยติดตั้งเวอร์ชันเฉพาะของผู้จำหน่าย lib ลงในโฟลเดอร์โครงการ ( node_modules) โดยบอกnpmให้ติดตั้ง lib เวอร์ชันนั้นจากpackage.jsonหรือแม้แต่โดยตรงจากคอนโซลเช่น: $ npm install express@4.0.0 จากนั้นฉันเคยนำเข้าเวอร์ชันของแพ็คเกจนั้นในโครงการของฉันด้วย: var express = require('express'); goตอนนี้ผมต้องการที่จะทำสิ่งเดียวกันกับ ฉันจะทำเช่นนั้นได้อย่างไร? เป็นไปได้ไหมที่จะติดตั้งแพ็คเกจเวอร์ชันเฉพาะ ถ้าใช้แบบรวมศูนย์$GOPATHฉันจะนำเข้าเวอร์ชันหนึ่งแทนที่จะเป็นเวอร์ชันอื่นได้อย่างไร ฉันจะทำสิ่งนี้: $ go get github.com/wilk/uuid@0.0.1 $ go get github.com/wilk/uuid@0.0.2 แต่แล้วฉันจะสร้างความแตกต่างระหว่างการนำเข้าได้อย่างไร

11
ไปที่เทคนิคการจัดการข้อผิดพลาด [ปิด]
ปิด . คำถามนี้เป็นคำถามความคิดเห็นตาม ขณะนี้ยังไม่ยอมรับคำตอบ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบได้ด้วยข้อเท็จจริงและการอ้างอิงโดยแก้ไขโพสต์นี้ ปิดเมื่อ12 เดือนที่แล้ว . ปรับปรุงคำถามนี้ ฉันเพิ่งเริ่มต้นกับ Go รหัสของฉันเริ่มมีสิ่งนี้มากมาย: if err != nil { //handle err } หรือนี่ if err := rows.Scan(&some_column); err != nil { //handle err } มีสำนวน / กลยุทธ์ / แนวทางปฏิบัติที่ดีสำหรับการตรวจสอบและจัดการข้อผิดพลาดใน Go หรือไม่? แก้ไขเพื่อชี้แจง: ฉันไม่ได้ท้องหรือแนะนำให้ทีม Go หาสิ่งที่ดีกว่า ฉันกำลังถามว่าฉันทำถูกต้องหรือฉันพลาดเทคนิคบางอย่างที่ชุมชนคิดขึ้นมา ขอบคุณทุกคน
108 go 

3
ตัวอย่างสำหรับ sync.WaitGroup ถูกต้องหรือไม่
ตัวอย่างการใช้งานนี้sync.WaitGroupถูกต้องหรือไม่? มันให้ผลลัพธ์ที่คาดหวัง แต่ฉันไม่แน่ใจเกี่ยวกับตำแหน่งwg.Add(4)และตำแหน่งของwg.Done(). การเพิ่ม goroutines สี่ตัวพร้อมกันนั้นสมเหตุสมผลwg.Add()หรือไม่? http://play.golang.org/p/ecvYHiie0P package main import ( "fmt" "sync" "time" ) func dosomething(millisecs time.Duration, wg *sync.WaitGroup) { duration := millisecs * time.Millisecond time.Sleep(duration) fmt.Println("Function in background, duration:", duration) wg.Done() } func main() { var wg sync.WaitGroup wg.Add(4) go dosomething(200, &wg) go dosomething(400, &wg) go dosomething(150, &wg) …
108 go  goroutine 

3
วนซ้ำในฟิลด์ของโครงสร้างใน Go
โดยพื้นฐานแล้ววิธีเดียว (ที่ฉันรู้) ในการวนซ้ำผ่านค่าของฟิลด์ของ a structเป็นดังนี้: type Example struct { a_number uint32 a_string string } //... r := &Example{(2 << 31) - 1, "...."}: for _, d:= range []interface{}{ r.a_number, r.a_string, } { //do something with the d } ฉันสงสัยว่ามีวิธีที่ดีกว่าและหลากหลายกว่าในการบรรลุผล[]interface{}{ r.a_number, r.a_string, }หรือไม่ดังนั้นฉันจึงไม่จำเป็นต้องแสดงรายการพารามิเตอร์แต่ละรายการทีละรายการหรือมีวิธีที่ดีกว่าในการวนซ้ำโครงสร้างหรือไม่ ฉันพยายามมองผ่านreflectแพ็คเกจ แต่ฉันชนกำแพงเพราะฉันไม่แน่ใจว่าจะทำอย่างไรเมื่อฉันดึงข้อมูลออกreflect.ValueOf(*r).Field(0)มา ขอบคุณ!
108 go  go-reflect 

6
จะหาตำแหน่งองค์ประกอบในชิ้นได้อย่างไร?
เราจะกำหนดตำแหน่งขององค์ประกอบที่อยู่ในชิ้นได้อย่างไร? ฉันต้องการสิ่งต่อไปนี้: type intSlice []int func (slice intSlice) pos(value int) int { for p, v := range slice { if (v == value) { return p } } return -1 }
108 position  go  slice 

11
วิธีการเขียนบันทึกลงไฟล์
ฉันกำลังพยายามเขียนลงในล็อกไฟล์ด้วย Go ฉันได้ลองหลายวิธีซึ่งทั้งหมดล้มเหลว นี่คือสิ่งที่ฉันได้ลอง: func TestLogging(t *testing.T) { if !FileExists("logfile") { CreateFile("logfile") } f, err := os.Open("logfile") if err != nil { t.Fatalf("error: %v", err) } // attempt #1 log.SetOutput(io.MultiWriter(os.Stderr, f)) log.Println("hello, logfile") // attempt #2 log.SetOutput(io.Writer(f)) log.Println("hello, logfile") // attempt #3 log.SetOutput(f) log.Println("hello, logfile") } func FileExists(name string) bool …
108 go  logging 

4
การลบเวลาระยะเวลาจากเวลาใน Go
ฉันมีtime.Timeค่าที่ได้รับtime.Now()และฉันต้องการได้รับอีกครั้งซึ่งตรงกับ 1 เดือนที่แล้ว ฉันรู้ว่าการลบเป็นไปได้ด้วยtime.Sub()(ซึ่งต้องการอีกอันtime.Time) แต่นั่นจะส่งผลให้ a time.Durationและฉันต้องการมันในทางอื่น
108 go 

4
ไปแกะกล่อง Array เป็นอาร์กิวเมนต์
ดังนั้นใน Python และ Ruby จึงมีตัวดำเนินการ splat (*) สำหรับการคลายอาร์เรย์เป็นอาร์กิวเมนต์ ใน Javascript มีฟังก์ชัน .apply () มีวิธีแกะอาร์เรย์ / สไลซ์เป็นอาร์กิวเมนต์ของฟังก์ชันใน Go หรือไม่? ทรัพยากรใด ๆ สำหรับสิ่งนี้ก็จะดีเช่นกัน! บางสิ่งบางอย่างตามแนวนี้: func my_func(a, b int) (int) { return a + b } func main() { arr := []int{2,4} sum := my_func(arr) } ฉันขออภัยหากฉันทำผิดพลาดเกี่ยวกับไวยากรณ์ / สารพัน ฉันเพิ่งเริ่มใช้ Go

2
การใช้การสะท้อนคุณกำหนดค่าของฟิลด์โครงสร้างอย่างไร
มีเวลาคร่าวๆในการทำงานกับฟิลด์โครงสร้างโดยใช้reflectแพ็คเกจ โดยเฉพาะอย่างยิ่งยังไม่ได้หาวิธีตั้งค่าฟิลด์ พิมพ์ t struct {fi int; fs string} var rt = เสื้อ {123, "jblow"} var i64 int64 = 456 รับชื่อฟิลด์ i - ดูเหมือนจะใช้ได้ var field = reflect.TypeOf(r).Field(i).Name รับค่าของฟิลด์ i เป็น a) อินเทอร์เฟซ {}, b) int - ดูเหมือนจะใช้ได้ var iface interface{} = reflect.ValueOf(r).Field(i).Interface() var i int = int(reflect.ValueOf(r).Field(i).Int()) การตั้งค่าของฟิลด์ฉัน - …

7
จะตั้งค่าการหมดเวลาสำหรับคำขอ http get () ใน Golang ได้อย่างไร?
ฉันกำลังสร้าง URL fetcher ใน Go และมีรายการ URL ที่จะดึงข้อมูล ฉันส่งhttp.Get()คำขอไปยังแต่ละ URL และได้รับคำตอบ resp,fetch_err := http.Get(url) ฉันจะกำหนดระยะหมดเวลาที่กำหนดเองสำหรับคำขอรับแต่ละรายการได้อย่างไร (เวลาเริ่มต้นนั้นนานมากและทำให้ fetcher ของฉันช้ามาก) ฉันต้องการให้ตัวดึงข้อมูลของฉันมีระยะหมดเวลาประมาณ 40-45 วินาทีหลังจากนั้นควรส่งคืน "คำขอหมดเวลา" และไปยัง URL ถัดไป ฉันจะบรรลุเป้าหมายนี้ได้อย่างไร?
107 http  get  timeout  go 

6
วิธีหยุดโกรูทีน
ฉันมี goroutine ที่เรียกใช้เมธอดและส่งค่าที่ส่งคืนในช่อง: ch := make(chan int, 100) go func(){ for { ch <- do_stuff() } }() ฉันจะหยุด goroutine ได้อย่างไร?
107 go  goroutine  channels 

5
ไม่ได้เปิดใช้ SSL บนเซิร์ฟเวอร์
พยายามสื่อสารกับฐานข้อมูล postgres ด้วย go โดยเตรียมคำสั่งดังนี้: var stmt *sql.Stmt var err error stmt, err = db.Prepare(selectStatement) if err != nil { fmt.Printf("db.Prepare error: %v\n",err) return err } แสดงข้อผิดพลาดต่อไปนี้: db.Prepare error: pq: SSL is not enabled on the server วิธีแก้ปัญหาใด ๆ ฉันสามารถเพิ่มข้อมูลได้หากจำเป็น
107 go 


2
ไปสร้างอะไร? (ไปสร้างกับไปติดตั้ง)
โปรแกรมเมอร์ New Go มักไม่ทราบหรือสับสนว่าคำสั่ง go build พื้นฐานทำอะไร สร้างgo buildและgo installคำสั่งอะไรกันแน่และพวกเขาวางผลลัพธ์ / เอาต์พุตไว้ที่ไหน
106 go  build  compilation 

3
เปลี่ยนเส้นทางท่อ stdout ของกระบวนการย่อยใน Go
ฉันกำลังเขียนโปรแกรมใน Go ซึ่งรันเซิร์ฟเวอร์เช่นโปรแกรม (เช่น Go) ตอนนี้ฉันต้องการให้ stdout ของโปรแกรมลูกในหน้าต่างเทอร์มินัลของฉันที่ฉันเริ่มโปรแกรมหลัก วิธีหนึ่งในการทำเช่นนี้คือการใช้cmd.Output()ฟังก์ชัน แต่จะพิมพ์ stdout หลังจากออกจากกระบวนการแล้วเท่านั้น (นั่นเป็นปัญหาเนื่องจากโปรแกรมที่เหมือนเซิร์ฟเวอร์นี้ทำงานเป็นเวลานานและฉันต้องการอ่านเอาต์พุตบันทึก) ตัวแปรoutเป็นของtype io.ReadCloserและฉันไม่รู้ว่าควรทำอย่างไรกับมันเพื่อให้บรรลุภารกิจของฉันและฉันไม่พบสิ่งที่เป็นประโยชน์บนเว็บในหัวข้อนี้ func main() { cmd := exec.Command("/path/to/my/child/program") out, err := cmd.StdoutPipe() if err != nil { fmt.Println(err) } err = cmd.Start() if err != nil { fmt.Println(err) } //fmt.Println(out) cmd.Wait() } คำอธิบายเกี่ยวกับรหัส: ยกเลิกการใส่เครื่องหมายPrintlnฟังก์ชันเพื่อรับโค้ดเพื่อคอมไพล์ฉันรู้ว่านั่นPrintln(out io.ReadCloser)ไม่ใช่ฟังก์ชันที่มีความหมาย (สร้างผลลัพธ์&{3 |0 …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.