最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

1.1 名稱

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

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

大寫可以!

在這里插入圖片描述

小寫不行!

在這里插入圖片描述

并且Go語言常常會(huì)使用駝峰式的風(fēng)格命名

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

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

在這里插入圖片描述

1.2 聲明

go語言可通過var進(jìn)行變量的聲明

var 變量名 類型

例如:

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

當(dāng)然也可以使用:=

例如

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

1.3 注釋

可以用

//單行注釋

/*
多行注釋
*/

1.4 單雙引號(hào)

func main(){
	var d rune
	d = '1'
	a := 'a'
	b := "a"
	c := `'a'':"b"`  //可以把單引號(hào)和雙引號(hào)整括起來
	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ù)可以分為兩類,有符號(hào)和無符號(hào)兩種類型

有符號(hào): int, int8, int16, int32, int64

無符號(hào): uint, uint8, uint16, uint32, uint64, byte

另外rune是int32的別名

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

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

2.2 浮點(diǎn)型

float64float32 兩種

  • float64的精度要比float32的要準(zhǔn)確
  • 如果我們要保存一個(gè)精度高的數(shù),則應(yīng)該選擇float64

浮點(diǎn)型的存儲(chǔ)分為三部分:符號(hào)位+指數(shù)位+尾數(shù)位,在存儲(chǔ)過程中,精度會(huì)有丟失

Go的浮點(diǎn)型默認(rèn)為float64類型

2.3 復(fù)數(shù)

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

當(dāng)然我們也可以像這樣

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個(gè)整數(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} //省略號(hào)
fmt.Printf("%T",t)	 //[3]int

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

2.8 切片

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

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

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

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

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

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

// 通過字面量聲明切片,其長(zhǎng)度和容量都為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))

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

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

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)建一個(gè)整型切片
// 其長(zhǎng)度和容量都是5個(gè)元素
slice := []int{1, 2, 3, 4, 5}

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

// 使用原有的容量來分配一個(gè)新元素
// 將新元素賦值為 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 是一種無序的鍵值對(duì)的集合。Map 最重要的一點(diǎn)是通過 key 來快速檢索數(shù)據(jù),key 類似于索引,指向數(shù)據(jù)的值。

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

聲明

/* 聲明變量,默認(rè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對(duì)
	fan [ "One" ] = "666"
	fan [ "Four" ] = "999"
	//使用鍵輸出
	for value := range fan {
		fmt.Println(value, "is", fan [value])
	}
	//查看元素在集合中是否存在
	val, ok := fan [ "Two" ] //如果確定是真實(shí)的,則存在,否則不存在
	if ok {
		fmt.Println("fanTwo is", val)
	} else {
		fmt.Println("fanTwo not exist")
	}

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

delete(fan , "One")

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

結(jié)構(gòu)體定義需要使用 type 和 struct 語句。struct 語句定義一個(gè)新的數(shù)據(jù)類型,結(jié)構(gòu)體中有一個(gè)或多個(gè)成員。type 語句設(shè)定了結(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)建一個(gè)對(duì)象
	var data = `{"name":"fanOne","age":"11","sex":"male"}`
	_ = json.Unmarshal([]byte(data), &person)  //將這個(gè)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ù)類型的詳細(xì)內(nèi)容,更多關(guān)于Go語言程序結(jié)構(gòu)與數(shù)據(jù)類型的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

如何學(xué)習(xí)Go

如果你是小白,你可以這樣學(xué)習(xí)Go語言~

七篇入門Go語言

第一篇:Go簡(jiǎn)介初識(shí)

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

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

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

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

第七篇:GC垃圾回收三色標(biāo)記

相關(guān)文章

  • Golang中sync.Mutex的源碼分析

    Golang中sync.Mutex的源碼分析

    這篇文章將帶大家從源碼分析一下Golang中sync.Mutex的使用,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Golang有一定的幫助,需要的可以參考一下
    2023-03-03
  • Golang 使用gorm添加數(shù)據(jù)庫(kù)排他鎖,for update

    Golang 使用gorm添加數(shù)據(jù)庫(kù)排他鎖,for update

    這篇文章主要介紹了Golang 使用gorm添加數(shù)據(jù)庫(kù)排他鎖,for update,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Go語句與表達(dá)式案例手冊(cè)深度解析

    Go語句與表達(dá)式案例手冊(cè)深度解析

    這篇文章主要為大家介紹了Go語句與表達(dá)式案例手冊(cè)深度解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Go語言利用time.After實(shí)現(xiàn)超時(shí)控制的方法詳解

    Go語言利用time.After實(shí)現(xiàn)超時(shí)控制的方法詳解

    最近在學(xué)習(xí)golang,所以下面這篇文章主要給大家介紹了關(guān)于Go語言利用time.After實(shí)現(xiàn)超時(shí)控制的相關(guān)資料,文中通過示例介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-08-08
  • golang如何利用原始套接字構(gòu)造UDP包詳解

    golang如何利用原始套接字構(gòu)造UDP包詳解

    這篇文章主要給大家介紹了關(guān)于golang如何利用原始套接字構(gòu)造UDP包的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用golang具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。
    2017-10-10
  • golang map的基本操作及定義方式

    golang map的基本操作及定義方式

    這篇文章主要介紹了golang-map的基本操作,由于map是引用類型,所以在操作的時(shí)候,必須先初始化,本文通過多種方式給大家講解map的定義方式,需要的朋友可以參考下
    2022-08-08
  • golang中進(jìn)行條件編譯的示例詳解

    golang中進(jìn)行條件編譯的示例詳解

    條件編譯顧名思義就是在編譯時(shí)讓代碼中的一部分生效或者失效,從而控制編譯時(shí)的代碼執(zhí)行路徑,進(jìn)而影響編譯出來的程序的行為,下面我們就來看看如何在golang中進(jìn)行條件編譯吧
    2025-03-03
  • Go中的格式化字符串fmt.Sprintf()和fmt.Printf()使用示例

    Go中的格式化字符串fmt.Sprintf()和fmt.Printf()使用示例

    這篇文章主要為大家介紹了Go中的格式化字符串fmt.Sprintf()和fmt.Printf()使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • Golang爬蟲框架colly使用淺析

    Golang爬蟲框架colly使用淺析

    這篇文章主要介紹了Golang爬蟲框架colly的使用,colly是Go實(shí)現(xiàn)的比較有名的一款爬蟲框架,而且Go在高并發(fā)和分布式場(chǎng)景的優(yōu)勢(shì)也正是爬蟲技術(shù)所需要的,感興趣想要詳細(xì)了解可以參考下文
    2023-05-05
  • go語言實(shí)現(xiàn)的memcache協(xié)議服務(wù)的方法

    go語言實(shí)現(xiàn)的memcache協(xié)議服務(wù)的方法

    這篇文章主要介紹了go語言實(shí)現(xiàn)的memcache協(xié)議服務(wù)的方法,實(shí)例分析了Go語言使用memcache的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03

最新評(píng)論

琼结县| 武川县| 库尔勒市| 沂源县| 高密市| 康保县| 卢氏县| 巴里| 孟津县| 南和县| 济阳县| 兴海县| 深州市| 遂川县| 安陆市| 宁陵县| 石棉县| 白水县| 彭阳县| 奎屯市| 黎平县| 周口市| 阳江市| 桐乡市| 鄂伦春自治旗| 万盛区| 平谷区| 油尖旺区| 阿克陶县| 布拖县| 罗定市| 阿拉善左旗| 怀集县| 桦川县| 北川| 蓝山县| 怀来县| 绍兴县| 承德县| 宜春市| 辰溪县|