go語言整數(shù)轉(zhuǎn)字節(jié)數(shù)組 golang整數(shù)轉(zhuǎn)二進制

go的uint64轉(zhuǎn)換成java的哪種類型

Golang 和java/c不同,Go在不同類型的變量之間賦值時需要顯式轉(zhuǎn)換。也就是說Golang中數(shù)據(jù)類型不能自動轉(zhuǎn)換。

創(chuàng)新互聯(lián)主營古交網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,app軟件開發(fā),古交h5小程序制作搭建,古交網(wǎng)站營銷推廣歡迎古交等地區(qū)企業(yè)咨詢

基本語法

表達式T(v))將值v 轉(zhuǎn)換為類型T

T∶就是數(shù)據(jù)類型,比如int32,int64,float32等等

v∶ 就是需要轉(zhuǎn)換的變量

var i int = 100

var b float64 = float64(i)

var c int64 = int64(b)

fmt.Printf("b=%f,c=%d",b,c)

b=100.000000,c=100

登錄后復制

細節(jié)說明

1)Go中,數(shù)據(jù)類型的轉(zhuǎn)換可以是從表示范圍小-表示范圍大,也可以范圍大一范圍小

2) 被轉(zhuǎn)換的是變量存儲的數(shù)據(jù)(即值),變量本身的數(shù)據(jù)類型并沒有變化!

3) 在轉(zhuǎn)換中,比如將 int64 轉(zhuǎn)成int8,編譯時不會報錯,只是轉(zhuǎn)換的結(jié)果是按溢出處理,和

我們希望的結(jié)果不一樣。(在轉(zhuǎn)換的時候需要注意范圍)

var a int64 = 10000000

var b int8 = int8(a)

fmt.Printf("%d",b)

-128

登錄后復制

可以看到在轉(zhuǎn)換的時候,一定要保證轉(zhuǎn)換大數(shù)據(jù)要是對方可以接受的范圍。

n1類型是int32,那么?20整個就是int32類型,可是n2是int64,這樣就會編譯錯誤。

題二n4是12 + 127溢出超過了范圍,運行的時候按照溢出處理。n3是直接編譯不通過,128已經(jīng)超過了int8類型的范圍

基本數(shù)據(jù)類型和string的轉(zhuǎn)換

字符串格式化

Go語言用于控制文本輸出常用的標準庫是fmt

fmt中主要用于輸出的函數(shù)有:

Print: 輸出到控制臺,不接受任何格式化操作

Println: 輸出到控制臺并換行

Printf : 只可以打印出格式化的字符串。只可以直接輸出字符串類型的變量(不可以輸出別的類型)

Sprintf:格式化并返回一個字符串而不帶任何輸出

Fprintf:來格式化并輸出到 io.Writers 而不是 os.Stdout

整數(shù)類型

格 式 描 述

%b 整型以二進制方式顯示

%o 整型以八進制方式顯示

%d 整型以十進制方式顯示

%x 整型以十六進制方式顯示

%X 整型以十六進制、字母大寫方式顯示

%c 相應Unicode碼點所表示的字符

%U Unicode 字符, Unicode格式:123,等同于 "U+007B"

浮點數(shù)

格 式 描 述

%e 科學計數(shù)法,例如 -1234.456e+78

%E 科學計數(shù)法,例如 -1234.456E+78

%f 有小數(shù)點而無指數(shù),例如 123.456

%g 根據(jù)情況選擇 %e 或 %f 以產(chǎn)生更緊湊的(無末尾的0)輸出

%G 根據(jù)情況選擇 %E 或 %f 以產(chǎn)生更緊湊的(無末尾的0)輸出

布爾

格 式 描 述

%t true 或 false

字符串

格 式 描 述

%s 字符串或切片的無解譯字節(jié)

%q 雙引號圍繞的字符串,由Go語法安全地轉(zhuǎn)義

%x 十六進制,小寫字母,每字節(jié)兩個字符

%X 十六進制,大寫字母,每字節(jié)兩個字符

指針

格 式 描 述

