欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go語言七篇入門教程二程序結(jié)構(gòu)與數(shù)據(jù)類型

 更新時間:2021年11月09日 16:35:48   作者:小生凡一  
這篇文章主要為大家介紹了Go語言的程序結(jié)構(gòu)與數(shù)據(jù)類型,本篇文章是Go語言七篇入門系列文,有需要的朋友可以借鑒參考下,希望能夠有所幫助

1. 程序結(jié)構(gòu)

1.1 名稱

如果一個實體名稱在函數(shù)中聲明,它只在函數(shù)局部有效。如果聲明在函數(shù)外,它將對包里面的所有源文件可見。

實體第一個字母的大小寫決定其可見性是否跨包。如果名稱是以大寫字母的開頭,它是導出的,意味著它對外包來說是可見的可訪問的,可以被自己包外的其他程序所引用。

大寫可以!

在這里插入圖片描述

小寫不行!

在這里插入圖片描述

并且Go語言常常會使用駝峰式的風格命名

func main() {
	FanOne := "666" //大駝峰 (注意!一般函數(shù)內(nèi)部都是用小駝峰,局部變量,大駝峰一般用于函數(shù)的命名,需要外包的導出)
	fanOne := "666" //小駝峰
}

當然可以使用下劃線比如,不過我還是比較駝峰式~

在這里插入圖片描述

1.2 聲明

go語言可通過var進行變量的聲明

var 變量名 類型

例如:

func main(){
	var fanOne string 
	var xiaoSheng int
	var a,b,c = true , 6.6 , "fanOne" //bool ,float , string
}

當然也可以使用:=

例如

func main(){
	fanOne:="666" //string字符串
	xiaoSheng := 666  //int整型
	a,b,c := true , 6.6 ,"fanOne"  //bool ,float , string
}

1.3 注釋

可以用

//單行注釋

/*
多行注釋
*/

1.4 單雙引號

func main(){
	var d rune
	d = '1'
	a := 'a'
	b := "a"
	c := `'a'':"b"`  //可以把單引號和雙引號整括起來
	fmt.Printf("%T\n",d)	 // int32
	fmt.Printf("%T\n",a)	 // int32
	fmt.Printf("%T\n",b)	 // string
	fmt.Printf("%T\n",c)  	 // string
}

1.5 輸出

//Println 自帶換行 Printf 格式化輸出 

在這里插入圖片描述

在這里插入圖片描述

2. 數(shù)據(jù)類型

2.1 整型

整型數(shù)據(jù)可以分為兩類,有符號和無符號兩種類型

有符號: int, int8, int16, int32, int64

無符號: uint, uint8, uint16, uint32, uint64, byte

另外rune是int32的別名

在保證程序正確運行下,盡量使用占用空間小的數(shù)據(jù)類型

  • 不同位數(shù)的整型區(qū)別在于能保存整型數(shù)字范圍的大??;
  • 有符號類型可以存儲任何整數(shù),無符號類型只能存儲自然數(shù)
  • int和uint的大小和系統(tǒng)有關(guān),32位系統(tǒng)表示int32和uint32,如果是64位系統(tǒng)則表示int64和uint64
  • byte與uint8類似,一般用來存儲單個字符

2.2 浮點型

float64float32 兩種

  • float64的精度要比float32的要準確
  • 如果我們要保存一個精度高的數(shù),則應該選擇float64

浮點型的存儲分為三部分:符號位+指數(shù)位+尾數(shù)位,在存儲過程中,精度會有丟失

Go的浮點型默認為float64類型

2.3 復數(shù)

complex64complex128 , 二者分別由float32float64 構(gòu)成,內(nèi)置的complex函數(shù)根據(jù)給定的實部和虛部創(chuàng)建復數(shù),而內(nèi)置的real函數(shù)和img函數(shù)則分別提取復數(shù)的實部和虛部:

