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

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


4
จะเกิดอะไรขึ้นถ้าฉันไม่ตอบกลับ Body?
ใน Go ฉันได้รับคำตอบจาก http และบางครั้งฉันลืมโทร: resp.Body.Close() จะเกิดอะไรขึ้นในกรณีนี้? จะมีการรั่วไหลของหน่วยความจำหรือไม่ นอกจากนี้ยังปลอดภัยที่จะใส่defer resp.Body.Close()ทันทีหลังจากได้รับวัตถุตอบสนองหรือไม่? client := http.DefaultClient resp, err := client.Do(req) defer resp.Body.Close() if err != nil { return nil, err } จะเกิดอะไรขึ้นหากมีข้อผิดพลาดอาจเป็นrespหรือresp.Bodyไม่มี
98 go 

1
สร้างคำขอ POST ที่เข้ารหัส URL โดยใช้ http.NewRequest (…)
ฉันต้องการส่งคำขอ POST ไปยัง API ที่ส่งข้อมูลของฉันเป็นapplication/x-www-form-urlencodedประเภทเนื้อหา เนื่องจากฉันต้องการจัดการส่วนหัวของคำขอฉันจึงใช้http.NewRequest(method, urlStr string, body io.Reader)วิธีสร้างคำขอ สำหรับคำขอ POST นี้ฉันเพิ่มการสืบค้นข้อมูลของฉันต่อท้าย URL และปล่อยให้เนื้อหาว่างไว้ดังนี้: package main import ( "bytes" "fmt" "net/http" "net/url" "strconv" ) func main() { apiUrl := "https://api.com" resource := "/user/" data := url.Values{} data.Set("name", "foo") data.Add("surname", "bar") u, _ := url.ParseRequestURI(apiUrl) u.Path = resource u.RawQuery = …
97 http  go 

5
จะสร้างไดเรกทอรีที่ซ้อนกันโดยใช้ Mkdir ใน Golang ได้อย่างไร
ฉันกำลังพยายามสร้างชุดของไดเร็กทอรีที่ซ้อนกันจากโปรแกรม Go เช่น 'dir1 / dir2 / dir3' ฉันประสบความสำเร็จในการสร้างไดเรกทอรีเดียวด้วยบรรทัดนี้: os.Mkdir("." + string(filepath.Separator) + c.Args().First(),0777); อย่างไรก็ตามฉันไม่รู้ว่าจะสร้างชุดไดเร็กทอรีซ้อนที่กำหนดไว้ล่วงหน้าภายในไดเร็กทอรีนั้นอย่างไร
97 go  mkdir 


3
คุณจะให้โปรแกรม Golang พิมพ์หมายเลขบรรทัดของข้อผิดพลาดที่เพิ่งเรียกได้อย่างไร?
ฉันพยายามโยนข้อผิดพลาดในโปรแกรม Golang ของฉันด้วยlog.Fatalแต่log.Fatalไม่พิมพ์บรรทัดที่log.Fatalรันด้วย ไม่มีวิธีเข้าถึงหมายเลขบรรทัดที่เรียกว่า log Fatal? คือมีวิธีรับหมายเลขบรรทัดเมื่อเกิดข้อผิดพลาดหรือไม่? ฉันพยายามที่จะ google แต่ไม่แน่ใจว่าจะทำอย่างไร สิ่งที่ดีที่สุดที่ฉันจะได้รับคือการพิมพ์สแต็กแทร็กซึ่งฉันคิดว่าดี แต่อาจจะมากเกินไป ฉันไม่ต้องการเขียนdebug.PrintStack()ทุกครั้งที่ฉันต้องการหมายเลขบรรทัดฉันรู้สึกประหลาดใจที่ไม่มีฟังก์ชันในตัวสำหรับสิ่งนี้log.FatalStackTrace()หรือสิ่งที่ไม่ใช่เครื่องแต่งกาย นอกจากนี้เหตุผลที่ฉันไม่ต้องการสร้างสิ่งที่จัดการแก้ไขข้อบกพร่อง / ข้อผิดพลาดของตัวเองก็เพราะฉันไม่ต้องการให้คนอื่นต้องเรียนรู้วิธีใช้รหัสการจัดการเครื่องแต่งกายพิเศษของฉัน ฉันแค่ต้องการมาตรฐานที่ผู้คนสามารถอ่านรหัสของฉันในภายหลังและเป็นเหมือน "อ่าตกลงมันเกิดข้อผิดพลาดและทำ X ... " ยิ่งมีคนเรียนรู้เกี่ยวกับโค้ดของฉันน้อยเท่าไหร่ :)

