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

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

2
วิธีการเพิ่มวิธีการใหม่ในประเภทที่มีอยู่ใน Go?
ฉันต้องการเพิ่มวิธีการใช้งานที่สะดวกในgorilla/muxประเภทเส้นทางและเราเตอร์: package util import( "net/http" "github.com/0xor1/gorillaseed/src/server/lib/mux" ) func (r *mux.Route) Subroute(tpl string, h http.Handler) *mux.Route{ return r.PathPrefix("/" + tpl).Subrouter().PathPrefix("/").Handler(h) } func (r *mux.Router) Subroute(tpl string, h http.Handler) *mux.Route{ return r.PathPrefix("/" + tpl).Subrouter().PathPrefix("/").Handler(h) } แต่คอมไพเลอร์แจ้งให้ฉันทราบ ไม่สามารถกำหนดวิธีการใหม่บน mux.Router ประเภทที่ไม่ใช่โลคัล แล้วฉันจะบรรลุเป้าหมายนี้ได้อย่างไร? ฉันสร้างประเภทโครงสร้างใหม่ที่มีช่อง mux.Route และ mux.Router แบบไม่ระบุชื่อหรือไม่ หรืออย่างอื่น?

7
จาก io.Reader เป็นสตริงใน Go
ฉันมีio.ReadCloserวัตถุ (จากhttp.Responseวัตถุ) วิธีใดที่มีประสิทธิภาพที่สุดในการแปลงสตรีมทั้งหมดเป็นstringวัตถุ
129 go 

6
คุณจะพิมพ์ในการทดสอบ Go โดยใช้แพ็คเกจ "การทดสอบ" ได้อย่างไร?
ฉันกำลังทำการทดสอบใน Go พร้อมกับคำสั่งเพื่อพิมพ์บางสิ่ง (เช่นสำหรับการดีบักการทดสอบ) แต่มันไม่ได้พิมพ์อะไรเลย func TestPrintSomething(t *testing.T) { fmt.Println("Say hi") } เมื่อฉันเรียกใช้ go test กับไฟล์นี้นี่คือผลลัพธ์: ok command-line-arguments 0.004s วิธีเดียวที่จะทำให้มันพิมพ์ได้จริงเท่าที่ฉันรู้คือการพิมพ์ผ่าน t.Error () ดังนี้: func TestPrintSomethingAgain(t *testing.T) { t.Error("Say hi") } ซึ่งผลลัพธ์นี้: Say hi --- FAIL: TestPrintSomethingAgain (0.00 seconds) foo_test.go:35: Say hi FAIL FAIL command-line-arguments 0.003s gom: exit status 1 ฉันได้ใช้ …
129 testing  go 

