Pemahaman mendalam tentang penukaran jenis data dalam bahasa Go

PHPz
Lepaskan: 2023-03-30 09:29:08
asal
970 orang telah melayarinya

Dalam pengaturcaraan harian, penukaran jenis data adalah operasi penting, dan bahasa Golang juga menyediakan mekanisme penukaran jenis data yang berkuasa. Dalam artikel ini, kami akan melihat secara mendalam pada penukaran jenis data dalam bahasa Go dan beberapa senario penggunaan biasa.

1. Konsep asas penukaran jenis

Di Golang, jenis data dibahagikan kepada jenis asas dan jenis komposit. Antaranya, jenis asas termasuk integer, jenis titik terapung, jenis Boolean, jenis rentetan, jenis aksara, dll.; Apabila melakukan penukaran jenis, kita perlu menukar nilai jenis tertentu kepada nilai jenis lain Penukaran antara jenis asas adalah agak mudah, manakala penukaran jenis komposit memerlukan lebih banyak pemprosesan.

TYPES ialah salah satu jenis terbina dalam Golang, yang mewakili jenis itu sendiri. Di Golang, penukaran jenis adalah untuk menukar nilai satu jenis kepada nilai jenis lain. Ini boleh dicapai dengan pengendali penukaran jenis seperti T(x), di mana T mewakili jenis sasaran dan x mewakili nilai yang hendak ditukar.

Sebagai contoh, sintaks untuk menukar rentetan kepada integer adalah seperti berikut:

s := "123"
i, err := strconv.Atoi(s)
Salin selepas log masuk

Dalam kod di atas, fungsi strconv.Atoi() menukar nilai s jenis rentetan kepada nilai jenis integer i. Selain itu, fungsi ini juga akan menyemak sama ada format s mematuhi spesifikasi integer semasa proses penukaran Jika ia tidak mematuhi, ralat akan dikembalikan. Ini memerlukan kami mengendalikan mesej ralat dengan berhati-hati semasa melakukan operasi penukaran jenis.

2. Penukaran antara jenis asas

  1. Penukaran antara jenis integer

Di Golang, jenis integer termasuk jenis integer bertanda (int, int8, int16, int32, int64) dan integer tidak bertanda (uint, uint8, uint16, uint32, uint64). Apabila menukar antara integer, jika bilangan bit jenis sumber adalah kurang daripada atau sama dengan bilangan bit jenis sasaran, penukaran boleh dilakukan secara langsung. Contohnya, untuk menukar nilai jenis int32 kepada nilai jenis int16:

var i int32 = 100
var j int16 = int16(i)
Salin selepas log masuk

Jika bilangan bit jenis sumber lebih besar daripada bilangan bit jenis sasaran, anda perlu memutuskan cara untuk melaksanakan penukaran berdasarkan keperluan perniagaan tertentu. Biasanya, kita boleh memotong atau memodulasi nilai sumber untuk mencapai penukaran.

var i int32 = 10000
var j int16 = int16(i % (1 << 16))
Salin selepas log masuk
  1. Penukaran antara jenis titik terapung

Apabila menukar antara jenis titik terapung, anda perlu mempertimbangkan ketepatan nombor titik terapung. Biasanya, ketepatan nombor titik terapung hilang semasa proses penukaran jenis, jadi kita perlu memilih kaedah penukaran dengan munasabah.

Sebagai contoh, tukar nilai jenis float64 kepada nilai jenis float32:

var f1 float64 = 1.23456
var f2 float32 = float32(f1)
Salin selepas log masuk

Apabila melakukan penukaran jenis nombor titik terapung, kita perlu memberi perhatian kepada isu mengekalkan nombor daripada digit dan ketepatan Satu perkara adalah sangat penting untuk aplikasi kejuruteraan.

  1. Penukaran antara Boolean dan jenis rentetan

Dalam Golang, anda boleh menukar nilai Boolean kepada jenis rentetan atau nilai jenis rentetan Tukar kepada jenis boolean. Apabila melakukan jenis penukaran ini, kami boleh terus menggunakan alatan yang disediakan oleh bahasa:

var b bool = true
var s string = strconv.FormatBool(b)
var b2 bool = strconv.ParseBool(s)
Salin selepas log masuk

Fungsi ParseBool() boleh menghuraikan nilai jenis rentetan ke dalam nilai Boolean yang sepadan.

3. Penukaran antara jenis komposit

  1. Penukaran antara tatasusunan dan kepingan

Di Golang, kita boleh menukar nilai jenis tatasusunan Tukar kepada nilai jenis slice, tetapi bukan sebaliknya. Ini kerana jenis hirisan pada asasnya adalah penunjuk kepada tatasusunan, jadi jenis hirisan boleh digunakan dan bukannya jenis tatasusunan. Apabila menukar antara tatasusunan dan kepingan, kami boleh terus menggunakan alatan yang disediakan oleh bahasa Go:

a := [3]int{1, 2, 3}
s := a[:]
Salin selepas log masuk

Dalam kod di atas, kami menukar tatasusunan a menjadi nilai jenis kepingan s. Ambil perhatian bahawa penukaran ini tidak mencipta data baharu, ia hanya menukar rujukan kepada data.

  1. Penukaran antara pemetaan dan struktur

Di Golang, kita boleh menukar nilai jenis struktur kepada nilai jenis pemetaan, tetapi bukan sebaliknya. daripada. Ini kerana jenis peta pada asasnya ialah koleksi pasangan nilai kunci, manakala jenis struktur ialah set jenis data yang tersusun.

Apabila menukar antara pemetaan dan struktur, kita perlu memberi perhatian kepada kesesuaian antara elemen antara jenis pemetaan dan jenis struktur. Biasanya, kita boleh menggunakan pakej json terbina dalam di Golang untuk penukaran.

type Person struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
}
p := Person{"Tom", 18}
m, err := json.Marshal(p) // 结构体 => 映射
var p2 Person
err := json.Unmarshal(m, &p2) // 映射 => 结构体
Salin selepas log masuk

Dalam kod di atas, kami menukar nilai p jenis struktur kepada nilai m jenis pemetaan, dan kemudian menukar nilai m jenis pemetaan ini kepada nilai jenis struktur lain p2 .

4. Ringkasan

Dalam pengaturcaraan harian, kita perlu kerap melakukan operasi penukaran jenis data, dan bahasa Golang menyediakan mekanisme penukaran jenis kaya. Apabila melakukan penukaran jenis, kita perlu memberi perhatian kepada perbezaan antara jenis sumber dan jenis sasaran, dan cara menangani bilangan bit dan ketepatan. Apabila menukar jenis komposit, kita juga perlu memberi perhatian kepada korespondensi antara elemen.

Dengan pemahaman yang mendalam tentang mekanisme penukaran jenis, kami boleh memprogram dalam bahasa Golang dengan lebih fleksibel dan mengendalikan operasi jenis data biasa dengan lebih cekap.

Atas ialah kandungan terperinci Pemahaman mendalam tentang penukaran jenis data dalam bahasa Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!