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

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

4
การแปลงโครงสร้างของคุณเป็น JSON
ฉันพยายามที่จะแปลง struct ไป JSON ใช้jsonแพคเกจ {}แต่ทั้งหมดที่ฉันได้รับคือ ฉันแน่ใจว่ามันเป็นสิ่งที่ชัดเจนโดยสิ้นเชิง แต่ฉันไม่เห็น package main import ( "fmt" "encoding/json" ) type User struct { name string } func main() { user := &User{name:"Frank"} b, err := json.Marshal(user) if err != nil { fmt.Printf("Error: %s", err) return; } fmt.Println(string(b)) } จากนั้นเมื่อฉันพยายามเรียกใช้ฉันจะได้รับสิ่งนี้: $ 6g test.go && 6l …
181 json  go 

12
การลบฟิลด์ออกจาก struct หรือซ่อนไว้ในการตอบกลับ JSON
ฉันได้สร้าง API ใน Go แล้วเมื่อถูกเรียกให้ทำการคิวรีสร้างอินสแตนซ์ของ struct จากนั้นเข้ารหัส encode นั้นเป็น JSON ก่อนที่จะส่งกลับไปยังผู้โทร ตอนนี้ฉันต้องการอนุญาตให้ผู้เรียกสามารถเลือกเขตข้อมูลเฉพาะที่พวกเขาต้องการส่งคืนโดยส่งผ่านพารามิเตอร์ "เขตข้อมูล" GET ซึ่งหมายความว่าขึ้นอยู่กับค่าของฟิลด์ struct ของฉันจะเปลี่ยนไป มีวิธีการลบเขตข้อมูลจาก struct หรือไม่? หรืออย่างน้อยก็ซ่อนไว้ในการตอบสนอง JSON แบบไดนามิก? (หมายเหตุ: บางครั้งฉันมีค่าว่างดังนั้นแท็ก JSON omitEmpty จะไม่ทำงานที่นี่) หากไม่มีสิ่งเหล่านี้เป็นไปได้มีข้อเสนอแนะเกี่ยวกับวิธีที่ดีกว่าในการจัดการกับสิ่งนี้หรือไม่ ขอบคุณล่วงหน้า. structs รุ่นที่เล็กกว่าที่ฉันใช้อยู่ด้านล่าง: type SearchResult struct { Date string `json:"date"` IdCompany int `json:"idCompany"` Company string `json:"company"` IdIndustry interface{} `json:"idIndustry"` Industry string …
181 json  go 

5
วิธีใช้แพ็คเกจที่กำหนดเอง
ฉันกำลังพยายามสร้างและใช้แพ็คเกจที่กำหนดเองใน Go อาจเป็นสิ่งที่ชัดเจนมาก แต่ฉันไม่สามารถหาข้อมูลเกี่ยวกับเรื่องนี้ได้มากนัก โดยทั่วไปฉันมีไฟล์สองไฟล์นี้ในโฟลเดอร์เดียวกัน: mylib.go package mylib type SomeType struct { } main.go package main import ( "mylib" ) func main() { } เมื่อฉันพยายามgo run main.goฉันได้รับข้อผิดพลาดนี้: main.go:4:2: import "mylib": cannot find package ฉันพยายามเรียกใช้go build mylib.goก่อน แต่ดูเหมือนจะไม่ทำอะไรเลย (ไม่มีไฟล์ที่สร้างขึ้นไม่มีข้อความแสดงข้อผิดพลาด) ดังนั้นความคิดใดที่ฉันสามารถทำได้
178 import  package  go 

4
ไม่สามารถแปลงข้อมูล (ชนิดอินเตอร์เฟส {}) เป็นประเภทสตริง: ต้องการการยืนยันประเภท
ฉันค่อนข้างใหม่ที่จะไปและฉันกำลังเล่นกับแพคเกจการแจ้งเตือนนี้ ตอนแรกฉันมีรหัสที่มีลักษณะเช่นนี้: func doit(w http.ResponseWriter, r *http.Request) { notify.Post("my_event", "Hello World!") fmt.Fprint(w, "+OK") } ฉันต้องการต่อท้ายบรรทัดใหม่Hello World!แต่ไม่ใช่ในฟังก์ชั่นdoitด้านบนเพราะนั่นจะเป็นเรื่องเล็กน้อย แต่handlerหลังจากนั้นเช่นนี้ด้านล่าง: func handler(w http.ResponseWriter, r *http.Request) { myEventChan := make(chan interface{}) notify.Start("my_event", myEventChan) data := <-myEventChan fmt.Fprint(w, data + "\n") } หลังgo run: $ go run lp.go # command-line-arguments ./lp.go:15: invalid operation: data + …
178 go  type-mismatch 

2
แปลงไบต์เป็น io.Reader
ในโครงการของฉันฉันมี byte slice จากคำตอบของคำขอ defer resp.Body.Close() if resp.StatusCode != http.StatusOK { log.Println("StatusCode为" + strconv.Itoa(resp.StatusCode)) return } respByte, err := ioutil.ReadAll(resp.Body) if err != nil { log.Println("fail to read response data") return } วิธีนี้ใช้ได้ผล แต่ถ้าฉันต้องการได้ร่างกายของการตอบสนองio.Readerฉันจะแปลงได้อย่างไร ฉันลองผู้อ่าน / ผู้เขียนใหม่ แต่ไม่ประสบความสำเร็จ
177 go 


2
ตัวพิมพ์เล็กชื่อคีย์ JSON ด้วย JSON Marshal in Go
ฉันต้องการใช้"encoding/json"แพคเกจเพื่อจัดโครงสร้างการประกาศในหนึ่งในแพ็กเกจที่นำเข้าของแอปพลิเคชันของฉัน เช่น.: type T struct { Foo int } เนื่องจากมีการนำเข้าฟิลด์ที่มีอยู่ทั้งหมด (ส่งออก) ในโครงสร้างเริ่มต้นด้วยตัวอักษรตัวพิมพ์ใหญ่ แต่ฉันต้องการมีชื่อคีย์ตัวพิมพ์เล็ก: out, err := json.Marshal(&T{Foo: 42}) จะส่งผลให้ { "ฟู": 42} แต่ฉันต้องการที่จะได้รับ { "foo": 42} เป็นไปได้ไหมที่จะแก้ไขปัญหาด้วยวิธีง่าย ๆ ?
175 json  go  marshalling 

10
มีวิธีย้ำช่วงจำนวนเต็มหรือไม่
ช่วงของ Go สามารถทำซ้ำในแผนที่และส่วนต่าง ๆ แต่ฉันสงสัยว่าถ้ามีวิธีที่จะวนซ้ำในช่วงของตัวเลขบางอย่างเช่นนี้: for i := range [1..10] { fmt.Println(i) } หรือมีวิธีที่จะแสดงช่วงของจำนวนเต็มใน Go เหมือนกับที่ Ruby ทำกับRange Classอย่างไร?
174 go 

12
วิธีใช้ C ++ ใน Go
ในภาษาGoใหม่ฉันจะเรียกรหัส C ++ ได้อย่างไร ในคำอื่น ๆ ฉันจะห่อคลาส C ++ ของฉันและใช้ใน Go ได้อย่างไร
173 c++  wrapper  go 

7
วิธีนำเข้าแพคเกจท้องถิ่นโดยไม่มี gopath
ฉันเคยใช้GOPATHแต่สำหรับปัญหาปัจจุบันนี้ฉันกำลังเผชิญหน้ากับมันไม่ได้ช่วย ฉันต้องการสร้างแพ็คเกจที่เฉพาะเจาะจงกับโครงการ: myproject/ ├── binary1.go ├── binary2.go ├── package1.go └── package2.go ฉันลองหลายวิธี แต่ฉันpackage1.goจะทำงานในbinary1.goหรือต่อbinary2.goๆ ไปได้อย่างไร ตัวอย่างเช่น; ฉันต้องการที่จะสามารถimport "package1"แล้วสามารถทำงานได้go build binary1.goและทุกอย่างทำงานได้ดีไม่มีข้อผิดพลาดที่ถูกโยนว่าแพคเกจไม่สามารถพบได้บนหรือGOROOT GOPATHเหตุผลที่ฉันต้องการฟังก์ชั่นประเภทนี้สำหรับโครงการขนาดใหญ่ ฉันไม่ต้องการอ้างอิงหลายแพ็คเกจหรือเก็บไว้ในไฟล์ขนาดใหญ่
171 go  package 


5
ลบแผนที่ [คีย์] ในระหว่างการเดินทางหรือไม่
ฉันมีแผนที่: var sessions = map[string] chan int{} ฉันจะลบได้sessions[key]อย่างไร ฉันเหนื่อย: sessions[key] = nil,false; นั่นไม่ได้ผล อัปเดต (พฤศจิกายน 2554): ไวยากรณ์พิเศษสำหรับการลบรายการแผนที่จะถูกลบในรุ่น Go 1 : ไป 1 จะลบการกำหนดแผนที่พิเศษและแนะนำใหม่ที่สร้างขึ้นในฟังก์ชั่นdelete: จะลบรายการแผนที่เรียกโดยการแสดงออกdelete(m, x) m[x]...
166 map  go 

8
การตั้งค่าส่วนหัว HTTP
ฉันกำลังพยายามตั้งส่วนหัวในเว็บเซิร์ฟเวอร์ Go ของฉัน ฉันใช้gorilla/muxและnet/httpแพ็คเกจ ฉันต้องการตั้งค่าAccess-Control-Allow-Origin: *ให้อนุญาตข้ามโดเมน AJAX นี่คือรหัส Go ของฉัน: func saveHandler(w http.ResponseWriter, r *http.Request) { // do some stuff with the request data } func main() { r := mux.NewRouter() r.HandleFunc("/save", saveHandler) http.Handle("/", r) http.ListenAndServe(":"+port, nil) } net/httpแพคเกจมีเอกสารที่อธิบายการส่งส่วนหัวของคำขอ http ราวกับว่ามันเป็นไคลเอนต์ - ฉันไม่แน่ใจว่าวิธีการที่ส่วนหัวของการตอบสนองชุด?
165 http  go  cors  http-headers 

5
การจัดสรร stack vs heap ของ structs ใน Go และความเกี่ยวข้องกับการรวบรวมขยะ
ฉันยังใหม่กับ Go และฉันรู้สึกสับสนเล็กน้อยระหว่างการเขียนโปรแกรมแบบ C-style โดยที่ตัวแปรอัตโนมัติอยู่บนสแต็กและการจัดสรรหน่วยความจำจะมีชีวิตอยู่บนฮีปและการเขียนโปรแกรมแบบสแต็กตาม Python สิ่งเดียวที่อยู่บนสแต็กคือการอ้างอิง / พอยน์เตอร์ไปยังวัตถุบนฮีป เท่าที่ฉันสามารถบอกได้ฟังก์ชั่นทั้งสองต่อไปนี้ให้ผลลัพธ์เหมือนกัน: func myFunction() (*MyStructType, error) { var chunk *MyStructType = new(HeaderChunk) ... return chunk, nil } func myFunction() (*MyStructType, error) { var chunk MyStructType ... return &chunk, nil } เช่นจัดสรรโครงสร้างใหม่และส่งคืน ถ้าฉันเขียนว่าใน C วัตถุแรกจะวางวัตถุบนกองและอันที่สองจะวางบนกอง ตัวแรกจะกลับตัวชี้ไปที่กองที่สองจะกลับตัวชี้ไปที่กองซึ่งจะระเหยไปตามเวลาที่ฟังก์ชันส่งคืนซึ่งจะเป็นสิ่งที่ไม่ดี ถ้าฉันเขียนมันด้วยภาษาไพ ธ อน (หรือภาษาสมัยใหม่อื่น ๆ อีกมากมายยกเว้น C …

6
การตรวจจับไม่มีใน Go
ฉันเห็นรหัสจำนวนมากใน Go เพื่อตรวจจับไม่มีเช่นนี้ if err != nil { // handle the error } อย่างไรก็ตามฉันมีโครงสร้างเช่นนี้: type Config struct { host string port float64 } และ config เป็นตัวอย่างของการกำหนดค่าเมื่อฉัน: if config == nil { } มีข้อผิดพลาดในการรวบรวมว่า: ไม่สามารถแปลงศูนย์เพื่อพิมพ์ Config
165 go  null 

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