Go的基本類型與變量


基本類型

  • 布爾型:bool
  1. 長度:1字節
  2. 取值范圍:true,false
  3. 注意:不可以用數字代表true或false
  • 整型:int/uint
  1. 根據運行平台可能為32或64位
  • 8位整型:int8/uint8
  1. 長度:1字節
  2. 取值范圍 -128~127/0-255
  3. PS:int是有符號,uint是無符號
  • 字節型:byte (uint8別名)

  • 16位整型:int16/uint16

  1. 長度:2字節
  2. 取值范圍:-32768~32768 / 0~65535
  • 32位整型:int32(rune)/uint32
  1. 長度:4字節
  2. 取值范圍:-2^32/2 ~ 2^32/2-1 / 0~2^32-1
  • 64位整型:int64/uint64
  1. 長度:8字節
  2. 取值范圍: -2^64/2 ~ 2^64/2-1 / 0~2^64-1
  • 浮點型:float32/float64
  1. 長度:4/8字節
  2. 小數位:精確到7/15小數位
  • 復數:complex64/complex128
  1. 長度8/16字節
  • 足夠保存指針的32位或64位整數型:uintptr

  • 其它值類型

  1. array、struct、string
  • 引用類型
  1. slice、map、chan

-** 接口類型:interface**

  • 函數類型:func
  1. 在go語言中函數是可以賦值給變量的,所以函數也是一種類型

類型零值

  • 零值不等於空值,而是當變量被聲明為某種類型后的默認值,通常情況下值得類型的默認值為0,bool為false,string為空字符串。
package main

import (
	"fmt"
)

func main() {
	var a int
	fmt.Println(a)
}
//此時打印出來的a的值是0,如果a為string類型的話,打印出來的值是空字符串,如果a為bool型的話,打印出來的值是false

類型別名

package main

import (
	"fmt"
)

type (
	文本 string
)

func main() {
	var b 文本
	b = "你好"
	fmt.Println(b)
}
//此時也是可以進行打印的,但是不建議這樣使用

單個變量的聲明和賦值

  • 變量的聲明格式: var <變量名稱> <變量類型>
  • 變量的賦值格式: <變量名稱> = <表達式>
  • 聲明的同時賦值:var <變量名稱> <變量類型> = <表達式>
package main

import (
	"fmt"
)

func main() {
	var b int
	b = 1         //先聲明后賦值,當這個變量還沒有要用,當你在后面的分支結構中可能要用到它,這個時候不能在結構中聲明,在結構退出之后,你可能還需要其他的運算。
	var c int = 1 //變量聲明的同時賦值,一般用在全局變量中,全局變量不能使用:=,必須進行顯式的說明
	var f = 2     //不寫出變量類型的區別,有可能現在是int型,你在后面進行運算是float型,這個時候用系統推斷就可以保持運算的類型一致。
	d := "go"     //最簡寫法
	e := false
	fmt.Println(b)
	fmt.Println(c)
	fmt.Println(d)
	fmt.Println(e)
	fmt.Println(f)
}

多個變量的聲明與賦值

  • 全局變量的聲明可以使用var()的方式進行簡寫
  • 全局變量的聲明不可以省略var,但可以使用並行的方式
  • 所有變量都可以使用類型推斷
  • 局部變量不可以使用var()的方式簡寫,只能使用並行方式
package main

import (
	"fmt"
)

func main() {
	//var a, b, c, d int = 1, 2, 3, 4
	//var a, b, c, d = 1, 2, 3, 4
	//a, b, c, d := 1, 2, 3, 4
	a, _, c, d := 1, 2, 3, 4 //忽略了,應用在函數的返回值當中
	fmt.Println(a, c, d)
}

變量的類型轉換

  • Go中不存在隱式轉換,所有的類型轉換必須顯式聲明
  • 轉換只能發生在兩種相互兼容的類型之間
  • 類型的轉換格式為如下
  • 從嚴格意義上講type newint int,這里newint並不能說是int的別名,而只是底層數據結構相同,在這里稱之為自定義類型,在進行類型轉換時仍舊需要顯示轉換,但是byte和rune確確實實為uint8和int32的別名,可以相互進行轉換。
<Value> [:]= <TypeOfValueA>(ValueB)

package main

import (
	"fmt"
)

func main() {
	//在相互兼容的兩種類型之間進行轉換
	var a float32 = 100.1
	fmt.Println(a)
	b := int(a)
	fmt.Println(b)
	//以下表達式無法通過編譯,因為類型不兼容
	var c bool = true
	d := int(c)
}
  • string()表示將數據轉換成文本格式,因為計算機中存儲的任何東西本質上都是數字,因此此函數自然地認為我們需要的是用數字65表示的文本A。
package main

import (
	"fmt"
	"strconv"
)

func main() {
	var a int = 65
	b := string(a)
	c := strconv.Itoa(a)
	d := strconv.Atoi(c)
	fmt.Println(b)
	fmt.Println(c)
	fmt.Println(d)
}
//此時我們需要引用strconv的Itoa的函數,將65轉換成我們想要的字符串65,如果想要逆轉的話需要用Atoi函數。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM