切片(slice)與子切片
map介面
一般我們使用的基礎的屬性是:bool
,int
,string
,float
,complex(複數)
一般我們更常用方法2
var a int=1
//宣告變數的方法1
message:=
"123132"
//宣告變數的方法2
fmt.
println
(message)
//->123132\n
fmt.
println
(a)//->1\n
我們也可以利用相同的方法來宣告乙個陣列,一維陣列和二維陣列都可以直接宣告出來。
但是需要注意的是,go的陣列和其他語言一樣,是不可延長的,需要一開始定義好長度。
var arr =[5
]int
//宣告一維陣列的方法,陣列容量定死,不可延長
var arr2 [5]
[5]int
//宣告二維陣列的方法,陣列容量定死,不可延長
var arr3 =[5
]int
//宣告乙個容量為5的陣列
var index = arr3[2]
//訪問陣列元素
這裡簡單介紹一下關於if else,for,switch case的基本使用方法,和其他語言都差不多。
num:=
9if num<
0else
if num <
10else
sum :=
0for i:=
0; i<
10; i++
fmt.
println
(sum)
i:=
2switch i
其實這裡的結構體,我們可以理解為物件,而結構體裡的引數,就可以理解為物件的屬性。
func
main()
//給結構體賦值
p:= person
fmt.
println
(p)}
在這裡需要強調一下,在go裡面的函式和方法是有顯著不同的,但是我們可以說方法是特殊的函式。
先看一下函式的demo.
我們可以發現,函式的結構是 func 函式名(引數 引數型別)返回值
func
main()
func
add2
(i int
, i2 int)(
int,
string
)func
add(i int
, i2 int
)int
然後我們再來看看方法的demo,根據網上的資料說,方法的內部不能新增基本的資料的型別,像a int b float這樣的就不行,必須得是非基本資料型別。
type person struct
func
(p *person)
describe()
func
(p *person)
setage
(age int
)func
(p person)
setname
(name string
)func
main()
pp.describe()
//=> bob is 17 years old
pp.setage(28
)// =>28
pp.setname
("zhangsan"
)// =>bob(之所以值不變,是因為age返回型別是指標,name返回型別的值)
}
func
main()
//閉包
func
addtest
(x1 int
,x2 int
)func()
(int
,int
)}
而如果我們需要定義乙個可延長「陣列」,就可以使用切片的定義。在這裡我個人感覺切片的定義更像是鍊錶。
var b [
]int
//宣告乙個切片的方法1,可以延長
numbers:=
make([
]int,5
,10)//宣告乙個切片並定義長度,容量的切片(即使定義長度和容量也是可延長的)
//切片是陣列的抽象,包含長度,容量和指向底層陣列的指標
numbers =
(numbers,1,
2,3,
4)//在切片末尾新增值,並在有必要的時候增加容量
numbers2 :=
make([
]int,15
)//建立容量為15的空切片
copy
(numbers2,numbers)
//將原始切片複製到新切片
而單純的去建立乙個切片,可能不能很好的滿足我們的需求,更靈活的使用方法,是使用子切片。
建立子切片的的基礎,使我們有乙個切片,對於切片去建立子切片
number2 :=
int//建立乙個切片,並且賦值
fmt.
println
(number2)
// -> [1,2,3,4]
//建立子切片
slice1 :=number2[2:
]//後兩個
fmt.
println
(slice1)
// -> [3,4]
slice2 :=number2[:3
]//前三個
fmt.
println
(slice2)
// -> [1,2,3]
slice3 :=number2[1:
4]//1-4個
fmt.
println
(slice3)
// -> [2,3,4]
go的map和其他的map是一樣的,也都是kv鍵值對的資料結構。
m :=
make
(map
[string
]int
)//建立乙個map,k是string,value是int型別
m["string1"]=
2//新增乙個map,key為"string1",value為2
m["string2"]=
3 m[
"string3"]=
4for mapindex :=
range m
//刪除map的某一行
delete
(m,"string"
)
從上面的案例我們也可以看出,go的foreach表達方法是for i : range arr
和普通的其他oop的語言差的不多,也是宣告乙個介面,然後實現出來。
type animal inte***ce
type cat struct
type snake struct
func
(s snake)
description()
string
func
(c cat)
description()
string
func
main()
fmt.
println
(a.description()
)//=> poisonous: true
a = cat
fmt.
println
(a.description()
)//=> sound: meow!!!
}
GO語言入門學習筆記
迴圈語句介紹 條件語句介紹 defer延遲語句介紹 一些注意事項 go語言之旅 go語言入門教程 每個陣列的大小都是固定的。而切片則為陣列元素提供動態大小的 靈活的視角。在實踐中,切片比陣列更常用。func main 定義切片 r bool s struct 這裡開始是切片裡的結構體例項 packa...
Go 入門基礎
seaconch 最近在學習 go 語言程式設計,基礎部分還沒有看完,不過只看不練,或者只過一遍還是感覺不夠牢固,所以決定通過文章來記錄 並且梳理一下已了解過的知識。go 編寫的 檔案都以.go結尾。這裡假設我們有乙個名為 main.go的檔案。那想要將main.go生成乙個可執行的應用程式,至少要...
go 語言入門
參見文章1,文章2 1.編譯 go build test.go 2.執行 go run test.go 3.看幫助 go doc builtin go doc fmt fnv4.執行測試 編寫源 even.go this package is test for write package packa...