国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

2.如何選擇go語言基礎類型

這篇具有很好參考價值的文章主要介紹了2.如何選擇go語言基礎類型。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄
  • 本篇前瞻
  • Leetcode習題9
    • 題目描述
    • 原題解析
    • 代碼編寫
    • 有符號整形
  • 基本數(shù)據(jù)類型
    • 整形
      • 有符號整形
      • 無符號整形
    • 浮點型
    • 布爾型
    • 字符
  • 本篇小結(jié)
  • 下一篇預告

本篇前瞻

歡迎來go語言的基礎篇,這里會幫你梳理一下go語言的基本類型,注意本篇有參考go圣經(jīng),如果你有完整學習的需求可以看一下。另外,go語言的基本類型比較簡單,介紹過程就比較粗暴,不過我們需要先從一個例題開始。

Leetcode習題9

先讓我們看下這個來自leetcode的例子,這個是一個比較好的例子,里面有一些關于整形的的知識

題目描述

9. 回文數(shù)

給你一個整數(shù) x ,如果 x 是一個回文整數(shù),返回 true ;否則,返回 false

回文數(shù)是指正序(從左向右)和倒序(從右向左)讀都是一樣的整數(shù)。

原題解析

注意原題中已經(jīng)提供了一個go語言的函數(shù)

func isPalindrome(x int) bool {
}

為了方便我們編寫代碼,我們只需要知道這個函數(shù)的輸入是x,輸出是代表是否是回文數(shù)(是:true,否:false),return能返回輸出。

解題方法:

  1. 負數(shù)必然不是回文數(shù)。

  2. 對于非負整數(shù),我們循環(huán)x除10,通過x%10獲得最低位,并且把最低位當作最高位加入到px中,得到了x的反轉(zhuǎn)過來的數(shù)px

  3. 判斷pxx是否相等就可以了。

代碼編寫

使用int32來計算px, 將如下代碼提交,不行,答案錯誤,這是因為如果x=2147483647,那么px=7463847412,超出int32的范圍了

func isPalindrome(x int) bool {
	if x < 0 {
		return false
	}

	x32 := int32(x)
	px32 := int32(x)
	for x32 != 0 {
		px32 = px32*10 + x32%10
		x32 /= 10
	}
	return px32 == int32(x)
}

那么換成int64代碼如下,提交通過了,我們花費了28ms,僅僅擊敗12%的人,時間上有問題嗎?

func isPalindrome(x int) bool {
	if (x < 0) {
		return false
	}
	x64 := int64(x)
	px64 := int64(0)
	for x64 != 0 {
		px64 = px64*10 + x64%10
		x64 /= 10
	}
	return px64 == int64(x)
}

現(xiàn)在嘗試去掉int64的強制轉(zhuǎn)化,居然通過了,只花費4ms,擊敗了97%的人,這不可思議!

func isPalindrome(x int) bool {
	if (x < 0) { 
		return false
	}
	x64 := x   //整形 
	px64 := 0
	for x64 != 0 { 
		px64 = px64*10 + x64%10 
		x64 /= 10
	}
	return px64 == x //布爾型
}

有符號整形

這種整形就是可以表示負整數(shù),0和正整數(shù)

數(shù)據(jù)類型 占用空間(bit) 長度(字節(jié)) 取值范圍
int8 8 1 -2^7 ~ 2^7-1(-128~127)
int16 16 2 -2^15 ~ 2^15-1(-32768 ~ 32767)
int32 32 4 -2^32 ~ 2^32-1(-2147483648 ~ 2147483647)
int64 64 8 -2^64 ~ 2^64-1(-9223372036854775808 ~ 9223372036854775807)
int 32或64 4或8 同int32或int64

注意:int的占用空間取決于你的操作系統(tǒng)是32位或64位

那么利用這三次提交的結(jié)果,并結(jié)合有符號整形的知識,我們可以得出:

  1. 變量強制類型轉(zhuǎn)化會耗時
  2. 編程中的變量的取值范圍很重要
  3. Leetcode的判題系統(tǒng)是64位的

基本數(shù)據(jù)類型

從上面的例題中我們能發(fā)現(xiàn)數(shù)據(jù)類型的選擇在編程過程中有著決定性的作用,雖然這很基礎,但是決定了你的編程結(jié)果是否正確,選擇合適的類型會使你編寫的程序運行速度更快,占用內(nèi)存更小。