4
ToString () ฟังก์ชันใน Go
strings.Joinฟังก์ชั่นใช้เวลาชิ้นของสตริงเท่านั้น: s := []string{"foo", "bar", "baz"} fmt.Println(strings.Join(s, ", ")) แต่จะเป็นการดีที่จะสามารถส่งผ่านวัตถุโดยพลการที่ใช้ToString()ฟังก์ชันได้ type ToStringConverter interface { ToString() string } มีสิ่งนี้ใน Go หรือไม่หรือฉันต้องตกแต่งประเภทที่มีอยู่เช่นintด้วยวิธี ToString และเขียนกระดาษห่อหุ้มรอบ ๆstrings.Join? func Join(a []ToStringConverter, sep string) string
96 go  tostring 

6
ไม่สามารถแปลง [] สตริงเป็น [] อินเทอร์เฟซ {}
ฉันกำลังเขียนโค้ดบางอย่างและฉันต้องการให้มันจับอาร์กิวเมนต์และส่งผ่านfmt.Println (ฉันต้องการพฤติกรรมเริ่มต้นเพื่อเขียนอาร์กิวเมนต์ที่คั่นด้วยช่องว่างและตามด้วยขึ้นบรรทัดใหม่) อย่างไรก็ตามจะใช้เวลา[]interface {}แต่flag.Args()ส่งกลับไฟล์[]string. นี่คือตัวอย่างโค้ด: package main import ( "fmt" "flag" ) func main() { flag.Parse() fmt.Println(flag.Args()...) } สิ่งนี้ส่งคืนข้อผิดพลาดต่อไปนี้: ./example.go:10: cannot use args (type []string) as type []interface {} in function argument นี่คือบั๊กหรือไม่? ไม่ควรfmt.Printlnใช้อาร์เรย์ใด ๆ ? อย่างไรก็ตามฉันได้พยายามทำสิ่งนี้ด้วย: var args = []interface{}(flag.Args()) แต่ฉันได้รับข้อผิดพลาดต่อไปนี้: cannot convert flag.Args() (type []string) to type []interface …

6
จัดเรียงค่าแผนที่ไปตามคีย์
เมื่อทำซ้ำในแผนที่ที่ส่งคืนในโค้ดซึ่งส่งคืนโดยฟังก์ชันหัวข้อคีย์จะไม่ปรากฏตามลำดับ ฉันจะทำให้คีย์อยู่ในลำดับ / จัดเรียงแผนที่เพื่อให้คีย์เรียงลำดับและค่าสอดคล้องกันได้อย่างไร นี่คือรหัส
96 go  hashmap 

6
การแปลงแผนที่เป็นโครงสร้าง
ฉันกำลังพยายามสร้างวิธีการทั่วไปใน Go ซึ่งจะเติมข้อมูลstructโดยใช้ข้อมูลจากไฟล์map[string]interface{}. ตัวอย่างเช่นลายเซ็นวิธีการและการใช้งานอาจมีลักษณะดังนี้: func FillStruct(data map[string]interface{}, result interface{}) { ... } type MyStruct struct { Name string Age int64 } myData := make(map[string]interface{}) myData["Name"] = "Tony" myData["Age"] = 23 result := &MyStruct{} FillStruct(myData, result) // result now has Name set to "Tony" and Age set to 23 ฉันรู้ว่าสิ่งนี้สามารถทำได้โดยใช้ JSON …
95 go 

