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

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

2
ไปที่ฟิลด์อินเทอร์เฟซ
ฉันคุ้นเคยกับความจริงที่ว่าใน Go อินเทอร์เฟซกำหนดฟังก์ชันการทำงานแทนที่จะเป็นข้อมูล คุณใส่ชุดวิธีการลงในอินเทอร์เฟซ แต่คุณไม่สามารถระบุฟิลด์ใด ๆ ที่จำเป็นสำหรับสิ่งที่ใช้อินเทอร์เฟซนั้น ตัวอย่างเช่น: // Interface type Giver interface { Give() int64 } // One implementation type FiveGiver struct {} func (fg *FiveGiver) Give() int64 { return 5 } // Another implementation type VarGiver struct { number int64 } func (vg *VarGiver) Give() int64 { return …
105 struct  interface  go 

10
ใช้การนำเข้าแพ็คเกจแบบแยกใน Go
สมมติว่าคุณมีพื้นที่เก็บข้อมูลที่และคุณแยกมันgithub.com/someone/repo github.com/you/repoคุณต้องการใช้ทางแยกของคุณแทน repo หลักดังนั้นคุณจึงทำไฟล์ go get github.com/you/repo ตอนนี้เส้นทางการนำเข้าทั้งหมดใน repo นี้จะ "เสีย" ซึ่งหมายความว่าหากมีหลายแพ็กเกจในที่เก็บที่อ้างอิงถึงกันผ่าน URL ที่สมบูรณ์พวกเขาจะอ้างอิงแหล่งที่มาไม่ใช่ทางแยก มีวิธีที่ดีกว่าในการโคลนด้วยตนเองในเส้นทางที่ถูกต้องหรือไม่? git clone git@github.com:you/repo.git $GOPATH/src/github.com/someone/repo
105 go 

