- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - phát hiện rò rỉ bộ nhớ Ruby/Ruby on Rails
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我正在尝试巩固 Go 提供的继承概念(也许是“组合”而不是纯粹的继承)。但是,我无法理解为什么我不能将“父”类型用作 chức năng
参数来生成作用于该参数的通用函数。
gói chính
import "log"
type Animal struct {
Colour string
Chuỗi tên
}
type Dog struct {
Animal
}
func PrintColour(a *Animal) {
log.Printf("%s\n", a.Colour)
}
hàm main () {
a := new (Animal)
a.Colour = "Void"
d := new (Dog)
d.Colour = "Black"
PrintColour(a)
PrintColour(d)
}
假设我的理解不正确,我怎样才能在 Go 中实现我想要的?
biên tậpĐể ý:
我不想将行为附加到结构
我想将指针类型保留为方法参数,因为我正在单独处理一个宠物项目,这需要我先操作传入的结构,然后再对其执行操作。
<实际上,我的 Chó
结构会有额外的字段/成员;希望这不会进一步搅浑水
câu trả lời hay nhất
到目前为止,我喜欢这里的答案,我想添加一个允许您使用接口(interface)对传入的接口(interface)进行静态类型检查的答案:
gói chính
nhập khẩu (
"fmt"
)
type Animalizer interface {
GetColour() string
}
type Animal struct {
Colour string
Chuỗi tên
}
type Dog struct {
Animal
}
func (a *Animal) GetColour() string {
return a.Colour
}
func PrintColour(a Animalizer) {
fmt.Print(a.GetColour())
}
hàm main() {
a := new(Animal)
a.Colour = "Void"
d := new(Dog)
d.Colour = "Black"
PrintColour(a)
PrintColour(d)
}
可以向 Chó
添加更多字段。与 Uriel 的答案的不同之处在于,如果传入的不是实现 Animalizer
的结构,那么调用 PrintColour
将在编译时失败。
此外,您不必使用类型切换,因为编译器知道 Animalizer
正在实现 GetColour
。
最后,行为(打印)与结构分离,GetColour
只返回颜色。
关于inheritance - Go "inheritance"- 在结构中使用匿名类型作为方法参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21527489/
Tôi đang sử dụng thư viện biểu đồ cờ vây https://github.com/wcharczuk/go-chart để tạo biểu đồ thanh. Vấn đề tôi gặp phải là giá trị nhãn rất dài và tôi muốn xoay văn bản 45 độ để hiển thị toàn bộ văn bản.
Tôi đang gặp sự cố khi xây dựng một chương trình go rất đơn giản gọi mã c qua cgo. Thiết lập của tôi: $: echo $GOPATH /go $: pwd /go/src/main $: ls ctest.c
Không có nền tảng C và chỉ có trải nghiệm "người mới bắt đầu" với Go, tôi đang cố gắng tìm hiểu xem main.go có thực sự cần thiết hay chỉ là một quy ước. Tôi muốn tạo một API web đơn giản nhưng ai đó có thể làm rõ điều này cho tôi không? Câu trả lời hay nhấtmain.go
Tôi đọc được rằng kể từ Go 1.4, thời gian chạy Go được viết bằng chính Go (chứ không phải bằng C). Làm thế nào điều này có thể xảy ra? Nếu chương trình Go chạy trên thời gian chạy và thời gian chạy là chương trình Go, thì thời gian chạy có chạy trên chính nó không? câu trả lời hay nhất
Đây là ví dụ về mã từ Phạm vi và Đóng của "A Journey with Go": package main import ( "fmt" ) func fibonacci(n int, c chan int
Cho tệp go.mod sau: module foo go 1.12 require ( github.com/bar/baz v1.0.0 github.com/rat/cat v1
Tôi có quy trình CI/CD cần đa nền tảng và hoạt động với nhiều trình ảo hóa khác nhau. Để không phải thay đổi các tác vụ build cho Windows và Linux, tôi nghĩ Go sẽ là một cách hay để viết code một lần và chạy ở mọi nơi. Tuy nhiên, xem xét
Tôi có Dockerfile để biên dịch ứng dụng Go bằng cách sử dụng go build. Tôi đã thực hiện một số nghiên cứu và thực sự nên sử dụng go build cho sản xuất. Nhưng tôi không thể tìm thấy câu trả lời đúng để giải thích tại sao. Tôi hiểu hãy chạy sáng tạo
Tôi đã thử chạy chương trình trong dấu nhắc lệnh #Go lang - nhưng khi tôi gõ lệnh run "go run hello.go" thì tôi khởi động CreateFile hello.go: The system can not fin
Tôi đang học cờ vây bằng cuốn sách "Ngôn ngữ lập trình cờ vây". Chương 1 giới thiệu module os.Open để đọc file. Tôi cố gắng mở tập tin go như hình dưới đây. f, err = os.Open("helloworld.go") Tôi chấp nhận
đóng cửa. Câu hỏi này yêu cầu chi tiết hoặc rõ ràng. Hiện tại nó không chấp nhận câu trả lời. Bạn muốn cải thiện câu hỏi này? Thêm chi tiết và làm rõ câu hỏi bằng cách chỉnh sửa bài đăng này Đã đóng 2 năm trước. Cải thiện điều này
Để giải quyết một số hiểu lầm của tôi về goroutines, tôi đã đến sân chơi Go và chạy mã này: package main import ("fmt") func other(done cha
Câu hỏi này đã có câu trả lời ở đây: Đánh giá/Thực thi mã/biểu thức Golang như js' eval() (5 câu trả lời) Đã đóng 1 năm trước. Đối với bất kỳ chương trình cờ vây nào, tôi muốn
Đây là mã của tôi về cơ bản cố gắng in điểm chuẩn từ một đường dẫn. Điều này có nghĩa là nếu người dùng nhập "/some/random/path.java" thì đầu ra sẽ là "path". Tương tự, nếu người dùng đối số là "/another/myapp.c", thì hãy nhập
$ go version 1.13.3 Cấu trúc thư mục của mình như sau: GOPATH +---src +--- my-api-server +--- my-auth-server
Câu hỏi này đã có câu trả lời ở đây: Cách nhúng tệp để sử dụng thực thi phân tích cú pháp sau này (4 câu trả lời) Cách tốt nhất để bun là gì
Tôi nghĩ điều này hơi lạ, tại sao mã này không hoạt động? package main import "fmt" func main() { var i, j int = 1, 2 k
Tệp thực thi được lưu trữ ở đâu sau khi trình biên dịch go thực thi lệnh sau? $> go run file.go Câu trả lời hay nhất nằm trong thư mục /tmp nếu bạn đang sử dụng máy unix. Nếu bạn đang sử dụng Windows, trong \Us
Tôi hiện đang bắt đầu với Go và đã nghiên cứu kỹ các vấn đề liên quan đến việc đặt tên gói và cấu trúc thư mục không gian làm việc. Tuy nhiên, tôi không chắc chắn về cách tổ chức mã của mình đúng cách theo mô hình Go. Đây là một ví dụ về cấu trúc hiện tại của tôi, nằm ở $GOPATH/src:
Giả sử tôi có một chương trình Lua chấp nhận đầu vào của người dùng và đầu vào đó là mã nguồn Lua hợp lệ. Điều này được làm sạch, biên dịch và thực thi trong khi chương trình vẫn đang chạy. Liệu Go (hoặc nó sẽ) có thực hiện được điều đó không? Câu trả lời hay nhất tôi nghĩ có đủ giữa hai dự án sau
Tôi là một lập trình viên xuất sắc, rất giỏi!