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

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

6
ฉันจะ "เรียกใช้" โครงการที่มีหลายไฟล์ในแพ็คเกจหลักได้อย่างไร
main.goฉันกำลังมีไฟล์เดียวในแพคเกจหลักของฉันเรียกว่า ฉันจะแบ่งเนื้อหาของmain.goออกเป็นหลายไฟล์ได้อย่างไรโดยไม่ต้องสร้างแพ็คเกจแยกต่างหากเพราะรหัสไม่สามารถใช้ซ้ำได้ ฉันต้องการโครงสร้างไดเรกทอรีเช่นนี้ $ ls foo main.go bar.go bar.go package main import "fmt" func Bar() { fmt.Println("Bar") } จากนั้นใน main.go package main func main() { Bar() } แต่go run main.goให้ฉัน: # command-line-arguments ./main.go:4:2: undefined: Bar
150 go 

7
การแยกสตริงวันที่ใน Go
ฉันลองแยกวิเคราะห์สตริงวันที่"2014-09-12T11:45:26.371Z"ใน Go รหัส layout := "2014-09-12T11:45:26.371Z" str := "2014-11-12T11:45:26.371Z" t, err := time.Parse(layout , str) ฉันได้รับข้อผิดพลาดนี้: เวลาในการแยกวิเคราะห์ "2014-11-12T11: 47: 39.489Z": เดือนที่อยู่นอกช่วง ฉันจะแยกวิเคราะห์สตริงวันที่นี้ได้อย่างไร
150 date  go 