var x complex128 = complex(1,2) //1+2i
var y complex128 = complex(3,4) //3+4i
fmt.Println(x*y) 		//-5+10i
fmt.Println(real(x*y))  //-5
fmt.Println(imag(x*y))  //10

當然我們也可以像這樣

x := 1 + 2i
y := 3 + 4i

2.4 布爾型

只有兩種可能true或者式false

var fanOne true
var xiaoSheng false

2.5 字符串

func main(){
	s:="FanOne"
	fmt.Println(len(s)) //6
	fmt.Println(s[:3])  //Fan
	fmt.Println(s[1],s[2]) // 97 110
}

字符串拼接

func main(){
	s:="FanOne"
	b := "666"
	y := s + b
	fmt.Println(y) //FanOne666
}

字符串轉(zhuǎn)int

num,err:=strconv.Atoi("666")//num就是整型

int 轉(zhuǎn) 字符串

str := strconv.Itoa(666) //str是字符串

2.6 常量

const a = 666
fmt.Println(a) //666

2.7 數(shù)組

var a [3]int //3個整數(shù)的數(shù)組
for i , v := range a {
	fmt.Println(i,v)  
}
var fan [3]int{1,2,3}
var one [3]int{1,3}
t := [...]int{1,2,3} //省略號
fmt.Printf("%T",t)	 //[3]int

go語言的數(shù)組的長度是固定的,所以在某些場景下數(shù)組存在著它的局限性
而切片的存在就解決了數(shù)組長度局限的問題,切片可以看做一個可以自動擴容的數(shù)組,但是它跟數(shù)組還是有著區(qū)別。

2.8 切片

可以通過make切片字面量來創(chuàng)建和初始化切片,也可以利用現(xiàn)有數(shù)組或切片直接創(chuàng)建切片(Go語言中的引用類型(slice、map、chan)不能使用new進行初始化)。

使用make時,需要傳入一個參數(shù)指定切片的長度,如果只指定長度,則切片的容量和長度相等。也可以傳入兩個參數(shù)分別指定長度和容量。不允許創(chuàng)建容量小于長度的切片。

// make只傳入一個參數(shù)指定長度,則容量和長度相等。以下輸出:"len: 10, cap: 10"
s := make([]int, 10)
fmt.Printf("len: %d, cap: %d\n", len(s), cap(s))

// make 傳入長度和容量。以下輸出:"len: 10, cap: 15"
s := make([]int, 10, 15)
fmt.Printf("len: %d, cap: %d\n", len(s), cap(s))

// 不允許創(chuàng)建容量小于長度的切片。下面語句編譯會報錯:"len larger than cap in make([]int)"
s := make([]int, 10, 5)

通過切片字面量來聲明切片。

// 通過字面量聲明切片,其長度和容量都為5。以下輸出:“l(fā)en: 5, cap: 5”
s := []int{1, 2, 3, 4, 5}
fmt.Printf("len: %d, cap: %d\n", len(s), cap(s))

// 可以在聲明切片時利用索引來給出所需的長度和容量。
// 通過指定索引為99的元素,來創(chuàng)建一個長度和容量為100的切片
s := []int{99: 0}

基于現(xiàn)有數(shù)組或切片來創(chuàng)建切片的方法為:s := baseStr[low:high:max],low指定開始元素下標,high指定結(jié)束元素下標,max指定切片能增長到的元素下標。這三個參數(shù)都可以省略,low省略默認從下標0開始,high省略默認為最后一個元素下標,max省略默認是底層數(shù)組或切片的容量(這里也要注意max不能小于high)。這種方式下,切片的長度和容量的計算方式為:

len = hith - low
cap = max - low
s1 := baseStr[1:3:10]
fmt.Printf("len: %d, cap: %d\n", len(s1), cap(s1)) // len: 2, cap: 9

s2 := baseStr[1:3]
fmt.Printf("len: %d, cap: %d\n", len(s2), cap(s2)) // len: 2, cap: 9

