Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Ini semua yang saya pelajari tentang Go dalam DUA Minggu!

Ini semua yang saya pelajari tentang Go dalam DUA Minggu!

Barbara Streisand
Barbara Streisandasal
2024-10-31 04:27:02767semak imbas

This is all what I

Apakah pendekatan anda apabila anda perlu mempelajari sesuatu yang baharu? Saya mempunyai yang sangat spesifik dan sekali lagi saya mengujinya semasa belajar Golang!

Terlalu banyak kandungan untuk dibincangkan, tetapi matlamat saya di sini adalah untuk menyenaraikan perkara yang saya dapati berguna dan saya secara khusus meluangkan masa untuk belajar dengan betul.

Jadual Kandungan

  • 1. Prolog
  • 2. Temui CLI
    • 2.1 CLI: pergi mod
    • 2.2 CLI: pergi lari
  • 3. Membandingkan Sintaks Berbeza
    • 3.1 Sintaks: Kelas/Struktur dan Pengkapsulan API
    • 3.2 Sintaks: Pelaksanaan Antara Muka adalah PELIK SEPERTI FUC*
  • 4. Stdlib: pastinya kit alat yang HEBAT
    • Pakej 4.1: Jenis Primitif
    • Pakej 4.2: Bahan Berguna
  • 5. Ujian dalam Go adalah MUDAH
    • Ujian 5.1: Ujian Asas
    • Ujian 5.2: Jetbrains Boilerplate
    • Ujian 5.3: Ujian Berjalan
  • 6. Berhati-hati Import Kitaran
  • 7. Tangguh ini, tangguh itu... Tapi, apa itu Tangguh?
  • 8. Pengurusan Ralat untuk Noobs
  • 9. Hasil kesimpulan: Cabaran Pengekodan Kependaman Rendah

1. Prolog

Sejak 2 minggu lepas saya telah belajar dan membina aplikasi kecil dengan Golang. Pada masa ini hampir 50j kod melalui banyak strim langsung dan agak mengagumkan untuk mempelajari sesuatu yang sebelum ini saya mempunyai beberapa isu kecil dengan bahasa.

Dalam perjalanan dua minggu ini saya telah mencipta:

  • Cangkang kecil dan BETUL-BETUL ringkas
  • Pelaksanaan Asas Redis
  • Pelaksanaan protokol HTTP 1.1
  • Pelaksanaan pelayan DNS
  • dan ujian kerja untuk syarikat yang sangat hebat (yang akan tersedia pada penghujung artikel ini).

Dan semua ini kerana bos saya meminta saya, sekali lagi, untuk mempelajari teknologi baharu untuk mengusahakan beberapa ScyllaDB PoC dan demo... Saya tidak terlalu gembira dengan keputusan itu, tetapi baiklah, itu kerja saya.

Sepanjang tahun lepas, saya telah mempelajari Rust, dan ia mungkin masih terlalu rumit bagi saya, tetapi saya telah mempelajari beberapa konsep yang sangat hebat yang menjadikan peralihan saya kepada Go berfungsi seperti daya tarikan!

Dalam artikel ini saya akan memberikan anda beberapa petua dan nasihat untuk mempercepatkan aliran pembelajaran anda.

2. Temui CLI

Saya seorang pembangun PHP dan saya sudah biasa dengan CLI TERBAIK yang pernah dibuat (ya, itu Artisan), namun sepanjang perjalanan saya sebagai pembangun, saya telah melalui projek hebat yang kebanyakannya telah..:

  • Kargo (Karat)
  • NPM (JS)
  • Komposer (PHP)
  • dan seterusnya...

Apabila saya sampai ke persekitaran Go, ia bermula sebagai masalah sebenar. Sekurang-kurangnya bagi saya, pengalaman pembangun Golang dari segi alat dan dokumentasi boleh menjadi lebih baik. Memikirkan perkara ini, saya memutuskan untuk melalui 3 perintah yang anda PERLU BELAJAR pada mulanya.

Ingat: ini hanyalah panduan dengan penjelasan saya sendiri tentang sesuatu. Jika anda mahukan maklumat terperinci, buka dokumen :)
Juga: pergi docs payah tolong seseorang letakkan penyerlah sintaks di situ

2.1 CLI: pergi mod

