Saat Anda sudah yakin bahwa API dari modul Anda stabil, Anda dapat merilis
v1.0.0.
Versi mayor v1 memberitahu pengguna bahwa tidak akan ada perubahan yang
mempengaruhi kompatibilitas akan terjadi pada modul API.
Mereka dapat meng-upgrade ke rilis MINOR dan PATCH dari v1, dan kode mereka
seharusnya tetap akan berjalan dan dapat dibangun dengan benar.
Fungsi dan method tidak akan berubah, tipe-tipe yang diekspor tidak akan
dihapus, dan seterusnya.
Jika ada perubahan pada API, perubahan tersebut akan tetap menjaga
kompatibilitas (misalnya, menambahkan field baru ke dalam sebuah struct) dan
akan dimasukan sebagai rilis minor yang baru.
Jika ada satu atau lebih bug (misalnya, perbaikan keamanan), mereka akan
diikutkan pada rilis PATCH (atau sebagai bagian dari rilis minor).
Terkadang, menjaga kompatibilitas bisa menyebabkan API yang aneh.
Hal ini wajar.
API yang tidak sempurna lebih baik daripada merusak kode pengguna yang sudah
ada.
Paket "strings" pada pustaka bawaan adalah sebuah contoh menjaga
kompatibilitas dengan biaya konsistensi dari API.
-
Split membagi sebuah string menjadi
sub-string yang dipisahkan oleh sebuah pemisah dan mengembalikan sebuah
slice dari sub-string di antara pemisah tersebut.
-
SplitN dapat mengontrol jumlah
sub-string yang dikembalikan.
Namun, Replace menerima nilai berapa
banyak jumlah string yang akan diganti dari awal (tidak seperti "Split").
Dari "Split" dan "SplitN", Anda akan berharap bahwa ada fungsi seperti
"Replace" dan "ReplaceN".
Namun, kita tidak dapat mengubah fungsi "Replace" yang sudah ada tanpa
mengakibatkan kerusakan pada pemanggilan, yang mana hal tersebut telah kita
janjikan tidak akan dilakukan.
Sehingga, dalam Go 1.12, kami menambahkan fungsi baru,
ReplaceAll.
Hasil dari API sedikit aneh, secara "Split" dan "Replace" memiliki perilaku
yang berbeda, namun ketidak-konsistenan ini lebih baik daripada perubahan
yang merusak.
Katakanlah Anda senang dengan API dari "example.com/hello" dan Anda ingin
merilis v1 sebagai versi stabil yang pertama.
Memberi tag v1 menggunakan proses yang sama dengan memberi tag v0: jalankan
"go mod tidy" dan "go test ./…", beri versi tag, dan simpan ke repositori
"origin":
$ go mod tidy
$ go test ./...
ok example.com/hello 0.015s
$ git add go.mod go.sum hello.go hello_test.go
$ git commit -m "hello: changes for v1.0.0"
$ git tag v1.0.0
$ git push origin v1.0.0
$
Pada saat ini, v1 dari API "example.com/hello" telah dibekukan.
Hal ini memberitahu semua orang bahwa API kita telah stabil dan mereka merasa
nyaman menggunakannya.