注意:由于復數(shù)類型不常用的關系,本章節(jié)不會介紹該類型。

整形

這個不是韓國的“絕學”——整形術,整形在編程中可以表示一定范圍內(nèi)的整數(shù)

注意:int或uint的占用空間取決于你的操作系統(tǒng)是32位或64位

對于整形我們要關注的是數(shù)據(jù)類型的長度,數(shù)據(jù)范圍

代碼如下:

package main

import (
	"fmt"
	"math"
	"unsafe"
)

func main() {
	fmt.Printf("int8   length: %v range: %v ~ %v\n", unsafe.Sizeof(int8(1)), math.MinInt8, math.MaxInt8)
	fmt.Printf("int16  length: %v range: %v ~ %v\n", unsafe.Sizeof(int16(1)), math.MinInt16, math.MaxInt16)
	fmt.Printf("int32  length: %v range: %v ~ %v\n", unsafe.Sizeof(int32(1)), math.MinInt32, math.MaxInt32)
	fmt.Printf("int64  length: %v range: %v ~ %v\n", unsafe.Sizeof(int64(1)), math.MinInt64, math.MaxInt64)
	fmt.Printf("int    length: %v\n", unsafe.Sizeof(int(1)))

	fmt.Printf("uint8  length: %v range: 0 ~ %v\n", unsafe.Sizeof(uint8(1)), math.MaxUint8)
	fmt.Printf("uint16 length: %v range: 0 ~ %v\n", unsafe.Sizeof(uint16(1)), math.MaxUint16)
	fmt.Printf("uint32 length: %v range: 0 ~ %v\n", unsafe.Sizeof(uint32(1)), math.MaxUint32)
	fmt.Printf("uint64 length: %v range: 0 ~ %v\n", unsafe.Sizeof(uint64(1)), uint64(math.MaxUint64))
	fmt.Printf("uint   length: %v\n", unsafe.Sizeof(uint(1)))
}

輸出:

int8   length: 1 range: -128 ~ 127
int16  length: 2 range: -32768 ~ 32767
int32  length: 4 range: -2147483648 ~ 2147483647
int64  length: 8 range: -9223372036854775808 ~ 9223372036854775807
int    length: 8
uint8  length: 1 range: 0 ~ 255
uint16 length: 2 range: 0 ~ 65535
uint32 length: 4 range: 0 ~ 4294967295
uint64 length: 8 range: 0 ~ 18446744073709551615
uint   length: 8

有符號整形

這種整形就是可以表示負整數(shù),0和正整數(shù)

數(shù)據(jù)類型 占用空間(bit) 長度(字節(jié)) 取值范圍
int8 8 1 -2^7 ~ 2^7-1(-128~127)
int16 16 2 -2^15 ~ 2^15-1(-32768 ~ 32767)
int32 32 4 -2^32 ~ 2^32-1(-2147483648 ~ 2147483647)
int64 64 8 -2^64 ~ 2^64-1(-9223372036854775808 ~ 9223372036854775807)
int 32或64 4或8 同int32或int64

無符號整形

這種整形就是可以表示非負整數(shù)

數(shù)據(jù)類型 占用空間(bit) 長度(字節(jié)) 取值范圍
uint8 8 1 0 ~ 2^8-1(0 ~ 255)
uint16 16 2 0 ~ 2^16-1(0 ~ 65535)
uint32 32 4 0 ~ 2^32-1(0 ~ 4294967295)
uint64 64 8 0 ~ 2^64-1(0 ~ 18446744073709551615)
uint 32或64 4或8 同uint32或uint64

浮點型

浮點型在編程中可以表示一定范圍內(nèi)的實數(shù)

注意:對于浮點型我們要關注的是數(shù)據(jù)類型的長度,數(shù)據(jù)范圍,但更要關注精度。

代碼如下:

package main

import (
	"fmt"
	"math"
	"unsafe"
)

func main() {
	fmt.Printf("float32 length: %v range: %v ~ %v\n", unsafe.Sizeof(float32(1)), -math.MaxFloat32, math.MaxFloat32)
	fmt.Printf("float64 length: %v range: %v ~ %v\n", unsafe.Sizeof(float64(1)), -math.MaxFloat64, math.MaxFloat64)
	fmt.Printf("after transfer float32 %v\n", float32(1.328))
	fmt.Printf("after transfer float64 %v\n", float64(float32(1.328)))
}

