1. 程式人生 > 實用技巧 >go學習筆記(一)

go學習筆記(一)

變數宣告

1.變數需要宣告再使用

2.同一作用域不支援重複宣告

3.變數聲明後必須使用

4.可以批量宣告變數

//var 變數名 變數型別
var s string
//批量宣告

var (
a string
b int
c bool
...
)

5.可以宣告變數同時賦值(可型別推導,不用宣告型別)

var s1 string = “hahaha”
var s2 = "hahaha" //型別推導
s3 := "hahaha" //簡短變數宣告,僅可用於函式內中

6.匿名變數:多重賦值時,忽略某個值,用下劃線 _表示。 不佔用名稱空間-不分配記憶體-無重複宣告-不產生不使用報錯的情況

package main
import "fmt"
func qqq( )(int,string){
return 1,"qqq"
}
func main() {
x,_:=qqq()
y,_:=qqq()
fmt.Println("x=",x)
fmt.Println("y=",y)
}
-------
x= 1
y= 1

注意

1.函式外語句必須以關鍵字開始

常量

const 常量名 = 常量值

1.在程式執行期間不會改變 2.定義了之後不能修改

批量宣告

//某一行沒賦值,表明同上一行
const(
a = 1
b
c
)

iota 常量計數器

1.const出現時被重置未0 2.每新增一行常量宣告,iota增加1 (類似列舉)

const(
a = iota //0
b //1
c //2
)

基本資料型別

整型

分為有符號(int)和無符號(uint)

int8  // 0 ~ 255,byte型
int16 // 0 ~ 65535
int32 //
int64 //
int8 // -128 ~ 127
int16 // -32768 ~ 32767 ,對應C語言中的 short 型
int32 // -2147483648 ~ 2147483647 , 對應C語言中的 long 型
int64 // -9223372036854775808 ~ 9223372036854775807

特殊整型

intuint 在不同平臺時會有區別

uintptr 無符號整型,用於存放一個指標

進位制轉換

func main(){
var a = 100
fmt.Printf("%b\n",a) //二進位制
fmt.Printf("%d\n",a) //
fmt.Printf("%o\n",a) //八進位制
fmt.Printf("%x\n",a) //十六進位制
}

浮點型

支援 float32 和 float64 兩種,預設go語言中小數都是float64.

複數

complex64complex128 複數有實部和虛部,complex64的實部和虛部為32位,complex128的實部和虛部為64位.

布林值

bool,true(真)false(假)兩個值

注意: 1.布林型別值預設false 2.不允許整型強制轉換成布林型 3.無法參與數值運算,也無法轉換

字串

go中雙引號包裹字串,單引號包裹字元

轉義符 \r \n \t 等等

多行字串,使用反引號

a := `第一行
第二行
第三行
`
fmt.Println(a)

字串常用操作

len(str)  //求長度
+ fmt.Sprintf //拼接
strings.Split //分割
strings.contains //判斷包含
strings.HasPrefix,strings.HasSuffix //前後綴判斷
strings.Index(),strings.LastIndex() //定位
strings.Join(a[]string, sep string) //join操作

Go 語言的字元有以下兩種:

  1. uint8型別,或者叫 byte 型,代表了ASCII碼的一個字元。

  2. rune型別,代表一個 UTF-8字元

修改字串

要先將其轉換成[]rune[]byte,完成後再轉換為string

func main(){
A := "asd"
byte1 := []byte(A)
byte1[0] = 'a'
fmt.Println(string(byte1))

B := "好好學習天天向上"
rune1 := []rune(B)
rune1[0] = '學'
fmt.Println(string(rune1))
}

型別轉換

沒有隱式型別轉換,僅支援強制型別轉換型別斷言

強制型別轉換

T(表示式)

注意:指標的強制型別轉換需要用到unsafe包中的函式實現

型別斷言

package main

import "fmt"

func main() {
var a interface{} =10
switch a.(type){
case int:
fmt.Println("int")
case float32:
fmt.Println("string")
}
}