%p 十六進制表示,前綴 0x

var num1 int64 = 99

var num2 float64 = 23.99

var b bool = true

var mychar byte = 'h'

str1 := fmt.Sprintf("%d",num1)

str2 := fmt.Sprintf("%f",num2)

bool1 := fmt.Sprintf("%t",b)

mychar1 := fmt.Sprintf("%c",mychar)

fmt.Printf("%T,%T,%T,str1=%v,str2=%v,bool1=%v,mychar1=%v",str1,bool1,str2,str1,str2,bool1,mychar1)

string,string,string,string,str1=99,str2=23.990000,bool1=true,mychar1=h

登錄后復制

?

使用strconv包 基本類型 - string類型

num1 := 99

str1 := strconv.FormatInt(int64(num1),10)

fmt.Printf("%T,%v",str1,str1)

num2 := 99.99

str2 := strconv.FormatFloat(num2,'f',10,64)

fmt.Printf("%T,%v\n",str2,str2)

登錄后復制

strconv包提供了字符串與簡單數(shù)據(jù)類型之間的類型轉(zhuǎn)換功能,可以將簡單類型轉(zhuǎn)換為字符串,也可以將字符串轉(zhuǎn)換為其它簡單類型

string和int轉(zhuǎn)換

int轉(zhuǎn)string的方法是: Itoa()

str := strconv.Itoa(100)

fmt.Printf("type %v, value: %s\n", reflect.TypeOf(str), str)

登錄后復制

2.string轉(zhuǎn)int的方法是:

i, err := strconv.Atoi("100")

fmt.Printf("type %v, value: %d, err: %v\n", reflect.TypeOf(i), i, err)

登錄后復制

并不是所有string都能轉(zhuǎn)化為int, 所以可能會報錯:

i, err := strconv.Atoi("100x")

fmt.Printf("type %v, value: %d, err: %v\n", reflect.TypeOf(i), i, err)

登錄后復制

使用strconv包 string轉(zhuǎn)其他類型

strconv包提供的Parse類函數(shù)用于將字符串轉(zhuǎn)化為給定類型的值:ParseBool()、ParseFloat()、ParseInt()、ParseUint() 由于字符串轉(zhuǎn)換為其它類型可能會失敗,所以這些函數(shù)都有兩個返回值,第一個返回值保存轉(zhuǎn)換后的值,第二個返回值判斷是否轉(zhuǎn)換成功。

1.轉(zhuǎn)bool

b, err := strconv.ParseBool("true")

fmt.Println(b, err)

登錄后復制

2.轉(zhuǎn)float

f1, err := strconv.ParseFloat("3.1", 32)

fmt.Println(f1, err)

f2, err := strconv.ParseFloat("3.1", 64)

fmt.Println(f2, err)

登錄后復制

由于浮點數(shù)的小數(shù)部分 并不是所有小數(shù)都能在計算機中精確的表示, 這就造成了浮點數(shù)精度問題, 比如下面

var n float64 = 0

for i := 0; i 1000; i++ {

n += .01

}

fmt.Println(n)

關(guān)于浮點數(shù)精度問題: c計算機不都是0101嗎,你有想過計算機是怎么表示的小數(shù)嗎, 簡單理解就是:

將其整數(shù)部分與小樹部分分開, 比如5.25

對于整數(shù)部分 5 ,我們使用"不斷除以2取余數(shù)"的方法,得到 101

對于小數(shù)部分 .25 ,我們使用"不斷乘以2取整數(shù)"的方法,得到 .01

聽說有一個包可以解決這個問題: github.com/shopspring/decimal

3.轉(zhuǎn)int

func ParseInt(s string, base int, bitSize int) (i int64, err error)

base: 進制,有效值為0、2-36。當base=0的時候,表示根據(jù)string的前綴來判斷以什么進制去解析:0x開頭的以16進制的方式去解析,0開頭的以8進制方式去解析,其它的以10進制方式解析

