golang入門學習筆記(一)
作者: 一字馬胡
轉載標誌 【2017-11-21】
更新日誌
日期 | 更新內容 | 備註 |
---|---|---|
2017-11-21 | 新建文章 | go語言入門筆記(一) |
準備環境
在Mac下,可以使用下面的命令安裝golang:
brew install go
完成安裝之後,可以命令“go version”來檢視安裝的go的版本資訊。安裝go完成之後,就可以開始學習go語言了,為了提高開發效率,建議使用IDE進行開發,但是如果不喜歡IDE也可以不使用,我推薦使用IDEA + plug 的方式來準備開發環境,可以在plug裡面搜尋go,然後就可以點選安裝外掛,完成之後就可以進行go開發了。
hello world !
學習一門新語言,首先要寫出“hello world”,下面的程式碼展示瞭如何使用golang來做這件簡單的事情:
import "fmt"
func main() {
helloWorld := "hello Word from golang!"
fmt.Print(helloWorld)
}
var for golang
var在go語言中用於定義一個或者多個變數,下面是一些例子:
var hello string = "hello"
var id1, id2 int = 1, 2
fmt.Print(hello, id1, id2)
一般可以使用“:=”來定義一個變數並且進行初始化,比如下面的例子:
ok := "this is a word"
number := 1024
fmt.Printf("%s, %d", ok, number)
const for golang
在go中使用const來進行常量的宣告,關於go中的常量可以參考:
A const statement can appear anywhere a var statement can.
Constant expressions perform arithmetic with arbitrary precision.
A numeric constant has no type until it’s given one, such as
by an explicit cast.A number can be given a type by using it in
a context that requires one, such as a variable assignment or
function call. For example, here math.Sin expects a float64.
下面是go中使用常量的例子:
const Kb = 1024
const Mb = Kb * 1024
const Gb = Mb * 1024
fmt.Printf("Kb:%d Mb:%d Gb:%d\n", Kb, Mb, Gb)
loop for golang
在go語言中,沒有像其他語言中一樣同時存在for、while等迴圈語法支援,go只支援for語句,下面是使用for迴圈的示例:
for i:= 0;i < 10; i ++ {
fmt.Printf("%d\t" , i)
}
fmt.Print("\nEnd of for loop.\n")
for {
fmt.Print("loop...")
}
如果想要實現無限迴圈,可以使用for {}。
if-Else for golang
值得注意的是,在go語言中進行for迴圈或者if-else語句編寫的時候,要和其他語言(比如Java)區分一下,go語言不能在條件上帶上(),這一點和其他語言是有所區別的,需要特別注意。下面展示了使用go中的if-else語句的示例:
size := 1024 * 0.8
if size > Kb {
fmt.Printf("%f > %d\n", size, Kb)
} else {
fmt.Printf("%f <= %d\n", size, Kb)
}
if size := 1024 * 1.1; size > Kb {
if size > Mb {
fmt.Printf("%f > %d\n", size, Mb)
} else {
fmt.Printf("%d <= %f <= %d", Kb, size, Mb)
}
}
可以在go的判斷語句中進行變數賦值,這樣寫程式碼感覺行雲流水,非常流暢,值得推薦。
switch for golang
go語言的switch看起來更加強大,下面是switch的使用示例:
i := 2
switch i {
case 1:
fmt.Println("one")
case 2:
fmt.Println("two")
case 3:
fmt.Println("three")
}
t := time.Now()
switch {
case t.Hour() < 12:
fmt.Println("It's before noon")
default:
fmt.Println("It's after noon")
}
whatAmI := func(i interface{}) {
switch t := i.(type) {
case bool:
fmt.Println("I'm a bool")
case int:
fmt.Println("I'm an int")
default:
fmt.Printf("Don't know type %T\n", t)
}
}
whatAmI(true)
whatAmI(1)
whatAmI("hey")
執行上面的程式碼,輸出如下:
two
It's after noon
I'm a bool
I'm an int
Don't know type string
array for golang
下面的程式碼展示了go語言中陣列的使用示例:
var array1 [10]int
for i := 0; i < 10 ; i ++ {
array1[i] = i * 10
}
array2 := [2]float64 {0.01, 0.02}
array2[0] += 1.0
array2[1] -= 0.002
var array3 [3][4]int
for i := 0; i < 3; i ++ {
for j := 0; j < 4; j ++ {
array3[i][j] = i * j
}
}
Slices for golang
和陣列類似,但是和陣列不一樣,go支援Slices,下面是Slices的使用示例:
建立一個空的Slices並且賦值:
s := make([]int, 2)
s[0] = 1
s[1] = 2
append操作:
s := make([]int, 2)
s[0] = 1
s[1] = 2
s = append(s, 3, 4, 5)
for i := 0; i < len(s); i ++ {
fmt.Printf("%d \t", s[i])
}
fmt.Print("\nEnd of prinf\n")
拷貝Slices操作:
cs := make([]int, len(s))
copy(cs, s)
for i := 0; i < len(cs); i ++ {
fmt.Printf("%d \t", cs[i])
}
fmt.Print("\nEnd of prinf\n")
slice操作:
ss := make([]string, 0)
ss = append(ss, "a", "b", "c", "d", "e", "f")
ss1 := ss[1:2]
ss2 := ss[:4]
ss3 := ss[3:]
fmt.Printf("%s ,%s , %s , %s\n", ss, ss1, ss2, ss3)
output:
[a b c d e f] ,[b] , [a b c d] , [d e f]
map for golang
map是一種特別重要的資料結構,平時使用也是比較頻繁的,下面的程式碼展示了go語言中的map的使用方法:
m := make(map[string]int)
m["ok"] = 200
m["error"] = 404
//delete item from map
delete(m, "ok")
is, v:= m["error"]
fmt.Print(v, is, "\n")
mp := map[string]int {"a":10, "b": 20}
fmt.Print(mp, "\n")
Range for golang
下面是使用Range的例子:
num := make([]int, 0)
num = append(num, 1, 2, 3, 4, 5)
sum := 0
for _, s := range num {
sum += s
}
for k, v := range m {
fmt.Printf("%s, %s\n" , k, v)
}
for i, v := range "golang" {
fmt.Printf("%d->%c\n", i, v)
}
range像是一個迭代器(和其他語言的迭代器非常類似)。
function for golang
下面的程式碼展示了go語言中方法的使用示例:
func total(a, b int) int {
return a + b
}
fmt.Print("sum:", total(1, 3), "\n")
在go語言的方法設計中,允許有多個返回值,下面是示例:
func multiReturn() (int, string, float32) {
return 1, "ok", 0.1
}
a, b, c := multiReturn()
fmt.Print("multiReturn:", a, b, c, "\n")
可變引數:
func multiParams(args ...int) int {
sum := 0
for _, v := range args {
sum += v
}
return sum
}
is = multiParams(1, 2, 3, 4, 5)
fmt.Printf("sum: %d\n" , is)
匿名函式:
func getIntValue() func() int {
i := 0
return func() int {
i += 1
return i
}
}
nextInt := getIntValue()
fmt.Printf("%d, %d, %d\n", nextInt(), nextInt(), nextInt())
pointer for golang
在go語言中,你可以使用指標進行一些操作了,是不是用慣了java就會不習慣呢?下面是示例程式碼:
var point *int
num := 10
point = &num
fmt.Print("point:", point, " value:", *point)
struct for golang
可以使用指標,又有struct,是不是和c語言越來越像了呢?下面是使用struct的示例:
type info struct {
id int
name struct{
firstName string
lastName string
}
}
var p *info
p = new(info)
p.id = 12
p.name.firstName = "jian"
p.name.lastName = "hu"
infoo := new(info)
infoo.id = 13
infoo.name.firstName = "haha"
infoo.name.lastName = "lulu"
fmt.Print(infoo, "\n")
相關文章
- GOLang 學習筆記(一)Golang筆記
- goLang學習筆記(一)Golang筆記
- JavaScript入門-學習筆記(一)JavaScript筆記
- Dubbo學習筆記(一) 入門筆記
- angular學習筆記(一)-入門案例Angular筆記
- python學習筆記(一)——入門Python筆記
- CANopen學習筆記(一)CANopen入門筆記
- webpack4入門學習筆記(一)Web筆記
- 學習筆記|AS入門(一) 環境篇筆記
- TS入門學習筆記筆記
- 【PostgreSQL】入門學習筆記SQL筆記
- git入門學習筆記Git筆記
- Docker入門學習筆記Docker筆記
- Unity學習筆記--入門Unity筆記
- ActionScript 學習筆記(入門)筆記
- golang 學習筆記Golang筆記
- JavaScript入門學習學習筆記(上)JavaScript筆記
- 記一次flink入門學習筆記筆記
- Golang 基礎入門筆記Golang筆記
- Go 入門指南學習筆記Go筆記
- React入門指南(學習筆記)React筆記
- pandas 學習筆記 (入門篇)筆記
- HTML入門學習筆記(二)HTML筆記
- MySQL學習筆記---入門使用MySql筆記
- Kotlin 入門學習筆記Kotlin筆記
- LDA入門級學習筆記LDA筆記
- Golang學習筆記(一):命名規範Golang筆記
- 【學習筆記】Golang 切片筆記Golang
- goLang學習筆記(三)Golang筆記
- goLang學習筆記(四)Golang筆記
- goLang學習筆記(二)Golang筆記
- golang 學習筆記1Golang筆記
- 入門筆記 --- Golang 語法注意事項(一)筆記Golang
- 人臉識別學習筆記一:入門篇筆記
- Java入門第一季(學習筆記)Java筆記
- Docker 入門學習筆記一:Ubuntu安裝 DockerDocker筆記Ubuntu
- Elasticsearch入門學習重點筆記Elasticsearch筆記
- 【MongoDB學習筆記】MongoDB 快速入門MongoDB筆記