de-vraag
  • Pertanyaan
  • Tag
  • Pengguna
Notifikasi
Imbalan
Registrasi
Setelah Anda mendaftar, Anda akan diberitahu tentang balasan dan komentar untuk pertanyaan Anda.
Gabung
Jika Anda sudah memiliki akun, masuk untuk memeriksa pemberitahuan baru.
Akan ada hadiah untuk pertanyaan, jawaban, dan komentar tambahan.
Lebih
Sumber
Sunting
 denniss
denniss
Question

Nilai Default di Go's metode

Apakah ada cara untuk menentukan nilai default di Go's fungsi? Saya mencoba untuk menemukan hal ini di dokumentasi tapi aku bisa't menemukan apa-apa yang menentukan bahwa ini adalah mungkin.

func SaySomething(i string = "Hello")(string){
...
}
60 2013-10-26T22:10:17+00:00 3
Pemrograman
go
 headmaster
headmaster
14 Mei 2014 в 9:13
2014-05-14T09:13:25+00:00
Lebih
Sumber
Sunting
#22630764

TIDAK,tapi ada beberapa pilihan lain untuk melaksanakan nilai default. Ada beberapa baik posting blog pada subjek, tapi di sini ada beberapa contoh-contoh spesifik.


Opsi 1: pemanggil memilih untuk menggunakan nilai default

// Both parameters are optional, use empty string for default value
func Concat1(a string, b int) string {
  if a == "" {
    a = "default-a"
  }
  if b == 0 {
    b = 5
  }

  return fmt.Sprintf("%s%d", a, b)
}


Pilihan 2: satu parameter opsional pada akhir

// a is required, b is optional.
// Only the first value in b_optional will be used.
func Concat2(a string, b_optional ...int) string {
  b := 5
  if len(b_optional) > 0 {
    b = b_optional[0]
  }

  return fmt.Sprintf("%s%d", a, b)
}


Opsi 3: konfigurasi struct

// A declarative default value syntax
// Empty values will be replaced with defaults
type Parameters struct {
  A string `default:"default-a"` // this only works with strings
  B string // default is 5
}

func Concat3(prm Parameters) string {
  typ := reflect.TypeOf(prm)

  if prm.A == "" {
    f, _ := typ.FieldByName("A")
    prm.A = f.Tag.Get("default")
  }

  if prm.B == 0 {
    prm.B = 5
  }

  return fmt.Sprintf("%s%d", prm.A, prm.B)
}


Pilihan 4: Penuh variadic argumen parsing (javascript style)

func Concat4(args ...interface{}) string {
  a := "default-a"
  b := 5

  for _, arg := range args {
    switch t := arg.(type) {
      case string:
        a = t
      case int:
        b = t
      default:
        panic("Unknown argument")
    }
  }

  return fmt.Sprintf("%s%d", a, b)
}
 Nemoden
Nemoden
Jawaban edit 7 September 2018 в 7:16
79
0
Solution / Answer
 sdanzig
sdanzig
26 Oktober 2013 в 10:43
2013-10-26T22:43:44+00:00
Lebih
Sumber
Sunting
#22630763

Tidak, kekuatan yang ada di Google memilih untuk tidak mendukung itu.

https://groups.google.com/forum/#!topik/golang-kacang-kacangan/-5MCaivW0qQ

45
0
 Dave
Dave
14 September 2017 в 3:08
2017-09-14T15:08:16+00:00
Lebih
Sumber
Sunting
#22630765

Tidak, tidak ada cara untuk menentukan default. Saya percaya hal ini dilakukan dengan tujuan untuk meningkatkan keterbacaan, pada biaya sedikit lebih banyak waktu (dan, mudah-mudahan, pikiran) pada penulis's end.

Saya pikir pendekatan yang tepat untuk memiliki "default" adalah untuk memiliki fungsi baru yang persediaan yang default ke yang lebih umum fungsi. Setelah ini, kode anda menjadi lebih jelas pada niat anda. Misalnya:

func SaySomething(say string) {
    // All the complicated bits involved in saying something
}

func SayHello() {
    SaySomething("Hello")
}

Dengan sedikit usaha, saya dibuat fungsi yang melakukan hal yang umum dan digunakan kembali fungsi generik. Anda dapat melihat ini di berbagai perpustakaan, fmt.Println misalnya hanya menambahkan baris baru pada apa yang fmt.Cetak jika tidak akan dilakukan. Ketika membaca seseorang's kode, namun, jelas apa yang mereka berniat untuk melakukan dengan fungsi yang mereka sebut. Dengan nilai-nilai default, I won't tahu apa yang seharusnya terjadi tanpa juga akan fungsi untuk referensi apa default nilai sebenarnya.

6
0
Tambahkan pertanyaan
Kategori
Semua
Teknologi
Budaya / Rekreasi
Kehidupan / Seni
Ilmu Pengetahuan
Profesional
Bisnis
Pengguna
Semua
Baru
Populer
1
Asilbek Qadamboyev
Terdaftar 2 hari yang lalu
2
Akshit Mehta
Terdaftar 4 hari yang lalu
3
me you
Terdaftar 1 minggu yang lalu
4
Никита иванов
Terdaftar 1 minggu yang lalu
5
Alex1976G_06
Terdaftar 1 minggu yang lalu
ID
JA
KO
RU
© de-vraag 2022
Sumber
stackoverflow.com
di bawah lisensi cc by-sa 3.0 dengan atribusi