bitSize: 多少位,有效值為0、8、16、32、64。當bitSize=0的時候,表示轉(zhuǎn)換為int或uint類型。例如bitSize=8表示轉(zhuǎn)換后的值的類型為int8或uint8

fmt.Println(bInt8(-1)) // 0000 0001(原碼) - 1111 1110(反碼) - 1111 1111

// Parse 二進制字符串

i, err := strconv.ParseInt("11111111", 2, 16)

fmt.Println(i, err)

// Parse 十進制字符串

i, err = strconv.ParseInt("255", 10, 16)

fmt.Println(i, err)

// Parse 十六進制字符串

i, err = strconv.ParseInt("4E2D", 16, 16)

fmt.Println(i, err)

4.轉(zhuǎn)uint

func ParseUint(s string, base int, bitSize int) (uint64, error)

用法和轉(zhuǎn)int一樣, 只是轉(zhuǎn)換后的數(shù)據(jù)類型是uint64

u, err := strconv.ParseUint("11111111", 2, 16)

fmt.Println(u, err)

u, err = strconv.ParseUint("255", 10, 16)

fmt.Println(u, err)

u, err = strconv.ParseUint("4E2D", 16, 16)

fmt.Println(u, err)

其他類型轉(zhuǎn)string

將給定類型格式化為string類型:FormatBool()、FormatFloat()、FormatInt()、FormatUint()。

fmt.Println(strconv.FormatBool(true))

// 問題又來了

fmt.Println(strconv.FormatInt(255, 2))

fmt.Println(strconv.FormatInt(255, 10))

fmt.Println(strconv.FormatInt(255, 16))

fmt.Println(strconv.FormatUint(255, 2))

fmt.Println(strconv.FormatUint(255, 10))

fmt.Println(strconv.FormatUint(255, 16))

fmt.Println(strconv.FormatFloat(3.1415, 'E', -1, 64))

func FormatFloat(f float64, fmt byte, prec, bitSize int) string

bitSize表示f的來源類型(32:float32、64:float64),會據(jù)此進行舍入。

fmt表示格式:'f'(-ddd.dddd)、'b'(-ddddp±ddd,指數(shù)為二進制)、'e'(-d.dddde±dd,十進制指數(shù))、'E'(-d.ddddE±dd,十進制指數(shù))、'g'(指數(shù)很大時用'e'格式,否則'f'格式)、'G'(指數(shù)很大時用'E'格式,否則'f'格式)。

prec控制精度(排除指數(shù)部分):對'f'、'e'、'E',它表示小數(shù)點后的數(shù)字個數(shù);對'g'、'G',它控制總的數(shù)字個數(shù)。如果prec 為-1,則代表使用最少數(shù)量的、但又必需的數(shù)字來表示f。

關(guān)于GO 語言的入門學習 求解答

