天天看點

Go随筆——Go語言基礎文法入門

GO語言特性

開發者使用程式設計語言的三大分類(執行速度,簡易程度,開發難度)

1.執行速度快、編譯速度慢(編譯型):C,C++

2.執行速度較慢,編譯速度快(解釋型):JAVA,.NET

3.執行速度慢,開發難度小(動态腳本):Python,PHP

GO語言在三個條件做了平衡:易于開發,快速編譯,高效執行

1.helloworld

package main

import "fmt"

func main {

fmt.Println("hello world")

}

注意:

1.如果需要将程式編譯成二進制程式,要将包名寫成main包

第一個Go程式解讀:

1.package

Go源檔案開頭必須使用package聲明代碼所屬包,包是Go代碼分發的最基本機關。若程式需要運作,則包名必須為main。

2.import

import用于導入程式所依賴的所有包,此程式依賴fmt包。

3.func

func用于定義函數,main函數是程式的入口,若程式需要運作必須聲明main函數,main函數無參數也無傳回值

4.fmt.Println

調用fmt.Println函數将參數資訊列印到控制台

編譯&運作:

# go build helloworld.go      (編譯出helloworld.exe檔案)

# go build -o test.exe helloworld.go   (test.exe檔案)

# go run helloworld.go        (編譯并運作helloworld.exe檔案)

2.go 變量定義,變量限定适用範圍

變量是指堆一塊存儲空間定義名稱。

變量定義方式:

func main() {

var name string = "kk"//定義了類型也定義了初始值

var zerostring string // 定義變量類型,但不初始值

var typestring = "kk" //定義變量省略類型,不能省略初始值

//短聲明(必須在函數内使用)

shortstring := "kk"

fmt.Println(name,zerostring,typestring,shortstring)

變量需要先定義再使用,直接使用會報錯 

var name string = "abc"

name = "bca"

批量定義

var (

變量名1 變量類型1 = 值1

變量名2 變量類型2 = 值2

)

變量作用域:

變量查找會從函數内查找,沒有才會去查找函數外的相同變量 

子塊可以覆寫父塊中使用的變量

變量辨別符:

辨別符:程式中定義的名字,變量名,常量名字,自定義類型,接口

規範:

1.必須滿足:組成隻能由非空的unicode編碼字元串,數字,下劃線組成

2.必須滿足:必須以unicode編碼的字元串或下劃線開頭(不能以數字開頭)

3.必須滿足:不能與go的關鍵字沖突(package,func,var)

建議:

1.Ascill編碼(a-z,A-Z)數字,下劃線

2.變量使用駝峰式

myName

3.與go内置變量不要沖突

函數級别:

var msg string = "hello workd"

fmt.Println(msg)

包級别:

var packageVar string = "package Var"

fmt.Println(msg, packageVar)

子塊級别:

{

var blockvar string = "block"

fmt.Println(packageVar,blockvar)

3.go 常量

常量一旦定義後不能修改

常量定義:

①常量

const (

packName string = "package"

packMsg = "pack"

A = "test"

B  // 使用前一個常量的值進行初始化 B->A

C  // 使用前一個常量的值進行初始化 C->B

D = "test2"

E

F

)  //使用前一個常量的值進行初始化

const name string = "abc" 

fmt.Println(name, B, C, E, F)

②枚舉

Mon = iota //在常量内使用iota,初始化為0,每次調用+1

Tuesd

Wed

Thur

Fir

Sat

Sun

fmt.Println(Mon)

4.go 變量列印

 fmt.Printf("%T, %v, %#v", name, name, name)

 占位符

 %T:列印變量類型

 %v:按某種格式列印變量

 %#v:按某種格式列印變量

5.go 資料類型

布爾類型:

isGirl := false

fmt.Println("%T,%#v", isGirl, isGirl)

整數類型:

//int

/int8,int16,int32,int64

常用操作:

1.算數運算符:+,-,*,/,%,++,--

2.關系運算符:>,<,==,!=

3.位運算符:&,|

4.指派運算符:=,+=,-=,*=

浮點數類型:

import (

"fmt"

var height float32 = 1.68

fmt.Printf("%T %#v %f\n", height,height,height)

邏輯運算:

與:左操作數與右操作數為true,結果為true

或:左操作數與右操作數隻要有一個為true,結果為true

非:取反 

a, b, c, d =: true, true ,false ,false

fmt.Println("a, b", a && b) 

fmt.Println("a, c", a && c)

6.條件語句

①if語句

var y string

fmt.Print("買西瓜麼:")

fmt.Scan(&y)

fmt.Println("你輸入的是", y)

if y == "yes" {

fmt.Println("買一個西瓜")

初始化子語句

可以在if語句中初始化語句塊内的局部變量,多個語句之間使用逗号分隔(;)

if flag := true;flag {

fmt.Println("flag:",flag)

②選擇語句switch case

fmt.Print("請輸入:")

switch y {

case "yes", "y":

fmt.Println("輸入的是1")

case "no", "n":

fmt.Println("輸入的是no")

default:

fmt.Println("2222")

7.循環語句for,break,continue

for i := 0; i < 10; i++ {

fmt.Println("1234")

var index = 1

for index <= 10 {

if index == 5 {

break

if index == 6 {

continue

fmt.Println(index)

index++

for-range

用于周遊可疊代對象中的每個元素,例如字元串,數組,切片,映射,通道等

var letters string

letters = "伍俊錡"

for _, k := range letters {

fmt.Printf("%q", k)

針對包含unicode字元的字元串便利,時需要使用for-range,range傳回兩個元素分别為位元組索引和rune字元,可通過空白辨別符忽略需要接受的變量。

類while,死循環

for {

total += index

index ++

if index > 100 {

繼續閱讀