s3 := baseStr[:3]
fmt.Printf("len: %d, cap: %d\n", len(s3), cap(s3)) // len: 3, cap: 10

ss1 := s1[2:5]
ss2 := s1[3:8]
fmt.Printf("len: %d, cap: %d\n", len(ss1), cap(ss1)) // len: 3, cap: 7
fmt.Printf("len: %d, cap: %d\n", len(ss2), cap(ss2)) // len: 5, cap: 6

增加可以用append

// 創(chuàng)建一個整型切片
// 其長度和容量都是5個元素
slice := []int{1, 2, 3, 4, 5}

// 創(chuàng)建一個新切片
// 其長度為2 個元素,容量為4個元素
newSlice := slice[1:3]

// 使用原有的容量來分配一個新元素
// 將新元素賦值為 60
newSlice = append(newSlice, 6)

fmt.Printf("slice: %v\n", slice)       // slice: [1 2 3 6 5]
fmt.Printf("newSlice: %v\n", newSlice) // newSlice: [2 3 6]

2.9 map

Map 是一種無序的鍵值對的集合。Map 最重要的一點是通過 key 來快速檢索數(shù)據(jù),key 類似于索引,指向數(shù)據(jù)的值。

Map 是一種集合,所以我們可以像迭代數(shù)組和切片那樣迭代它。不過,Map 是無序的,我們無法決定它的返回順序,這是因為 Map 是使用 hash 表來實現(xiàn)的。

聲明

/* 聲明變量,默認 map 是 nil */
var map_variable map[key_data_type]value_data_type
/* 使用 make 函數(shù) */
map_variable := make(map[key_data_type]value_data_type)
	var fan map[string]string //創(chuàng)建集合 
	fan = make(map[string]string)
	//map插入key-value對
	fan [ "One" ] = "666"
	fan [ "Four" ] = "999"
	//使用鍵輸出
	for value := range fan {
		fmt.Println(value, "is", fan [value])
	}
	//查看元素在集合中是否存在
	val, ok := fan [ "Two" ] //如果確定是真實的,則存在,否則不存在
	if ok {
		fmt.Println("fanTwo is", val)
	} else {
		fmt.Println("fanTwo not exist")
	}

delete() 函數(shù)用于刪除集合的元素, 參數(shù)為 map 和其對應的 key。
可以使用delete方法刪除

delete(fan , "One")

2.10 結(jié)構(gòu)體

結(jié)構(gòu)體定義需要使用 type 和 struct 語句。struct 語句定義一個新的數(shù)據(jù)類型,結(jié)構(gòu)體中有一個或多個成員。type 語句設定了結(jié)構(gòu)體的名稱。結(jié)構(gòu)體的格式如下:

type Person struct{
	name string
	age int
	sex string
}
func main(){
	person := Person{  //初始化
		name: "fanOne",
		age:  16,
		sex:  "male",
	}
	fmt.Println(person.name)  //引用
} 

2.11 JSON

type Person struct{
	Name string `json:"name"` //序列化成string類型
	Age int	`json:"age"`
	Sex string `json:"sex"`
}
func main(){
	person := &Person{} //創(chuàng)建一個對象
	var data = `{"name":"fanOne","age":"11","sex":"male"}`
	_ = json.Unmarshal([]byte(data), &person)  //將這個data序列化成person的結(jié)構(gòu)體,并傳入其中
	fmt.Println(person.Name)
}

3. 流程控制

3.1 條件語句

func main(){
	x :=1 
	if x == 1 {
		fmt.Println("666")
	} else {
		fmt.Println("999")
	}
}

3.2 選擇語句

	switch i {
	case 0:
		fmt.Printf("0")
	case 1:
		fmt.Printf("1")
	case 2:
		fmt.Printf("2")
	case 3:
		fmt.Printf("3")
	case 4, 5, 6:
		fmt.Printf("4, 5, 6")
	default:
		fmt.Printf("Default")
	}

3.3 循環(huán)語句

	sum := 0
	for i := 0; i < 10; i++ {
		sum += i
	}
	
	s := [3]int{1,2,3}
	for _,item := range s{
		fmt.Println(item)
	}

以上就是Go語言七篇入門程序結(jié)構(gòu)與數(shù)據(jù)類型的詳細內(nèi)容,更多關(guān)于Go語言程序結(jié)構(gòu)與數(shù)據(jù)類型的資料請關(guān)注腳本之家其它相關(guān)文章!

如何學習Go

如果你是小白,你可以這樣學習Go語言~

七篇入門Go語言

第一篇:Go簡介初識

第三篇:函數(shù)方法接口的介紹

第四篇:通道與Goroutine的并發(fā)編程

第五篇:文件及包的操作與處理

第六篇:網(wǎng)絡編程

第七篇:GC垃圾回收三色標記

相關(guān)文章

  • golang基于websocket通信tcp keepalive研究記錄

    golang基于websocket通信tcp keepalive研究記錄

    這篇文章主要為大家介紹了golang基于websocket通信tcp keepalive研究記錄,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • golang如何實現(xiàn)mapreduce單進程版本詳解

    golang如何實現(xiàn)mapreduce單進程版本詳解

    這篇文章主要給大家介紹了關(guān)于golang如何實現(xiàn)mapreduce單進程版本的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2018-01-01
  • Go語言學習之反射的用法詳解

    Go語言學習之反射的用法詳解

    反射指的是運行時動態(tài)的獲取變量的相關(guān)信息。本文將為大家詳細介紹Go語言中反射的用法,文中的示例代碼講解詳細,感興趣的可以了解一下
    2022-04-04
  • Golang 刪除文件并遞歸刪除空目錄的操作

    Golang 刪除文件并遞歸刪除空目錄的操作

    這篇文章主要介紹了Golang 刪除文件并遞歸刪除空目錄的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • Golang并發(fā)之RWMutex的用法詳解

    Golang并發(fā)之RWMutex的用法詳解

    在?Go?語言中,RWMutex?是一種讀寫互斥鎖的實現(xiàn),它提供了一種簡單有效的方式來管理對共享資源的并發(fā)訪問。本文就來和大家詳細聊聊RWMutex的用法吧
    2023-04-04
  • Go語言服務器開發(fā)之簡易TCP客戶端與服務端實現(xiàn)方法

    Go語言服務器開發(fā)之簡易TCP客戶端與服務端實現(xiàn)方法

    這篇文章主要介紹了Go語言服務器開發(fā)之簡易TCP客戶端與服務端實現(xiàn)方法,實例分析了基于Go語言實現(xiàn)的簡易服務器的TCP客戶端與服務器端實現(xiàn)技巧,需要的朋友可以參考下
    2015-02-02
  • 細細探究Go 泛型generic設計

    細細探究Go 泛型generic設計

    這篇文章主要帶大家細細探究了Go 泛型generic設計及示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-04-04
  • 下載golang.org/x包的操作方法

    下載golang.org/x包的操作方法

    今天小編就為大家分享一篇下載golang.org/x包的操作方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • go mod 使用私有g(shù)itlab群組的解決方案

    go mod 使用私有g(shù)itlab群組的解決方案

    這篇文章主要介紹了go mod 使用私有g(shù)itlab群組的解決方案,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • golang服務報錯:?write:?broken?pipe的解決方案

    golang服務報錯:?write:?broken?pipe的解決方案

    在開發(fā)在線客服系統(tǒng)的時候,看到日志里有一些錯誤信息,下面這篇文章主要給大家介紹了關(guān)于golang服務報錯:?write:?broken?pipe的解決方案,需要的朋友可以參考下
    2022-09-09

最新評論