已經(jīng)有好多程序員都把Go語言描述為是一種所見即所得(WYSIWYG)的編程語言。這是說,代碼要做的事和它在字面上表達的意思是完全一致的。 在這些新語言中,包含D,Go,Rust和Vala語言,Go曾一度出現(xiàn)在TIOBE的排行榜上面。與其他新語言相比,Go的魅力明顯要大很多。Go的成熟特征會得到許多開發(fā)者的欣賞,而不僅僅是因為其夸大其詞的曝光度。下面我們來一起探討一下谷歌開發(fā)的Go語言以及談談Go為什么會吸引眾多開發(fā)者: 快速簡單的編譯 Go編譯速度很快,如此快速的編譯使它很容易作為腳本語言使用。關(guān)于編譯速度快主要有以下幾個原因:首先,Go不使用頭文件;其次如果一個模塊是依賴A的,這反過來又取決于B,在A里面的需求改變只需重新編譯原始模塊和與A相依賴的地方;最后,對象模塊里面包含了足夠的依賴關(guān)系信息,所以編譯器不需要重新創(chuàng)建文件。你只需要簡單地編譯主模塊,項目中需要的其他部分就會自動編譯,很酷,是不是? 通過返回數(shù)值列表來處理錯誤信息 目前,在本地語言里面處理錯誤的方式主要有兩種:直接返回代碼或者拋異常。這兩種都不是最理想的處理方式。其中返回代碼是非常令人沮喪的,因為返回的錯誤代碼經(jīng)常與從函數(shù)中返回的數(shù)據(jù)相沖突。Go允許函數(shù)返回多個值來解決這個問題。這個從函數(shù)里面返回的值,可以用來檢查定義的類型是否正確并且可以隨時隨地對函數(shù)的返回值進行檢查。如果你對錯誤值不關(guān)心,你可以不必檢查。在這兩種情況下,常規(guī)的返回值都是可用的。 簡化的成分(優(yōu)先于繼承) 通過使用接口,類型是有資格成為對象中一員的,就像Java指定行為一樣。例如在標準庫里面的IO包,定義一個Writer來指定一個方法,一個Writer函數(shù),其中輸入?yún)?shù)是字節(jié)數(shù)組并且返回整數(shù)類型值或者錯誤類型。任何類型實現(xiàn)一個帶有相同簽名的Writer方法是對IO的完全實現(xiàn),Writer接口。這種是解耦代碼而不是優(yōu)雅。它還簡化了模擬對象來進行單元測試。例如你想在數(shù)據(jù)庫對象中測試一個方法,在標準語言中,你通常需要創(chuàng)建一個數(shù)據(jù)庫對象,并且需要進行大量的初始化和協(xié)議來模擬對象。在Go里面,如果該方法需要實現(xiàn)一個接口,你可以創(chuàng)建任何對該接口有用的對象,所以,你創(chuàng)建了MockDatabase,這是很小的對象,只實現(xiàn)了幾個需要運行和模擬的接口——沒有構(gòu)造函數(shù),沒有附件功能,只是一些方法。 簡化的并發(fā)性 相對于其他語言,并發(fā)性在Go里面顯得更加容易。把‘go’關(guān)鍵字放在任意函數(shù)前面然后那個函數(shù)就會在其go-routine自動運行(一個很輕的線程)。go-routines是通過通道進行交流并且基本上封鎖了所有的隊列消息。普通工具對相互排斥是有用,但是Go通過使用通道來踢掉并發(fā)性任務和坐標更加容易。 優(yōu)秀的錯誤消息 所有與Go相似的語言,自身作出的診斷都是無法與Go相媲美的。例如,一個死鎖程序,在Go運行時會通知你目前哪個線程導致了這種死鎖。編譯的錯誤信息是非常詳細全面和有用的。 其他 這里還有許多其他吸引人的地方,下面就一概而過的介紹一下,比如高階函數(shù)、垃圾回收、哈希映射和可擴展的數(shù)組內(nèi)置語言(部分語言語法,而不是作為一個庫)等等。 當然,Go并不是完美無瑕。在工具方面還有些不成熟的地方和用戶社區(qū)較小等,但是隨著谷歌語言的不斷發(fā)展,肯定會有整治措施出來。盡管許多語言,尤其是D、Rust和Vala旨在簡化C++并且對其進行簡化,但它們給人的感覺仍是“C++看上去要更好”。

【Go語言的優(yōu)勢】

可直接編譯成機器碼,不依賴其他庫,glibc的版本有一定要求,部署就是扔一個文件上去就完成了。

靜態(tài)類型語言,但是有動態(tài)語言的感覺,靜態(tài)類型的語言就是可以在編譯的時候檢查出來隱藏的大多數(shù)問題,動態(tài)語言的感覺就是有很多的包可以使用,寫起來的效率很高。

語言層面支持并發(fā),這個就是Go最大的特色,天生的支持并發(fā),我曾經(jīng)說過一句話,天生的基因和整容是有區(qū)別的,大家一樣美麗,但是你喜歡整容的還是天生基因的美麗呢?Go就是基因里面支持的并發(fā),可以充分的利用多核,很容易的使用并發(fā)。

內(nèi)置runtime,支持垃圾回收,這屬于動態(tài)語言的特性之一吧,雖然目前來說GC不算完美,但是足以應付我們所能遇到的大多數(shù)情況,特別是Go1.1之后的GC。