3
json.Marshal (โครงสร้าง) ส่งกลับ“ {}”
type TestObject struct { kind string `json:"kind"` id string `json:"id, omitempty"` name string `json:"name"` email string `json:"email"` } func TestCreateSingleItemResponse(t *testing.T) { testObject := new(TestObject) testObject.kind = "TestObject" testObject.id = "f73h5jf8" testObject.name = "Yuri Gagarin" testObject.email = "Yuri.Gagarin@Vostok.com" fmt.Println(testObject) b, err := json.Marshal(testObject) if err != nil { fmt.Println(err) } …
128 json  go  marshalling 

6
จะขอ https ด้วยใบรับรองที่ไม่ถูกต้องได้อย่างไร
บอกว่าฉันต้องการรับแบบเป็นhttps://golang.orgโปรแกรม ปัจจุบัน golang.org (ssl) มีใบรับรองที่ไม่ถูกต้องซึ่งออกให้*.appspot.comดังนั้นเมื่อฉันเรียกใช้สิ่งนี้: package main import ( "log" "net/http" ) func main() { _, err := http.Get("https://golang.org/") if err != nil { log.Fatal(err) } } ฉันได้รับ (ตามที่ฉันคาดไว้) Get https://golang.org/: certificate is valid for *.appspot.com, *.*.appspot.com, appspot.com, not golang.org ตอนนี้ฉันต้องการเชื่อถือใบรับรองนี้ด้วยตัวเอง (ลองนึกภาพใบรับรองที่ออกเองซึ่งฉันสามารถตรวจสอบลายนิ้วมือ ฯลฯ ): ฉันจะส่งคำขอและตรวจสอบ / เชื่อถือใบรับรองได้อย่างไร ฉันอาจต้องใช้ openssl เพื่อดาวน์โหลดใบรับรองโหลดลงในไฟล์ของฉันและกรอกโครงสร้างtls.Config!?
128 ssl  https  go 

3
ภาษา Go มีฟังก์ชัน / วิธีการทำงานมากเกินไปหรือไม่?
ฉันกำลังย้ายไลบรารี C ไปที่ Go ฟังก์ชัน AC (พร้อม varargs) ถูกกำหนดไว้ดังนี้: curl_easy_setopt(CURL *curl, CURLoption option, ...); ดังนั้นฉันจึงสร้างฟังก์ชัน wrapper C: curl_wrapper_easy_setopt_str(CURL *curl, CURLoption option, char* param); curl_wrapper_easy_setopt_long(CURL *curl, CURLoption option, long param); ถ้าฉันกำหนดฟังก์ชันใน Go เช่นนี้: func (e *Easy)SetOption(option Option, param string) { e.code = Code(C.curl_wrapper_easy_setopt_str(e.curl, C.CURLoption(option), C.CString(param))) } func (e *Easy)SetOption(option Option, param …
127 go 

4
แปลงจำนวนเต็มเป็นจำนวนลอย
ฉันจะแปลงค่าจำนวนเต็มเพื่อfloat64พิมพ์ได้อย่างไร? ฉันเหนื่อย float(integer_value) แต่ไม่ได้ผล และไม่พบแพ็คเกจใด ๆ ที่ทำสิ่งนี้ได้ในGolang.org ฉันจะรับfloat64ค่าจากค่าจำนวนเต็มได้อย่างไร
127 go 

5
วิธีประกาศแผนที่คงที่
ฉันพยายามประกาศว่าจะคงที่ใน Go แต่เกิดข้อผิดพลาด ใครช่วยฉันเกี่ยวกับไวยากรณ์ของการประกาศค่าคงที่ใน Go ได้ไหม นี่คือรหัสของฉัน: const romanNumeralDict map[int]string = { 1000: "M", 900 : "CM", 500 : "D", 400 : "CD", 100 : "C", 90 : "XC", 50 : "L", 40 : "XL", 10 : "X", 9 : "IX", 5 : "V", 4 : "IV", 1 : "I", …
126 go 

6
วิธีแยกวิเคราะห์การประทับเวลายูนิกซ์เป็นเวลาเวลา
ฉันกำลังพยายามแยกวิเคราะห์การประทับเวลา Unix แต่ฉันพบข้อผิดพลาดนอกช่วง นั่นไม่สมเหตุสมผลสำหรับฉันเพราะเค้าโครงถูกต้อง (เช่นเดียวกับในเอกสาร Go): package main import "fmt" import "time" func main() { tm, err := time.Parse("1136239445", "1405544146") if err != nil{ panic(err) } fmt.Println(tm) } สนามเด็กเล่น
126 go  time  unix-timestamp 

1
ฉันจะดูคำสั่งคอมไพล์ภายในที่ล้มเหลวในการติดตั้ง“ go get” ได้อย่างไร
magic.hฉันกำลังดึงและการติดตั้งแพคเกจที่มีการอ้างอิงและรวบรวมล้มเหลวในกรณีนี้ไม่ได้หาไฟล์ ฉันจะดูได้อย่างไรว่าคำสั่งคอมไพล์และแฟล็กคืออะไร? -vตัวเลือกไม่ได้ช่วย (ฉันไม่ต้องการความคิดเกี่ยวกับการได้รับเวทมนตร์ h จากที่นี่เป็นเพียงตัวอย่างเท่านั้น) $ go get -u github.com/presbrey/magicmime # github.com/presbrey/magicmime ../../../src/github.com/presbrey/magicmime/magicmime.go:20:11: fatal error: 'magic.h' file not found #include <magic.h> ตัวอย่างเช่นฉันจะค้นหาได้อย่างไรว่ากำลังค้นหาไฟล์รวมอยู่ที่ไหนแหล่งใดที่รวบรวมได้ (ในกรณีนี้ไฟล์ต้นฉบับที่ฉันเห็น$GO_PATH/srcมีที่#includeแสดงความคิดเห็นและมี/usr/local/include/match.hอยู่แล้ว)
126 go 

6
ทำไมไม่มียาชื่อสามัญใน Go?
ข้อจำกัดความรับผิดชอบ: ตอนนี้ฉันเล่นกับ Go เพียงวันเดียวดังนั้นมีโอกาสที่ดีที่ฉันพลาดไปมาก มีใครรู้บ้างไหมว่าทำไมไม่มีการรองรับ generics / template / whatsInAName ใน Go? ดังนั้นจึงมีแบบทั่วไปmapแต่จัดทำโดยคอมไพเลอร์ในขณะที่โปรแกรมเมอร์ Go ไม่สามารถเขียนการใช้งานของตัวเองได้ จากการพูดคุยเกี่ยวกับการทำให้ Go เป็นแบบตั้งฉากกันมากที่สุดทำไมฉันถึงใช้ประเภททั่วไป แต่ไม่สามารถสร้างใหม่ได้ โดยเฉพาะอย่างยิ่งเมื่อพูดถึงการเขียนโปรแกรมเชิงฟังก์ชั่นมี lambdas แม้กระทั่งการปิด แต่ด้วยระบบประเภทคงที่ซึ่งขาด generics ฉันจะเขียนฟังก์ชันลำดับที่สูงกว่าทั่วไปได้filter(predicate, list)อย่างไร? ตกลงรายการที่เชื่อมโยงและสิ่งที่คล้ายกันสามารถทำได้ด้วยการinterface{}เสียสละความปลอดภัยประเภท เนื่องจากการค้นหาอย่างรวดเร็วบน SO / Google ไม่ได้เปิดเผยข้อมูลเชิงลึกใด ๆ ดูเหมือนว่าข้อมูลทั่วไปจะถูกเพิ่มลงใน Go ในภายหลัง ฉันเชื่อว่า ธ อมป์สันจะทำได้ดีกว่าพวก Java แต่ทำไมต้องใช้ชื่อสามัญ? หรือมีการวางแผนและยังไม่ได้ดำเนินการ?

2
การเยื้องใน Go: แท็บหรือช่องว่าง?
มีเอกสารมาตรฐานการเขียนโค้ดของ Google Go ที่กำหนดว่าต้องการให้แท็บหรือช่องว่างสำหรับการเยื้องใน Go ซอร์สโค้ดหรือไม่ ถ้าไม่ตัวเลือกที่ได้รับความนิยมมากกว่า (ทางสถิติ) คืออะไร? คำแนะนำอย่างเป็นทางการคืออะไร? (ถ้ามี) ทางเลือกที่เป็นที่นิยมมากขึ้นคืออะไร?

3
คุณจะล้างชิ้นส่วนใน Go ได้อย่างไร?
วิธีที่เหมาะสมในการล้างชิ้นส่วนใน Go คืออะไร? นี่คือสิ่งที่ฉันพบในฟอรัม go : // test.go package main import ( "fmt" ) func main() { letters := []string{"a", "b", "c", "d"} fmt.Println(cap(letters)) fmt.Println(len(letters)) // clear the slice letters = letters[:0] fmt.Println(cap(letters)) fmt.Println(len(letters)) } ถูกต้องหรือไม่ เพื่อความชัดเจนบัฟเฟอร์จะถูกล้างเพื่อให้สามารถใช้ซ้ำได้ ตัวอย่างคือฟังก์ชันBuffer.Truncateในแพ็คเกจไบต์ สังเกตว่ารีเซ็ตเพียงแค่เรียก Truncate (0) ดังนั้นดูเหมือนว่าในกรณีนี้บรรทัดที่ 70 จะประเมิน: b.buf = b.buf [0: 0] http://golang.org/src/pkg/bytes/buffer.go …
125 arrays  go  slice 

8
เริ่มต้นโครงสร้างที่ซ้อนกัน
ฉันไม่สามารถหาวิธีเริ่มต้นโครงสร้างที่ซ้อนกันได้ ดูตัวอย่างได้ที่นี่: http://play.golang.org/p/NL6VXdHrjh package main type Configuration struct { Val string Proxy struct { Address string Port string } } func main() { c := &Configuration{ Val: "test", Proxy: { Address: "addr", Port: "80", }, } }
125 go 

3
เข้าถึงการตอบสนอง HTTP เป็นสตริงใน Go
ฉันต้องการแยกวิเคราะห์การตอบสนองของคำขอทางเว็บ แต่ฉันประสบปัญหาในการเข้าถึงเป็นสตริง func main() { resp, err := http.Get("http://google.hu/") if err != nil { // handle error } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) ioutil.WriteFile("dump", body, 0600) for i:= 0; i < len(body); i++ { fmt.Println( body[i] ) // This logs uint8 and prints numbers } fmt.Println( reflect.TypeOf(body) ) fmt.Println("done") …
125 networking  go 

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