7
มีวิธีการทำงานซ้ำ ๆ เป็นระยะ ๆ หรือไม่?
มีวิธีการทำงานพื้นหลังซ้ำ ๆ ใน Go หรือไม่? ฉันกำลังคิดถึงบางสิ่งที่เหมือนTimer.schedule(task, delay, period)ใน Java ฉันรู้ว่าฉันสามารถทำได้ด้วย goroutine และTime.sleep()แต่ฉันต้องการสิ่งที่หยุดได้ง่าย นี่คือสิ่งที่ฉันได้ แต่ดูน่าเกลียดสำหรับฉัน มีวิธีที่สะอาดกว่าหรือดีกว่า func oneWay() { var f func() var t *time.Timer f = func () { fmt.Println("doing stuff") t = time.AfterFunc(time.Duration(5) * time.Second, f) } t = time.AfterFunc(time.Duration(5) * time.Second, f) defer t.Stop() //simulate doing stuff time.Sleep(time.Minute) …
148 go 

6
ฟังก์ชั่นเยาะเย้ยในไป
ฉันกำลังเรียนรู้ไปด้วยการเข้ารหัสโปรเจ็คต์ส่วนตัวขนาดเล็ก แม้ว่ามันจะเล็ก แต่ฉันก็ตัดสินใจทำการทดสอบหน่วยอย่างเข้มงวดเพื่อเรียนรู้นิสัยที่ดีใน Go ตั้งแต่เริ่มต้น การทดสอบหน่วยเล็กน้อยได้ทั้งหมดดีและโอชะ แต่ฉันงงกับการอ้างอิงในขณะนี้ ฉันต้องการที่จะสามารถแทนที่การเรียกฟังก์ชั่นบางอย่างด้วยการจำลอง นี่คือตัวอย่างรหัสของฉัน: func get_page(url string) string { get_dl_slot(url) defer free_dl_slot(url) resp, err := http.Get(url) if err != nil { return "" } defer resp.Body.Close() contents, err := ioutil.ReadAll(resp.Body) if err != nil { return "" } return string(contents) } func downloader() { dl_slots …
147 unit-testing  mocking  go 

7
วิธีรับจำนวนอักขระในสตริง
ฉันจะรับจำนวนอักขระของสตริงใน Go ได้อย่างไร? ตัวอย่างเช่นถ้าฉันมีสตริงวิธีการที่ควรจะกลับ"hello" 5ฉันเห็นว่าlen(str)คืนค่าจำนวนไบต์ไม่ใช่จำนวนตัวอักษรดังนั้นlen("£")ส่งคืน 2 แทน 1 เนื่องจาก£ถูกเข้ารหัสด้วยสองไบต์ใน UTF-8

2
วิธีการนำเข้าและใช้แพ็คเกจอื่นที่มีชื่อเดียวกัน
ตัวอย่างเช่นฉันต้องการใช้ทั้งข้อความ / เทมเพลตและ html / template ในไฟล์ต้นฉบับเดียว แต่โค้ดด้านล่างทำให้เกิดข้อผิดพลาด import ( "fmt" "net/http" "text/template" // template redeclared as imported package name "html/template" // template redeclared as imported package name ) func handler_html(w http.ResponseWriter, r *http.Request) { t_html, err := html.template.New("foo").Parse(`{{define "T"}}Hello, {{.}}!{{end}}`) t_text, err := text.template.New("foo").Parse(`{{define "T"}}Hello, {{.}}!{{end}}`) }
145 go  packages 

6
ใน Go คำสั่ง break แบ่งจากสวิตช์ / เลือกหรือไม่
ฉันรู้ว่าswitch/ selectstatement แบ่งโดยอัตโนมัติหลังจากทุกกรณี ฉันสงสัยในรหัสต่อไปนี้: for { switch sometest() { case 0: dosomething() case 1: break default: dosomethingelse() } } ที่ไม่breakคำสั่งออกจากforห่วงหรือเพียงแค่switchบล็อก?

10
วิธีที่ถูกต้องในการ "ไปรับ" พื้นที่เก็บข้อมูลส่วนตัวคืออะไร?
ฉันกำลังค้นหาวิธีที่จะ$ go getทำงานกับพื้นที่เก็บข้อมูลส่วนตัวหลังจากลอง google หลายครั้ง ความพยายามครั้งแรก: $ go get -v gitlab.com/secmask/awserver-go Fetching https://gitlab.com/secmask/awserver-go?go-get=1 https fetch failed. Fetching http://gitlab.com/secmask/awserver-go?go-get=1 Parsing meta tags from http://gitlab.com/secmask/awserver-go?go-get=1 (status code 200) import "gitlab.com/secmask/awserver-go": parse http://gitlab.com/secmask/awserver-go?go-get=1: no go-import meta tags package gitlab.com/secmask/awserver-go: unrecognized import path "gitlab.com/secmask/awserver-go ใช่มันไม่เห็นเมตาแท็กเพราะฉันไม่รู้วิธีการให้ข้อมูลการเข้าสู่ระบบ ความพยายามครั้งที่สอง: ติดตามhttps://gist.github.com/shurcooL/6927554 เพิ่มการกำหนดค่าเป็น. gitconfig [url "ssh://git@gitlab.com/"] insteadOf = https://gitlab.com/ …
143 git  go 

2
วิธีกำหนดแท็กชื่อหลายแท็กในโครงสร้าง
ฉันต้องการรับไอเท็มจากฐานข้อมูล mongo ดังนั้นฉันจึงกำหนดโครงสร้างแบบนี้ type Page struct { PageId string `bson:"pageId"` Meta map[string]interface{} `bson:"meta"` } ตอนนี้ฉันต้องเข้ารหัสเป็น JSON ด้วย แต่มันเข้ารหัสฟิลด์เป็นตัวพิมพ์ใหญ่ (ฉันได้รับ PageId แทนที่จะเป็น pageId) ดังนั้นฉันต้องกำหนดแท็กฟิลด์สำหรับ JSON ด้วย ฉันลองทำสิ่งนี้แล้วแต่ไม่ได้ผล: type Page struct { PageId string `bson:"pageId",json:"pageId"` Meta map[string]interface{} `bson:"meta",json:"pageId"` } แล้วสิ่งนี้จะทำได้อย่างไรกำหนดแท็กชื่อหลายแท็กในโครงสร้าง?
143 json  struct  go 

3
อะไร '.' (จุดหรือจุด) ในคำสั่ง Go import ทำอย่างไร
ในบทช่วยสอน Go และรหัส Go ส่วนใหญ่ที่ฉันดูแพ็คเกจจะถูกนำเข้าเช่นนี้: import ( "fmt" "os" "launchpad.net/lpad" ... ) แต่ในhttp://bazaar.launchpad.net/~niemeyer/lpad/trunk/view/head:/session_test.goจะมีการนำเข้าแพ็คเกจ gocheck ด้วย.(จุด): import ( "http" . "launchpad.net/gocheck" "launchpad.net/lpad" "os" ) ความสำคัญของ.(period) คืออะไร?
143 import  go 

4
ทำไมฉันไม่สามารถกำหนด * Struct ให้กับ * Interface ได้?
ฉันแค่ทำงานผ่านทัวร์ไปและฉันก็สับสนเกี่ยวกับพอยน์เตอร์และอินเทอร์เฟซ เหตุใดรหัส Go นี้จึงไม่รวบรวม package main type Interface interface {} type Struct struct {} func main() { var ps *Struct var pi *Interface pi = ps _, _ = pi, ps } เช่นถ้าStructเป็นInterfaceเหตุผลที่จะไม่*Structเป็น*Interface? ข้อความแสดงข้อผิดพลาดที่ฉันได้รับคือ: prog.go:10: cannot use ps (type *Struct) as type *Interface in assignment: *Interface is pointer to interface, …
142 go 

6
รวบรวมข้ามไปบน OSX?
ฉันพยายามคอมไพล์แอพ go บน OSX เพื่อสร้างไบนารีสำหรับ windows และ linux ฉันได้อ่านทุกสิ่งที่ฉันสามารถหาได้ในอินเทอร์เน็ต ตัวอย่างที่ใกล้เคียงที่สุดที่ฉันพบได้รับการเผยแพร่ใน (นอกเหนือจากการสนทนาที่ยังไม่เสร็จจำนวนมากในรายชื่อผู้รับจดหมาย go-nuts): http://solovyov.net/en/2012/03/09/cross-compiling-go/ แต่มันไม่สามารถใช้งานได้กับการติดตั้งของฉัน ฉันไปแล้ว 1.0.2 เนื่องจาก 1.0.2 ค่อนข้างล่าสุดฉันคิดว่าตัวอย่างด้านบนทั้งหมดไม่สามารถใช้ได้กับเวอร์ชันนี้ พยายามทำ./make.bash --no-cleanด้วย ENV vars ที่ 386 / windows มันสร้างไป แต่มันสร้างไปสำหรับการติดตั้งของฉันซึ่งเป็นdarwin/amd64และไม่สนใจสิ่งที่ตั้งอยู่ใน ENV ที่คาดว่าจะสร้างคอมไพเลอร์ที่แตกต่างกัน มีคำแนะนำใด ๆ ว่าจะทำได้อย่างไร (ถ้าทำได้)


3
วิธี `ไปทดสอบ 'การทดสอบทั้งหมดในโครงการของฉันได้อย่างไร
go testคำสั่งครอบคลุม*_test.goไฟล์ในเพียงหนึ่ง dir ฉันต้องการgo testโครงการทั้งหมดซึ่งหมายความว่าการทดสอบควรครอบคลุม*_test.goไฟล์ทั้งหมดในผบ. ./และผบ. ต้นไม้สินธุทั้งหมดใต้ผบ./. คำสั่งให้ทำคืออะไร
141 testing  go 

6
ความหมายของอินเทอร์เฟซ {} คืออะไร?
ฉันเพิ่งเริ่มใช้อินเทอร์เฟซและพยายามทำ SOAP โดยgithub ฉันไม่เข้าใจความหมายของ Msg interface{} ในรหัสนี้: type Envelope struct { Body `xml:"soap:"` } type Body struct { Msg interface{} } ฉันสังเกตเห็นไวยากรณ์เดียวกันใน fmt.Println แต่ไม่เข้าใจว่าอะไรคือความสำเร็จ interface{}
140 go 

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