簡單易學,Go語言的作者都有C的基因,那么Go自然而然就有了C的基因,那么Go關(guān)鍵字是25個,但是表達能力很強大,幾乎支持大多數(shù)你在其他語言見過的特性:繼承、重載、對象等。

豐富的標準庫,Go目前已經(jīng)內(nèi)置了大量的庫,特別是網(wǎng)絡(luò)庫非常強大,我最愛的也是這部分。

內(nèi)置強大的工具,Go語言里面內(nèi)置了很多工具鏈,最好的應該是gofmt工具,自動化格式化代碼,能夠讓團隊review變得如此的簡單,代碼格式一模一樣,想不一樣都很困難。

跨編譯,如果你寫的Go代碼不包含cgo,那么就可以做到window系統(tǒng)編譯linux的應用,如何做到的呢?Go引用了plan9的代碼,這就是不依賴系統(tǒng)的信息。

內(nèi)嵌C支持,前面說了作者是C的作者,所以Go里面也可以直接包含c代碼,利用現(xiàn)有的豐富的C庫。

Go語言處理JSon字段

完整的一條json語句中,字段都為字符串類型,值為基本數(shù)據(jù)類型:整形、布爾型、字符串等

在解析json時,通常要用到encoding/json這個包

json.Unmarshal()方法用作將一個json類型的字節(jié)流,序列化成指定的形式,可以為map,也可以為自定義的結(jié)構(gòu)體,需要注意的是,希望被轉(zhuǎn)換的格式需要以指針類型傳入

運行結(jié)果如下

將map或者struct打包成json,用的是json中的marshal方法,返回的是一個字節(jié)數(shù)組和一個錯誤類型

打印結(jié)果

go語言中怎么定義一個string數(shù)組?

下邊是slice的申明和使用其實這就是一種動態(tài)的數(shù)組復制代碼 代碼如下:package main

import "fmt"func main() {d := []int{1, 2, 3} //申明一個slice這個是動態(tài)的數(shù)組,沒有長fmt.Println(d)

var q, w []intq = d[0:1] //可以定取得上邊的長度w = d[1:3]d = append(d, 2) //向其中添加元素fmt.Println(d)fmt.Printlnw。

Go語言是谷歌2009年發(fā)布的第二款開源編程語言。Go語言專門針對多處理器系統(tǒng)應用程序的編程進行了優(yōu)化,使用Go編譯的程序可以媲美C或C++代碼的速度,而且更加安全、支持并行進程。北京時間2010年1月10日,Go語言摘得了TIOBE公布的2009年年度大獎。

在谷歌公開發(fā)布的所有網(wǎng)絡(luò)應用中,均沒有使用Go,但是谷歌已經(jīng)使用該語言開發(fā)了幾個內(nèi)部項目。派克表示,Go是否會對谷歌即將推出的Chrome OS產(chǎn)生影響,還言之尚早,不過Go的確可以和Native Client配合使用。他表示“Go可以讓應用完美的運行在瀏覽器內(nèi)。”例如,使用Go可以更高效的實現(xiàn)Wave,無論是在前端還是后臺。

Go 同時具有兩種編譯器,一種是建立在GCC基礎(chǔ)上的Gccgo,另外一種是分別針對64位x64和32位x86計算機的一套編譯器(6g和8g)。谷歌目前正在研發(fā)其對ARM芯片和Android設(shè)備的支持。

Google對Go寄予厚望。其設(shè)計是讓軟件充分發(fā)揮多核心處理器同步多工的優(yōu)點,并可解決面向?qū)ο蟪绦蛟O(shè)計的麻煩。它具有現(xiàn)代的程序語言特色,如垃圾回收,幫助程序設(shè)計師處理瑣碎但重要的內(nèi)存管理問題。Go的速度也非??欤瑤缀鹾虲或C++程序一樣快,且能夠快速制作程序。

go語言函數(shù)如何傳遞數(shù)組變量