輸出:

float32 length: 4 range: -3.4028234663852886e+38 ~ 3.4028234663852886e+38
float64 length: 8 range: -1.7976931348623157e+308 ~ 1.7976931348623157e+308
before transfer float32: 1.328
after  transfer float64: 1.3279999494552612

你可以看到1.328在float32強制轉(zhuǎn)化為float64反常地失去了一些精度,當然這就是為啥項目和數(shù)據(jù)庫只有高精度實數(shù)的原因,你可以想象在這種情況時使用乘法后可怕的結(jié)果。

至于這個產(chǎn)生的原因時浮點32型和浮點64型在計算機上表示方式不同,這部分內(nèi)容你可以查看《計算機程序的構造和解釋》。

列表如下:

數(shù)據(jù)類型 占用空間(bit) 長度(字節(jié)) 取值范圍
float32 32 4 -3.4028234663852886e+38 ~ 3.4028234663852886e+38
float64 64 8 -1.7976931348623157e+308 ~ 1.7976931348623157e+308

布爾型

最簡單的類型

注意:分支語句中的if后面的表達式的結(jié)果值是true或false

代碼如下:

package main

import (
	"fmt"
	"unsafe"
)

func main() {
	fmt.Printf("bool length: %v %v/%v", unsafe.Sizeof(true), 0 == 0, 0 != 0)
}

輸出:

bool length: 1 true/false

列表如下:

數(shù)據(jù)類型 占用空間(bit) 長度(字節(jié)) 取值范圍
bool 1 1 true/false

字符

注意:byte是包含ascii碼,即uint8 ,rune是可以包含utf-8的,即uint32

代碼如下:

package main

import (
	"fmt"
	"unsafe"
)

func main() {
	fmt.Printf("byte length: %v %v %c\n", unsafe.Sizeof(byte('a')),byte('a'),byte('a'))
	fmt.Printf("rune length: %v %v %c\n", unsafe.Sizeof(rune('中')),rune('中'),rune('中'))
}

輸出:

byte length: 1 97 a
rune length: 4 20013 中

列表如下:

數(shù)據(jù)類型 占用空間(bit) 長度(字節(jié)) 取值范圍
byte 8 1 0 ~ 2^8-1(0 ~ 255)
rune 32 4 0 ~ 2^32-1(0 ~ 4294967295)

本篇小結(jié)

很好,你已經(jīng)閱讀完了go的基本數(shù)據(jù)類型!看是不是簡單?學習go語言其實比較簡單,你先通過例題知道了選擇基礎數(shù)據(jù)類型的重要性,然后通過基本數(shù)據(jù)類型,你知道了每個類型都有自己的長度,取值范圍和注意點,最后相關代碼房子在go語言學習的go-base/2中,你需要編寫這些代碼來實踐一下go語言。

下一篇預告

go語言的控制結(jié)構文章來源地址http://www.zghlxwxcb.cn/news/detail-658429.html

