Golang引用型別,型別轉換,字串

2021-08-21 09:51:36 字數 2228 閱讀 5379

引⽤用型別包括 slice、map 和 channel。它們有複雜的內部結構,除了申請記憶體外,還需

要初始化相關屬性。

內建函式 new 計算型別大小,為其分配零值記憶體,返回指標。⽽而 make 會被編譯器翻譯

成具體的建立函式,由其分配記憶體和初始化成員結構,返回物件而非指標。

a :=

int

// 提供初始化表示式。

a[1] =

10b :=

make(

int,

3) // makeslice

b[1] =

10c :=

new(

int)

c[1] =

10// error: invalid operation: c[1] (index of type *int)

varbbyte =

100// var n int = b // error: cannot use b (type byte) as type int in assignment

varnint =

int(b)

// 顯式轉換

使⽤用括號避免優先順序錯誤。 *

point(p)

// 相當於 *(point(p))

(*point)(p)

<-

chan

int(c)

// 相當於 <-(chan int(c))

(<-

chan

int)(c)

同樣不能將其他型別當 bool 值使⽤用。

a :=

100if a

字串是不可變值型別,內部⽤用指標指向 utf-8 位元組陣列。

•預設值是空字串 ""。

•⽤用索引號訪問某位元組,如 s[i]。

•不能⽤用序號獲取位元組元素指標,&s[i] ⾮非法。

•不可變型別,⽆無法修改位元組陣列。

•位元組陣列尾部不包含 null。

runtime.h

struct string ;

使⽤用索引號訪問字元 (byte)。

s :=

"abc"

println(s[

0] ==

'\x61', s[

1] ==

'b', s[

2] ==

0x63)

輸出:true true true

使⽤用 "`" 定義不做轉義處理的原始字串,⽀支援跨⾏行。

s :=

`ab\r\n\x00

c` println(s)

輸出:ab\r\n\x00

c連線跨⾏行字串時,"+" 必須在上一行末尾,否則導致編譯錯誤。

s :=

"hello, " +

"world!"

s2 :=

"hello, "

+ "world!"

// error: invalid operation: + untyped string

⽀支援⽤用兩個索引號返回⼦子串。⼦子串依然指向原位元組陣列,僅修改了指標和⻓長度屬性。

s :=

"hello, world!"

s1 := s[:

5] // hello

s2 := s[

7:]

// world!

s3 := s[

1:5]

// ello

單引號字元常量表⽰示 unicode code point,⽀支援 \uffff、\u7fffffff、\xff 格式。

對應 rune 型別,ucs-4。

func

main()

輸出:int32 // rune 是 int32 的別名

true true

要修改字串,可先將其轉換成 rune 或 byte,完成後再轉換為 string。⽆無論哪種轉

換,都會重新分配記憶體,並複製位元組陣列。

func

main()

輸出:abcd

**⽤用 for 迴圈遍歷字串時,也有 byte 和 rune 兩種⽅方式。

func

main()

fmt.

println()

for_, r :=

range s }

輸出:a,b,c,æ,±,,å,­,,

a,b,c,漢,字,

golang 型別轉換

go 檢視變數型別 reflect.typeof 變數名 int 轉string s strconv.itoa i 等價於 strconv.formatint int i 10 示例 func zhuan int64轉string i int64 123 s strconv.formatint i,...

golang 值型別和引用型別

1.值型別和引用型別 package main import fmt func add num int func addarry arry 3 int func addslice slice int func addmap m map int int func main 值型別 fmt.printl...

引用型別轉換

父類package oop.demo08 public class person 子類package oop.demo08 public class student extends person 測試public class public static void main string args 型...