Bergantung pada sama ada anda ingin memodulatkan aplikasi anda atau mempunyai persekitaran yang teratur, ini akan menjadi arahan yang paling berguna pada mulanya.

Perintah mod go mengurus semua kebergantungan dalam projek anda dan juga menjaga auto-alih keluar apa-apa yang tidak digunakan lagi.

Pertama, di dalam folder kosong baharu anda, mari kita mulakan modul baharu di dalam projek dengan go mod init:

mkdir go-fodase
cd go-fodase

# go mod init <module-name>
go mod init github.com/danielhe4rt/go-fodase

Ini akan mencipta fail baharu dalam akar projek yang dipanggil go.mod, yang pada asasnya ialah kandungan pada masa ini:

  • Nama modul
  • Versi Go Anda

Ini fail, jika anda mahu menyemaknya sendiri:

# folder: ~/go-fodase
cat go.mod

# module github.com/danielhe4rt/gofodase
# 
# go 1.23.2

Selepas itu, perkara seterusnya yang saya sangat suka ialah mod go tidy, yang pada asasnya menambah sebarang kebergantungan yang hilang dan mengalih keluar yang tidak digunakan.

go mod tidy

Yang kedua ini hanya untuk mengingati anda bahawa ini wujud dan ia sangat berguna! Mungkin persekitaran anda akan menjalankannya SETIAP KALI dan anda akan terbiasa melihat import lenyap :p

2.2 CLI: pergi lari

Ini mungkin perintah paling biasa yang akan anda gunakan, kerana anda TERPAKSA menjalankan projek anda, tetapi berikut ialah cara ia berfungsi:

  • Anda harus menunjuk ke fail yang mengandungi fungsi main().
  • Fail ini tidak semestinya berada dalam akar folder anda.

Perkara yang paling penting untuk diingat tentang arahan ini ialah apabila anda menjalankan arahan go run, ia akan mencari fail go.mod dalam direktori semasa anda dan menggunakannya sebagai asas untuk memetakan keseluruhan projek anda (import, pakej , dll). Berikut ialah beberapa contoh:

# go run <your-main-file>

# Environment 1
# .
# ├── go.mod
# └── main.go
go run app.go

# Environment 2
# .
# ├── go.mod
# └── src
#     └── main.go
go run src/app.go

Ini kandungan app.go kami:

package main

import(
    "fmt"
)

func main () {
    fmt.Println("whats up! don't forget to like this article <3")
}

Kini anda tahu asas-asas untuk melaksanakan projek! Secara harfiah, hello dunia!

3. Membandingkan Sintaks Berbeza:

Masalah saya dengan Go sentiasa seperti cara ia ditulis, tetapi selepas berjam-jam pengekodan saya menyedari bahawa ia lebih mudah daripada yang saya fikirkan. Seperti yang anda duga, saya mempunyai latar belakang yang kukuh dalam PHP dan beberapa pengalaman dengan Rust.

Apabila saya mula belajar Rust pada tahun 2023, mujurlah seorang lelaki yang saya peminat tegar, Nuno Maduro (Laravel), telah menyampaikan ceramah yang dipanggil "PHP untuk Rust Developers", yang memberi saya beberapa pengenalan asas sintaks dan memberi saya sedikit ruang bernafas semasa saya benar-benar DIHENTIKAN oleh Rust.

Bagaimanapun, ia berguna kepada saya pada masa itu, jadi mengapa tidak melakukan beberapa perbandingan?

3.1 Sintaks: Kelas/Struktur dan Enkapsulasi API

Dalam OOP kami mempunyai kelas, yang merupakan cara yang sangat menarik untuk mengabstraksikan kod anda kepada kepingan kecil, dan anda mempunyai sesuatu "seperti itu". Golang boleh dilihat sebagai odyssey, kerana ia boleh menjadi perkembangan epik untuk mengubah persekitaran menjadi apa sahaja yang anda inginkan.

Ingat, Golang ialah "bahasa peringkat tinggi" yang menyediakan sintaks "peringkat sistem" yang membolehkan anda bekerja dengan mudah dengan pelaksanaan "peringkat rendah".