4
ข้อผิดพลาดรันไทม์: การกำหนดรายการใน nil map
ฉันพยายามสร้างแผนที่จากนั้นแปลงเป็นไฟล์ yaml ดังนี้: uid : kasi: cn: Chaithra street: fkmp nandan: cn: Chaithra street: fkmp remya: cn: Chaithra street: fkmp ฉันคิดว่าฉันพลาดบางอย่างที่สำคัญในขณะที่สร้างแผนที่ รหัสของฉันอยู่ด้านล่าง package main import ( "fmt" "gopkg.in/yaml.v2" ) type T struct { cn string street string } func main() { names := []string{"kasi", "remya", "nandan"} m := make(map[string]map[string]T, len(names)) …
105 map  go  yaml 

3
บางส่วนของ JSON unmarshal ลงในแผนที่ใน Go
เซิร์ฟเวอร์ websocket ของฉันจะรับและข้อมูล JSON ที่ไม่เป็นอันตราย ข้อมูลนี้จะรวมอยู่ในวัตถุที่มีคู่คีย์ / ค่าเสมอ คีย์สตริงจะทำหน้าที่เป็นตัวระบุค่าโดยบอกเซิร์ฟเวอร์ Go ว่าเป็นค่าประเภทใด เมื่อทราบว่าประเภทของค่าใดฉันจึงสามารถดำเนินการต่อ JSON ค่า unmarshal ลงในประเภทของโครงสร้างที่ถูกต้อง json-object แต่ละตัวอาจมีคู่คีย์ / ค่าหลายคู่ ตัวอย่าง JSON: { "sendMsg":{"user":"ANisus","msg":"Trying to send a message"}, "say":"Hello" } มีวิธีง่ายๆในการใช้"encoding/json"แพ็คเกจนี้หรือไม่? package main import ( "encoding/json" "fmt" ) // the struct for the value of a "sendMsg"-command type sendMsg struct …
105 json  map  go 

4
แยกการทดสอบหน่วยและการทดสอบการรวมใน Go
มีแนวทางปฏิบัติที่ดีที่สุดสำหรับการแยกการทดสอบหน่วยและการทดสอบบูรณาการใน GoLang (เป็นพยาน) หรือไม่ ฉันมีการทดสอบหน่วยหลายอย่าง (ซึ่งไม่ต้องพึ่งพาทรัพยากรภายนอกใด ๆ จึงทำงานได้เร็วมาก) และการทดสอบการรวม (ซึ่งอาศัยทรัพยากรภายนอกใด ๆ จึงทำงานช้าลง) ดังนั้นฉันต้องการให้สามารถควบคุมได้ว่าจะรวมการทดสอบการรวมเข้าด้วยกันเมื่อฉันพูดgo testหรือไม่ เทคนิคที่ตรงไปตรงมาที่สุดดูเหมือนจะเป็นการกำหนดแฟล็ก -integrate ใน main: var runIntegrationTests = flag.Bool("integration", false , "Run the integration tests (in addition to the unit tests)") จากนั้นเพิ่ม if-statement ที่ด้านบนของการทดสอบการรวมทุกครั้ง: if !*runIntegrationTests { this.T().Skip("To run this test, use: go test -integration") } นี่คือสิ่งที่ดีที่สุดที่ฉันทำได้หรือไม่? …

4
ไม่มีตัวแปรใหม่ทางด้านซ้ายของ: =
เกิดอะไรขึ้นที่นี่? package main import "fmt" func main() { myArray :=[...]int{12,14,26} ; fmt.Println(myArray) myArray :=[...]int{11,12,14} //error pointing on this line fmt.Println(myArray) ; } มันแสดงข้อผิดพลาดที่ระบุว่า no new variables on left side of := สิ่งที่ฉันทำคือกำหนดค่าใหม่ให้กับตัวแปรที่ประกาศไปแล้ว

7
วิธีการสแกนระบบไฟล์
ฉันต้องเขียนฟังก์ชันซึ่งเมื่อกำหนดเส้นทางของโฟลเดอร์จะสแกนไฟล์ที่รูทที่โฟลเดอร์นั้น จากนั้นฉันต้องแสดงโครงสร้างไดเร็กทอรีที่โฟลเดอร์นั้น ฉันรู้วิธีทำ 2 (ฉันจะใช้ jstree เพื่อแสดงในเบราว์เซอร์)
104 file  go  directory 


2
จะรับชื่อฟังก์ชันใน Go ได้อย่างไร?
ด้วยฟังก์ชั่นเป็นไปได้ที่จะได้รับชื่อหรือไม่? พูด: func foo() { } func GetFunctionName(i interface{}) string { // ... } func main() { // Will print "name: foo" fmt.Println("name:", GetFunctionName(foo)) } ฉันได้รับแจ้งว่าruntime FuncForPCจะช่วยได้ แต่ฉันไม่เข้าใจวิธีการใช้งาน

4
การตั้งชื่อแพ็กเกจที่เหมาะสมสำหรับการทดสอบด้วยภาษา Go
ฉันได้เห็นกลยุทธ์การตั้งชื่อแพ็กเกจการทดสอบที่แตกต่างกันหลายแบบภายใน Go และต้องการทราบว่าข้อดีข้อเสียของแต่ละแบบคืออะไรและควรใช้แบบใด ยุทธศาสตร์ที่ 1: ชื่อไฟล์: github.com/user/myfunc.go package myfunc ชื่อไฟล์ทดสอบ: github.com/user/myfunc_test.go package myfunc ดูตัวอย่างbzip2 ยุทธศาสตร์ที่ 2: ชื่อไฟล์: github.com/user/myfunc.go package myfunc ชื่อไฟล์ทดสอบ: github.com/user/myfunc_test.go package myfunc_test import ( "github.com/user/myfunc" ) ดูลวดสำหรับตัวอย่าง ยุทธศาสตร์ที่ 3: ชื่อไฟล์: github.com/user/myfunc.go package myfunc ชื่อไฟล์ทดสอบ: github.com/user/myfunc_test.go package myfunc_test import ( . "myfunc" ) ดูตัวอย่างสตริง ไลบรารีมาตรฐาน Go ดูเหมือนจะใช้กลยุทธ์ 1 และ …
104 unit-testing  go 

3
การรับข้อความแสดงข้อผิดพลาด "bytes.Buffer ไม่ได้ใช้ io.Writer"
ฉันกำลังพยายามให้ Go object ใช้ io.Writer แต่เขียนลงในสตริงแทนที่จะเป็นไฟล์หรืออ็อบเจกต์แบบไฟล์ ผมคิดว่าจะทำงานตั้งแต่การดำเนินการมันbytes.Buffer Write(p []byte)อย่างไรก็ตามเมื่อฉันลองสิ่งนี้: import "bufio" import "bytes" func main() { var b bytes.Buffer foo := bufio.NewWriter(b) } ฉันได้รับข้อผิดพลาดต่อไปนี้: cannot use b (type bytes.Buffer) as type io.Writer in function argument: bytes.Buffer does not implement io.Writer (Write method has pointer receiver) ฉันสับสนเนื่องจากมันใช้อินเทอร์เฟซอย่างชัดเจน ฉันจะแก้ไขข้อผิดพลาดนี้ได้อย่างไร
104 go 

2
Go เทียบเท่ากับ argv [0] เท่าไหร่
ฉันจะตั้งชื่อโปรแกรมของตัวเองที่รันไทม์ได้อย่างไร? อะไรที่เทียบเท่ากับ Argv [0] ของ C / C ++ สำหรับฉันมันมีประโยชน์ในการสร้างการใช้งานด้วยชื่อที่ถูกต้อง อัปเดต: เพิ่มรหัส package main import ( "flag" "fmt" "os" ) func usage() { fmt.Fprintf(os.Stderr, "usage: myprog [inputfile]\n") flag.PrintDefaults() os.Exit(2) } func main() { flag.Usage = usage flag.Parse() args := flag.Args() if len(args) < 1 { fmt.Println("Input file is missing."); os.Exit(1); …
103 go 



5
อ่านไฟล์ข้อความลงในสตริงอาร์เรย์ (และเขียน)
ความสามารถในการอ่าน (และเขียน) ไฟล์ข้อความเข้าและออกจากสตริงอาร์เรย์คือฉันเชื่อว่าเป็นข้อกำหนดที่ค่อนข้างธรรมดา นอกจากนี้ยังมีประโยชน์มากเมื่อเริ่มต้นด้วยภาษาโดยไม่จำเป็นต้องเข้าถึงฐานข้อมูลในตอนแรก มีอยู่ใน Golang หรือไม่? เช่น func ReadLines(sFileName string, iMinLines int) ([]string, bool) { และ func WriteLines(saBuff[]string, sFilename string) (bool) { ฉันต้องการใช้อันที่มีอยู่มากกว่าที่จะทำซ้ำ
103 go 

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