到了這里,關于2.如何選擇go語言基礎類型的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【Go 基礎篇】Go語言字符類型:解析字符的本質(zhì)與應用

    字符類型是計算機編程中用于表示文本和字符的數(shù)據(jù)類型,是構建字符串的基本單位。在Go語言(Golang)中,字符類型具有獨特的特點和表示方式,包括Unicode編碼、字符字面值以及字符操作。本篇博客將深入探討Go語言中的字符類型,介紹字符的編碼方式、字符字面值的表示

    2024年02月13日
    瀏覽(22)
  • 【Go 基礎篇】Go語言結(jié)構體詳解:打開自定義類型的大門

    【Go 基礎篇】Go語言結(jié)構體詳解:打開自定義類型的大門

    嗨,Go語言學習者們!在編程的世界里,數(shù)據(jù)是核心,而結(jié)構體(Struct)是一種能夠幫助我們更有組織地存儲和操作數(shù)據(jù)的重要工具。在本篇博客中,我們將深入探討Go語言中結(jié)構體的概念、定義、初始化、嵌套、方法以及與面向?qū)ο缶幊痰年P系,帶你逐步領略結(jié)構體的魅力。

    2024年02月10日
    瀏覽(20)
  • 100天精通Golang(基礎入門篇)——第5天: Go語言中的數(shù)據(jù)類型學習

    100天精通Golang(基礎入門篇)——第5天: Go語言中的數(shù)據(jù)類型學習

    ?? 博主 libin9iOak帶您 Go to Golang Language.? ?? 個人主頁——libin9iOak的博客?? ?? 《面試題大全》 文章圖文并茂??生動形象??簡單易學!歡迎大家來踩踩~?? ?? 《IDEA開發(fā)秘籍》學會IDEA常用操作,工作效率翻倍~?? ?? 希望本文能夠給您帶來一定的幫助??文章粗淺,敬請批

    2024年02月08日
    瀏覽(35)
  • 【go語言基礎】go中的方法

    先思考一個問題,什么是方法,什么是函數(shù)? 方法是從屬于某個結(jié)構體或者非結(jié)構體的。在func這個和方法名中間加了一個特殊的接收器類型,這個接收器可以是結(jié)構體類型的或者是非結(jié)構體類型的。從屬的結(jié)構體獲取該方法。 函數(shù)則沒有這種從屬關系。 小結(jié): 大多

    2024年02月13日
    瀏覽(21)
  • Go語言基礎(一)

    本文檔參考golang官方文檔以及一些教程書籍,若文檔有錯誤,歡迎issue ?? https://go.dev/doc/tutorial/ 參考書籍《Go語言開發(fā)實戰(zhàn)》 Go語言是Google公司發(fā)布的一種靜態(tài)型、編譯型的開源編程語言,是新時代的 C語言 。Go語言已經(jīng)成為 云計算時代 的重要基礎編程語言。 2012年3月28日,

    2024年02月06日
    瀏覽(26)
  • Go語言基礎

    Go語言基礎

    參考書籍《Go程序設計語言》 學習Go語言基礎,并記錄相關知識和代碼。 創(chuàng)建helloworld.go 輸出命令行參數(shù) 使用range簡化 使用Join簡化 版本二,文件與命令行 go 可以方便的創(chuàng)建服務器,并且有并發(fā)性。 Go并發(fā)獲取多個URL 簡單服務器 帶有并發(fā)鎖的計數(shù)服務器 顯示相關協(xié)議與表單

    2024年02月11日
    瀏覽(19)
  • go語言基礎---8

    go語言基礎---8

    go語言標準庫內(nèi)建提供了net/http包,涵蓋了HTTP客戶端和服務端的具體實現(xiàn)。使用net/http包,我們可以很方便地編寫HTTP客戶端或服務端的程序。 ListenAndServe監(jiān)聽TCP地址addr,并且會使用handler參數(shù)調(diào)用Serve函數(shù)處理接收到的連接。handler參數(shù)一般會設為nil,此時會使用DefaultServeMux。

    2024年02月09日
    瀏覽(30)
  • Go語言基礎知識(一):基礎介紹

    Go語言基礎知識(一):基礎介紹

    Go 語言又稱 Golang,由 Google 公司于 2009 年發(fā)布,近幾年伴隨著云計算、微服務、分布式的發(fā)展而迅速崛起,躋身主流編程語言之列,和 Java 類似,它是一門靜態(tài)的、強類型的、編譯型編程語言,為并發(fā)而生,所以天生適用于并發(fā)編程(網(wǎng)絡編程)。 目前 Go 語言支持 Windows、

    2024年02月13日
    瀏覽(21)
  • Go語言基礎之切片

    Go語言基礎之切片

    切片(Slice)是一個擁有相同類型元素的可變長度的序列。它是基于數(shù)組類型做的一層封裝。它非常靈活,支持自動擴容。 切片是一個引用類型,它的內(nèi)部結(jié)構包含地址、長度和容量。切片一般用于快速地操作一塊數(shù)據(jù)集合 聲明切片類型的基本語法如下: 其中, name:表示變

    2024年02月11日
    瀏覽(27)
  • Go語言基礎快速上手

    Go語言基礎快速上手

    Go中沒有明確意思上的 enum (枚舉)定義,不過可以借用 iota 標識符實現(xiàn)一組自增常亮值來實現(xiàn)枚舉類型。 切片(slice) 本身不是動態(tài)數(shù)組或動態(tài)指針。只是它內(nèi)部采用數(shù)組存儲數(shù)據(jù),當數(shù)組長度達到數(shù)組容量時,會進行 動態(tài)擴容 。 大白話就是切片功能和Java中的List集合類似,

    2024年01月20日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包