Di bawah sintaks Go, anda boleh

  • [Struct] Takrifkan struct dengan memberi awalan dengan jenis, menambah nama "class/struct" anda dan kemudian menambah akhiran struct.
  • [Encapsulation] Takrifkan pendedahan elemen berkaitan kelas/struktur anda dengan memulakannya dengan nama UpperCase atau LowerCase.
    • [Keterlihatan: "awam"]: Tetapkan nama item kepada huruf besar.
    • [Keterlihatan: "peribadi/dilindungi"]: Tetapkan nama item dalam huruf kecil.

Dan anda boleh menggunakannya untuk: Structs, Struct Fields, Struct Methods. Lihat lebih dekat:

mkdir go-fodase
cd go-fodase

# go mod init <module-name>
go mod init github.com/danielhe4rt/go-fodase

Dalam Rust, anda mempunyai pendekatan yang lebih eksplisit (lebih oop seperti bahasa) di mana:

  • [Struct] Takrifkan struct menggunakan struct awalan, menambah nama "Kelas/Struktur" anda dan itu sahaja.
  • [Encapsulation] Jika anda ingin sesuatu didedahkan kepada "peti" lain, anda harus menambah awalan pub di bahagian kod yang ingin anda dedahkan.
# folder: ~/go-fodase
cat go.mod

# module github.com/danielhe4rt/gofodase
# 
# go 1.23.2

Saya ingin membuat perkara yang jelas seperti PHP, Java dan sebagainya tetapi jika anda berhenti berfikir adalah KURANG KOD untuk menulis, tetapi ia juga memberi kesan kepada kebolehbacaan.

3.2 Sintaks: Pelaksanaan Antara Muka adalah PELIK SEPERTI FUC*

Sejujurnya, saya jenis orang yang akan cuba meletakkan, saya tidak tahu... LARAVEL dalam Go Environment, tetapi itu sudah dilakukan di Goravel. Bagaimanapun, saya sangat menyukai idea untuk bekerja dengan "Pembangunan Dipacu Antara Muka/Kontrak", dan buat pertama kalinya saya terjebak dengannya dalam bahasa.

Dalam Go, antara muka tidak "dilaksanakan" dalam struktur/kelas, dan bagi lelaki OOP seperti saya, sungguh gila untuk mempunyai keputusan reka bentuk sedemikian sesuai dengan fikiran saya. Sila lihat apa yang diharapkan:

mkdir go-fodase
cd go-fodase

# go mod init <module-name>
go mod init github.com/danielhe4rt/go-fodase

Sekarang, apabila tiba masanya: anda tidak mempunyai pelaksanaan eksplisit "antara muka" ini di dalam struktur, dan itu, hmm... pelik? Sebaliknya, anda hanya melaksanakan kaedah antara muka yang diperlukan, yang pergi akan menyemak anda pada masa penyusunan. Adalah wajar untuk mengetahui bahawa ini adalah bahasa yang disusun dan ia tidak sepatutnya menjadi masalah, tetapi saya bercakap tentang perspektif saya dengan Pengalaman Pembangun!

# folder: ~/go-fodase
cat go.mod

# module github.com/danielhe4rt/gofodase
# 
# go 1.23.2

Walau bagaimanapun, dengan sedikit masa pengekodan dalam bahasa anda akan terbiasa dengannya. Sekarang, mari kita bincangkan tentang perkara yang ditawarkan oleh persekitaran asas kepada anda tanpa memuat turun apa-apa!

4. Stdlib: pastinya kit alat yang HEBAT

Sekarang saya bercakap tentang semua yang Go berikan kepada anda dengan Perpustakaan Standard, tanpa memuat turun pakej pihak ketiga. Berikut ialah beberapa garis masa kronologi untuk anda:

  • Hari pertama: APA? KENAPA TIDAK SUKA JS/Java DALAM PERKARA YANG JENISNYA MEMBAWA SEMUA KAEDAH? (Dan saya benci kedua-duanya)
  • Minggu pertama: Tunggu, mungkin itu bagus (selepas memahami pakej untuk jenis primitif)
  • Minggu ke-2: APA? KENAPA BAHASA LAIN TIDAK MEMPUNYAI PERPUSTAKAAN YANG BAIK SEPERTI LALAI?

Saya tidak bergurau tentang itu, setiap hari saya meneroka pergi, saya menemui beberapa perpustakaan yang menarik di bawah perpustakaan standard. Jadi, mari kita mula bercakap tentang jenis primitif.

4.1 Pakej: Jenis Primitif