5
วิธีตอบสนอง JSON โดยใช้ Go?
คำถาม:ขณะนี้ฉันกำลังพิมพ์คำตอบของฉันในfunc Index ลักษณะนี้fmt.Fprintf(w, string(response)) อย่างไรก็ตามฉันจะส่ง JSON อย่างถูกต้องในคำขอเพื่อให้มันถูกใช้โดยการดูได้อย่างไร package main import ( "fmt" "github.com/julienschmidt/httprouter" "net/http" "log" "encoding/json" ) type Payload struct { Stuff Data } type Data struct { Fruit Fruits Veggies Vegetables } type Fruits map[string]int type Vegetables map[string]int func Index(w http.ResponseWriter, r *http.Request, _ httprouter.Params) { response, err := …
95 json  go 

2
วนซ้ำผ่านแผนที่ในเทมเพลต
ฉันกำลังพยายามแสดงรายการชั้นเรียนออกกำลังกาย (โยคะพิลาทิส ฯลฯ ) สำหรับคลาสแต่ละประเภทมีหลายคลาสดังนั้นฉันจึงต้องการจัดกลุ่มคลาสโยคะทั้งหมดและคลาสพิลาทิสทั้งหมดและอื่น ๆ ฉันทำฟังก์ชั่นนี้เพื่อแบ่งชิ้นส่วนและสร้างแผนที่ func groupClasses(classes []entities.Class) map[string][]entities.Class { classMap := make(map[string][]entities.Class) for _, class := range classes { classMap[class.ClassType.Name] = append(classMap[class.ClassType.Name], class) } return classMap } ปัญหาคือตอนนี้ฉันจะทำซ้ำได้อย่างไรตามที่http://golang.org/pkg/text/template/คุณต้องเข้าถึงใน.Keyรูปแบบฉันไม่รู้คีย์ (เว้นแต่ฉันจะผ่านชิ้นส่วนด้วย ของคีย์ลงในเทมเพลต) ฉันจะแกะแผนที่นี้ในมุมมองของฉันได้อย่างไร ทั้งหมดที่ฉันมีในตอนนี้คือ {{ . }} ซึ่งแสดงสิ่งต่างๆเช่น: map[Pilates:[{102 PILATES ~/mobifit/video/ocen.mpg 169 40 2014-05-03 23:12:12 +0000 UTC 2014-05-03 23:12:12 …
94 go  go-templates 

7
รับโฮมไดเร็กทอรีของผู้ใช้
วิธีต่อไปนี้เป็นวิธีที่ดีที่สุดในการรับโฮมไดเร็กทอรีของผู้ใช้ที่รันอยู่หรือไม่ หรือมีฟังก์ชันเฉพาะที่ฉันมองข้ามไปหรือไม่? os.Getenv("HOME") หากข้างต้นถูกต้องจะมีใครรู้บ้างหรือไม่ว่าแนวทางนี้รับประกันว่าจะทำงานบนแพลตฟอร์มที่ไม่ใช่ Linux เช่น Windows ได้หรือไม่?

9
สามารถติดตั้ง Go compiler บน Windows ได้หรือไม่?
ฉันมองหาคอมไพเลอร์ของ Windows ในgolang.orgแต่ดูเหมือนจะหาไม่เจอ ฉันเห็นเฉพาะคอมไพเลอร์ Linux และ OS X มีใครรู้บ้างว่าการเขียนโปรแกรม Go สามารถทำได้บน Windows หรือเป็นสิ่งที่ Google ยังไม่ได้ติดตั้ง อัปเดต: ดูเหมือนว่า ณ ตอนนี้ (พ.ย. 2555) golang.orgมีการเผยแพร่ไบนารีอย่างเป็นทางการสำหรับ windows 32 / x86_64
94 windows  go 

2
ฉันจะแปลงสตริงเป็นการแทนตัวพิมพ์เล็กได้อย่างไร
ฉันจะแปลงสตริงเป็นการแทนตัวพิมพ์เล็กได้อย่างไร ฉันรู้สึกว่ามันต้องมีฟังก์ชั่นในตัว แต่หาไม่เจอ ฉันพบToLowerอิน"unicode/letter"แล้ว แต่ใช้ได้ครั้งละหนึ่งรูนเท่านั้น
94 go 

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