按值傳遞函數(shù)參數(shù),是拷貝參數(shù)的實際值到函數(shù)的形式參數(shù)的方法調(diào)用。在這種情況下,參數(shù)在函數(shù)內(nèi)變化對參數(shù)不會有影響。

默認情況下,Go編程語言使用調(diào)用通過值的方法來傳遞參數(shù)。在一般情況下,這意味著,在函數(shù)內(nèi)碼不能改變用來調(diào)用所述函數(shù)的參數(shù)。考慮函數(shù)swap()的定義如下。

代碼如下:

/* function definition to swap the values */

func swap(int x, int y) int {

var temp int

temp = x /* save the value of x */

x = y /* put y into x */

y = temp /* put temp into y */

return temp;

}

現(xiàn)在,讓我們通過使實際值作為在以下示例調(diào)用函數(shù)swap():

代碼如下:

package main

import "fmt"

func main() {

/* local variable definition */

var a int = 100

var b int = 200

fmt.Printf("Before swap, value of a : %d\n", a )

fmt.Printf("Before swap, value of b : %d\n", b )

/* calling a function to swap the values */

swap(a, b)

fmt.Printf("After swap, value of a : %d\n", a )

fmt.Printf("After swap, value of b : %d\n", b )

}

func swap(x, y int) int {

var temp int

temp = x /* save the value of x */

x = y /* put y into x */

y = temp /* put temp into y */

return temp;

}

讓我們把上面的代碼放在一個C文件,編譯并執(zhí)行它,它會產(chǎn)生以下結(jié)果:

Before swap, value of a :100

Before swap, value of b :200

After swap, value of a :100

After swap, value of b :200

這表明,參數(shù)值沒有被改變,雖然它們已經(jīng)在函數(shù)內(nèi)部改變。

通過傳遞函數(shù)參數(shù),即是拷貝參數(shù)的地址到形式參數(shù)的參考方法調(diào)用。在函數(shù)內(nèi)部,地址是訪問調(diào)用中使用的實際參數(shù)。這意味著,對參數(shù)的更改會影響傳遞的參數(shù)。

要通過引用傳遞的值,參數(shù)的指針被傳遞給函數(shù)就像任何其他的值。所以,相應的,需要聲明函數(shù)的參數(shù)為指針類型如下面的函數(shù)swap(),它的交換兩個整型變量的值指向它的參數(shù)。

代碼如下:

/* function definition to swap the values */

func swap(x *int, y *int) {

var temp int

temp = *x /* save the value at address x */

*x = *y /* put y into x */

*y = temp /* put temp into y */

}

現(xiàn)在,讓我們調(diào)用函數(shù)swap()通過引用作為在下面的示例中傳遞數(shù)值:

代碼如下:

package main

import "fmt"

func main() {

/* local variable definition */

var a int = 100

var b int= 200

fmt.Printf("Before swap, value of a : %d\n", a )

fmt.Printf("Before swap, value of b : %d\n", b )

/* calling a function to swap the values.

* a indicates pointer to a ie. address of variable a and

* b indicates pointer to b ie. address of variable b.

*/

swap(a, b)

fmt.Printf("After swap, value of a : %d\n", a )

fmt.Printf("After swap, value of b : %d\n", b )

}

func swap(x *int, y *int) {

var temp int

temp = *x /* save the value at address x */

*x = *y /* put y into x */

*y = temp /* put temp into y */

}

讓我們把上面的代碼放在一個C文件,編譯并執(zhí)行它,它會產(chǎn)生以下結(jié)果:

Before swap, value of a :100

Before swap, value of b :200

After swap, value of a :200

After swap, value of b :100

這表明變化的功能以及不同于通過值調(diào)用的外部體現(xiàn)的改變不能反映函數(shù)之外。

當前題目:go語言整數(shù)轉(zhuǎn)字節(jié)數(shù)組 golang整數(shù)轉(zhuǎn)二進制
標題鏈接:http://muchs.cn/article38/dosccsp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作企業(yè)建站、網(wǎng)站維護、網(wǎng)站排名、自適應網(wǎng)站、響應式網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護公司