Seperti PHP dan tidak seperti banyak bahasa lain (Rust, Java, JS, dll), Golang memerlukan fungsi "helper" untuk melaksanakan kebanyakan operasi jenis yang berkaitan . Kita boleh menganggapnya sebagai jenis "anemia", kerana mereka tidak mempunyai "utiliti" yang melekat padanya.

go mod tidy

Jadi, jika anda menggunakan jenis "String", anda mempunyai pakej lain seperti strconv atau rentetan untuk memanipulasinya! Tetapi inilah peraturan emas untuk tidak melupakan pakej yang hendak dilihat: jika jenis anda ialah rentetan, cari pakej yang sama dengan nama yang dijamak!

Ringkasnya, ini akan memberikan anda fungsi yang berkaitan dengan []Jenis dan Jenis:

  • Jenis rentetan -> import ("rentetan") untuk operasi seperti: Mengandungi(), Upper(), Split() ...
  • Jenis bait -> import ("bait") untuk operasi seperti Include(), Compare(), Split() ...
  • dan seterusnya!

Lihat kod, supaya anda boleh mengesahkan sendiri:

# go run <your-main-file>

# Environment 1
# .
# ├── go.mod
# └── main.go
go run app.go

# Environment 2
# .
# ├── go.mod
# └── src
#     └── main.go
go run src/app.go

Itu sepatutnya mudah, tetapi saya bergelut dengan itu untuk seketika sehingga masuk ke dalam kepala saya. Mungkin menggunakan Laravel dan fungsi pembantu mereka selama terlalu banyak tahun membuatkan saya lupa betapa sukarnya untuk mengekod tanpa Rangka Kerja :D

4.2 Pakej: Bahan Berguna

Semasa saya meneroka alatan dan projek, saya mendapat pengenalan yang sangat baik kepada banyak projek dan saya ingin menyenaraikan setiap satu daripadanya dan lib yang saya gunakan:

  • Bina Cabaran Shell anda sendiri:
    • pakej:
      • fmt: Pustaka I/O (Imbas/Baca dan Tulis bahan pada skrin anda)
      • os: fungsi dan pembantu yang bercakap terus dengan Sistem Operasi anda.
      • strconv: hantar jenis data tertentu kepada rentetan atau hantar rentetan kepada mana-mana jenis yang ditentukan.
  • Bina Cabaran Pelayan (HTTP|DNS) anda sendiri:
    • pakej:
      • net: lapisan integrasi dengan protokol I/O rangkaian seperti HTTP, TCP, UDP dan Soket Domain Unix
      • [pakej sebelumnya...]
  • Tugas Tugasan Kerja Rumah Peringkat Pertengahan?
    • pakej:
      • bendera: Menangkap hujah CLI anda ke dalam pembolehubah
      • log: Menambah saluran Log pada aplikasi anda
      • crypto/rand: Penjana Rawak Kriptografi Selamat
      • matematik/rand: Penjana Rawak Nombor Matematik
      • masa: Tempoh/Masa Lib

Berikut ialah paparan boleh tatal bagi semua pelaksanaan pakej supaya anda boleh menyemaknya. Terdapat BANYAK pakej std yang menarik yang boleh dirujuk di sini.

PERHATIAN: itu BANYAK KOD! :p
Jangan lupa komen ciri kegemaran anda (selain goroutine dan saluran) :p

mkdir go-fodase
cd go-fodase

# go mod init <module-name>
go mod init github.com/danielhe4rt/go-fodase

Serius, itu sangat menakjubkan! Jadi, mari teruskan ujian sekarang.

5. Ujian dalam Go adalah MUDAH

Dalam projek kedua saya menggunakan Go, saya melihat peluang untuk mempelajari ujian sambil mencipta objek Permintaan dan Respons. Di dalam persekitaran PHP, anda mungkin menggunakan perpustakaan pihak ke-3 seperti PHPUnit atau Pest. Betul ke? Di dalam persekitaran Go, ini MUDAH! Apa yang anda perlu lakukan ialah:

  • Buat fail di dalam pakej: Secara peribadi.go anda akan menulis fungsi yang ingin anda uji;
  • Buat fail ujian untuk pakej anda :** buat fail bernama person_test.go dan mula menulis ujian anda sendiri!

Katakanlah kami mempunyai requests.go dan requests_test.go dalam folder pakej kami, di mana requests.go ialah:

# folder: ~/go-fodase
cat go.mod

# module github.com/danielhe4rt/gofodase
# 
# go 1.23.2

5.1 Ujian: Ujian Asas

Ujian dalam Go dianggap LULUS (hijau) jika (t *Ujian.T).Errorf() tidak dipanggil dalam fungsi ujian anda. Ia juga mengikut konsep enkapsulasi yang sama yang diperkenalkan sebelum ini:

  • Fungsi Ujian bermula dengan huruf besar dikenal pasti oleh Pelari Ujian
  • Fungsi Ujian bermula dengan huruf kecil diabaikan (biasanya fungsi pembantu)
mkdir go-fodase
cd go-fodase

# go mod init <module-name>
go mod init github.com/danielhe4rt/go-fodase

Anda boleh melakukan fungsi pembantu anda sendiri untuk menguji. Cuma pastikan anda tidak menceroboh domain modul pada ujian ini!

5.2 Ujian: Jetbrains Boilerplate

Saya telah menggunakan Goland sejak hari pertama, jadi kebanyakan perkara menjadi lebih mudah untuk saya. Jadi setiap kali saya memulakan ujian baharu, saya mendapat boilerplate ini dengan struktur ujian Unity yang berjalan secara selari (goroutine) secara lalai.

# folder: ~/go-fodase
cat go.mod

# module github.com/danielhe4rt/gofodase
# 
# go 1.23.2

5.3 Ujian: Ujian Larian

Ok, sekarang kita tahu betapa mudahnya untuk menulis ujian dalam Go, tetapi bagaimana pula dengan menjalankannya? Tugas mudah! Apa yang anda perlu lakukan ialah menavigasi ke folder pakej dan jalankan:

go mod tidy

Sila tulis beberapa ujian untuk barangan anda. Tak susah pun kalau decouple apa yang perlu :p

6. Berhati-hati Import Kitaran

Selama beberapa tahun pembangunan saya yang lalu, saya sentiasa cuba memodulasi semua projek saya dengan cara yang sesuai dengan keperluan saya, tanpa terperangkap pada barangan "Clean Arch" atau "Reka Bentuk Didorong Domain" . Walau bagaimanapun, dalam percubaan pertama saya untuk membahagikan pakej saya, saya mendapat ralat "Import Kitaran" dan terfikir sendiri: BERAPA LAMA SEJAK SAYA TELAH MELIHAT SESUATU YANG SEPERTI ITU?

Sepanjang 2 tahun saya dalam PHP, saya mengalami masalah yang sama dengan import neraka, di mana anda tidak boleh tidak mengimport fail yang sama DUA KALI dalam aliran tertentu. Ini sebelum saya bertemu PSR-4 (Autoloading) (yang mengubah hari PHP saya selama-lamanya!!) dan sekarang, bertahun-tahun yang lalu, saya bergelut dengan perkara ini dalam Go.

Mari kita pertimbangkan senario import kitaran:

# go run <your-main-file>

# Environment 1
# .
# ├── go.mod
# └── main.go
go run app.go

# Environment 2
# .
# ├── go.mod
# └── src
#     └── main.go
go run src/app.go

Apabila anda cuba menyusun sesuatu yang menandakan Import Kitaran dalam Go, anda akan menerima ralat seperti:

package main

import(
    "fmt"
)

func main () {
    fmt.Println("whats up! don't forget to like this article <3")
}

Dan pada masa ini, anda perlu mula memecahkan kebergantungan/pakej anda untuk mengelakkannya.

TLDR: jangan import pakej yang sama di tempat yang akan dimuatkan berkali-kali.

7. Tangguh ini, tangguh itu... Tetapi, apakah itu Tangguh?

Saya tidak mencarinya, tetapi ini adalah kali pertama saya melihat perkataan terpelihara menangguhkan dalam bahasa pengaturcaraan. Dan kerana ia bukan sebahagian daripada "perkataan simpanan generik", saya mengabaikannya selama seminggu!

Kemudian salah seorang rakan kerja saya, Dusan, memberi saya pelajaran pengurusan ingatan dalam Go selepas melihat saya bergelut dengan bahasa itu selama beberapa jam. (Ya, ini adalah jeritan :p)

