Có thể làm việc theo cách tương tự như quá tải hàm hoặc tham số tùy chọn trong C# bằng Golang không? Hoặc có thể là một cách khác?Thay thế cho quá tải hàm trong Go?
Trả lời
Không hỗ trợ trực tiếp chức năng quá tải hàm cũng như đối số tùy chọn. Bạn có thể làm việc xung quanh họ xây dựng cấu trúc đối số của riêng bạn. Ý tôi là như thế này (chưa được kiểm tra, có thể không làm việc ...) EDIT: now tested...
package main
import "fmt"
func main() {
args:=NewMyArgs("a","b") // filename is by default "c"
args.SetFileName("k")
ret := Compresser(args)
fmt.Println(ret)
}
func Compresser(args *MyArgs) string {
return args.dstFilePath + args.srcFilePath + args.fileName
}
// a struct with your arguments
type MyArgs struct
{
dstFilePath, srcFilePath, fileName string
}
// a "constructor" func that gives default values to args
func NewMyArgs(dstFilePath string, srcFilePath string) *MyArgs {
return &MyArgs{
dstFilePath: dstFilePath,
srcFilePath:srcFilePath,
fileName :"c"}
}
func (a *MyArgs) SetFileName(value string){
a.fileName=value;
}
đối số tùy chọn hiện được phép trong Go. kiểm tra điều này http://changelog.ca/log/2015/01/30/golang –
@MohitBhura liên kết của bạn đáng để đọc nhưng không nói rằng các đối số tùy chọn hiện được cho phép. Trong thực tế nó đề xuất một cách khác nhau để làm việc xung quanh sự vắng mặt của họ, dựa trên giao diện trống rỗng và đối số variadic –
Câu trả lời thành ngữ với các thông số tùy chọn trong Go là chức năng wrapper:
func do(a, b, c int) {
// ...
}
func doSimply(a, b) {
do(a, b, 42)
}
Tái định nghĩa hàm đã cố tình bỏ qua, bởi vì nó làm cho mã khó đọc (er).
* bởi vì nó làm cho mã khó đọc (er). * Đó là hoàn toàn chủ quan. Tôi không nghĩ như vậy, không phải lúc nào. –
Có một số gợi ý here sử dụng lập luận variadic, ví dụ:
sm1 := Sum(1, 2, 3, 4) // = 1 + 2 + 3 + 4 = 10
sm2 := Sum(1, 2) // = 1 + 2 = 3
sm3 := Sum(7, 1, -2, 0, 18) // = 7 + 1 + -2 + 0 + 18 = 24
sm4 := Sum() // = 0
func Sum(numbers ...int) int {
n := 0
for _,number := range numbers {
n += number
}
return n
}
Hoặc ...interface{}
cho bất kỳ loại:
Ul("apple", 7.2, "BANANA", 5, "cHeRy")
func Ul(things ...interface{}) {
fmt.Println("<ul>")
for _,it := range things {
fmt.Printf(" <li>%v</li>\n", it)
}
fmt.Println("</ul>")
}
- 1. Quá tải hàm rvalue
- 2. Quá tải hàm trong CodeIgniter
- 3. thay thế C++ bằng go + swig
- 4. Trang trí cho quá tải trong Python
- 5. hàm mẫu quá tải: const * vs const &
- 6. quá tải hàm với tham số const
- 7. std :: hàm ràng buộc và quá tải
- 8. Quá tải hàm PHP là gì?
- 9. Quá tải hàm tạo "cơ sở" hoặc hàm tạo "này"?
- 10. Làm thế nào để ép buộc quá tải hàm mẫu cho tăng :: liên kết?
- 11. Quá tải trong Ocaml
- 12. quá tải Python hàm toán học sử dụng Cython
- 13. Trong Go, làm thế nào để tôi chụp được hàm stdout của một hàm?
- 14. Thay thế, thay thế hoặc thay thế tốt nhất cho ASIHTTP cho hàng đợi tải xuống
- 15. Visual C++ 2010 chấp nhận chuỗi cho bool trong hàm quá tải
- 16. Chính xác quá tải chuỗi chuỗi để thay thế cout trong tệp mex MATLAB
- 17. Làm thế nào để quá tải các hàm do người dùng định nghĩa trong Matlab?
- 18. Làm thế nào chúng ta có thể sử dụng các kênh trong Go thay cho mutex?
- 19. Trình biên dịch xử lý các toán tử gọi hàm bị quá tải trong các hàm functors như thế nào?
- 20. Cách JVM tìm phương thức (tham số có đối sánh gần nhất) để gọi trong trường hợp quá tải hàm
- 21. Sự mơ hồ về hàm tạo quá tải
- 22. Quá tải trong Ruby
- 23. lỗi quá tải C# cho loại chung
- 24. Làm thế nào để có một hàm có tham số chuỗi rỗng trong Go?
- 25. Go: Chức năng biến thể và quá nhiều đối số?
- 26. Thay thế cho "Tải xuống" dưới dạng động từ PowerShell?
- 27. Làm thế nào để tôi so sánh hai hàm cho bình đẳng con trỏ trong Go hàng tuần mới nhất?
- 28. Quá tải một hàm PHP gốc để mã hóa dữ liệu cho tuân thủ HIPAA
- 29. Làm thế nào có thể hữu ích khi quá tải toán tử "gọi hàm"?
- 30. Quá tải phương thức trong Objective-C?
bạn có thể cho một ví dụ cụ thể (cũng trong C#) những gì bạn muốn làm? –
'Bộ nén công cộng void (chuỗi dstFilePath, chuỗi srcFilePath, string fileName)' 'public void Compresser (chuỗi srcFilePath, string fileName)' – Coder
Có thể trùng lặp: http://stackoverflow.com/questions/2032149/optional-parameters – nemo