Perkaranya ialah: setiap kali anda membuka penimbal/sambungan kepada sesuatu, anda HARUS MENUTUPNYA! Saya masih ingat semasa saya bekerja dengan pelayan MapleStory (Java) pada tahun 2014, masalah yang paling biasa ialah kebocoran memori, semata-mata kerana pembangun tidak menutup sambungan ke DB.

Ini OK untuk LUPA! Tetapi tidak boleh lulus dalam Semakan Kod LOL

Berikut ialah contoh dalam Java:

mkdir go-fodase
cd go-fodase

# go mod init <module-name>
go mod init github.com/danielhe4rt/go-fodase

Semasa mengekodkan Golang, mereka memberikan atribut tangguh ini untuk anda ingat untuk menutup barangan anda sejurus selepas membukanya.

Defer bermaksud "Deference" iaitu satu cara untuk "Bersih" sumber anda selepas pelaksanaan bahagian tertentu kod itu tamat.

# folder: ~/go-fodase
cat go.mod

# module github.com/danielhe4rt/gofodase
# 
# go 1.23.2

Anda juga boleh mempunyai banyak penangguhan dalam satu fungsi dan TANGGUH ORDER penting! Jika anda menangguhkan pangkalan data2 dan kemudian menangguhkan pangkalan data1, kedua-dua proses akan dibersihkan dalam susunan yang sama.

go mod tidy

Ini adalah cara yang sangat mudah untuk tidak mengarut menghalang projek anda daripada mengalami kebocoran memori. Sila ingat untuk menggunakannya apabila anda menstrim apa-apa.

8. Pengurusan Ralat untuk Noobs

Pengendalian ralat pada mulanya adalah seperti: semak sama ada fungsi yang anda gunakan mengembalikan jenis ralat dan sahkannya SETIAP FUCKING MASA! Berikut ialah contoh perkara yang saya bincangkan:

# go run <your-main-file>

# Environment 1
# .
# ├── go.mod
# └── main.go
go run app.go

# Environment 2
# .
# ├── go.mod
# └── src
#     └── main.go
go run src/app.go

Sejujurnya, saya BENCI sintaks ini. Walau bagaimanapun, ia adalah sebahagian daripada bahasa dan akan menjadi sesuatu yang anda akan temui semasa pengekodan anda.

Fungsi dengan ralat boleh mengembalikan ralat atau (T, ralat), dan mujurlah Go tidak akan membiarkan anda melupakannya.

package main

import(
    "fmt"
)

func main () {
    fmt.Println("whats up! don't forget to like this article <3")
}

Spam kod anda dengan err != nil dan anda akan baik-baik saja, saya janji! :D

9. Kesimpulan pencapaian: Cabaran Pengekodan Kependaman Rendah

Selain daripada semua tekanan dan masa yang dihabiskan untuk memahami alam sekitar, adalah satu cabaran yang menarik untuk mempelajari bahasa baharu bersama penonton Twitch saya. Ramai daripada mereka telah lama meminta saya untuk menyemaknya dan inilah kami.

Semua perkara ini menggambarkan pengalaman perkembangan peribadi saya dengan bahasa itu, dan matlamatnya adalah untuk berkongsi perkara yang telah saya lalui selama 2 minggu mempelajarinya.

9.1 Bonus: Cabaran Pengekodan

Baru-baru ini saya telah dicabar oleh rakan sepasukan saya untuk menyelesaikan cabaran ScyllaDB dan ia banyak mengajar saya tentang keselarian, kumpulan dan pengehadan kadar. Ini adalah jenis cabaran yang dihadapi oleh banyak syarikat untuk menjadikan produk mereka berprestasi lebih baik!

Matlamat cabaran adalah untuk mencipta aplikasi baris arahan kecil Go yang memasukkan beberapa data rawak ke dalam ScyllaDB sambil menilai mengehadkan bilangan permintaan.

Anda boleh menemui cabaran repositori di sini: github.com/basementdevs/throttling-requests-scylla-test. Kami juga mengambil pekerja! Anda boleh mencari jawatan terbuka di bahagian kerjaya kami!

Terima kasih kerana membaca! Saya harap artikel ini telah memberikan pandangan yang berharga untuk mempelajari Golang. Jangan ragu untuk berkongsi pendapat atau pengalaman anda.

Atas ialah kandungan terperinci Ini semua yang saya pelajari tentang Go dalam DUA Minggu!. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn