1. 程式人生 > >【Go】golang初級語法篇

【Go】golang初級語法篇

1. Go 基礎

package main   //每一個go檔案開頭都應該宣告包名,一個go專案需要有一個main包

import (   //匯入該go檔案依賴的外部包
    "fmt"
)

func main() {  //main是一個特殊函式,是程式的主入口
    
}

2. Go 變數
宣告變數的三種方法
2.1  單個變數宣告

var age int   //變數宣告,不賦值,需要指明變數型別(int/string/bool/...) Go自動賦予初始化值
var age int = 23  //宣告變數並且初始化
var age = 23  //宣告變數並且初始化,Go自動推斷變數的型別


2.2  多個變數

var a,b int
var a,b int = 2,3
var (
  name = "Jack"
  age = 20
  height int
)


2.3 簡潔宣告  := 操作符要求左邊有未被宣告過的變數名

    a := 10
    name,age := "Jack",20

3. Go 資料型別
3.1 數字
  int8 / int16 / int32 / int64 / int  有符號整數
  unit8 / unit16 / unit32 / unit64 / unit  無符號整數(正數)
  float32 / float64 浮點數
  complex64 / complex128  複數
  byte 相當於unit8
  rune 相當於int32
3.2 字串
  string
3.3 其他
  bool
3.4 type 
  type myString string //type用於宣告新的資料型別,myString相當於string的別名

4. Go 常量

const a = 10  //常量在編譯時確定,所以不能將函式返回值賦值給常量
const a int = 10

5. 函式
5.1 傳入引數需要寫明該引數的資料型別,有返回值需要寫明該返回值的資料型別

func handler(a int,b string) bool {
   ...
}


5.2 若傳入引數資料型別一致,可以只寫最後一個引數的資料型別

    func handler(a,b int) bool {
      ...
    }


5.3 無引數無返回值

    func handler(){
      ...
    }


5.4 有多個返回值時,需要將多個返回值用括號括起來

    func handler(a,b int)(int,int,float64){
      ...
      return var1,var2,var3
    }
    //命名返回值,return不需要顯式返回任何職,預設返回 var1,var2,var3
    func handler(a,b int)(var1 int,var2 int,var3 float64){
      ...
      return
    }


5.5 空白符_的妙用
    以上函式為例,返回了三個資料,空白符_可以丟棄某個返回值

    a,b,c := handler(arg1,arg2)
    _,b,c := handler(arg1,arg2)
    a,_,c := handler(arg1,arg2)
    a,_,_ := handler(arg1,arg2)
   func find(num int, nums ...int) {
      fmt.Printf("type of nums is %T\n", nums)
      found := false
      for i, v := range nums {
          if v == num {
              fmt.Println(num, "found at index", i, "in", nums)
              found = true
          }
      }
      if !found {
          fmt.Println(num, "not found in ", nums)
      }
      fmt.Printf("\n")
  }
  func main() {
      find(89, 89, 90, 95)
      find(45, 56, 67, 45, 90, 109)
      find(78, 38, 56, 98)
      find(87)
  }

6. Go 包package的使用

   -src   //Go工作區
    -myproject  //專案名
     main.go  //主入口檔案
     -package1  //包
      tool1.go  //包內檔案
      tool2.go
     -package2  //包
      dev1.go
      dev2.go

在上述專案結構中(-xxx 代表資料夾xxx)
6.1 main.go 檔案:
首行應該 宣告 package main
應該包含main函式作為程式的主入口
6.2 tool1.go/tool2.go 檔案:
首行應該宣告 package package1 
6.3 dev1.go/dev2.go 檔案
首行應該宣告 package package2
6.4 包中的函式或變數想暴露給外部使用,必須首字母大寫
6.5 引用外部包
main.go 檔案:

import (
  "fmt"
  "myproject/package1"
  "myproject/package2"
)

6.6 如何使用外部包的函式/變數

    package1.Area()
    package1.Pi

6.7 如何導包但不使用包
導包但沒有使用該包,在編譯時是會報錯的,在開發階段可能會先把包先匯入,那如何導包但不使用而不報錯呢,巧用空白符_

import (
  "fmt"
  _"myproject/package1"
)

7. Go init函式

func init(){ //特殊函式,一個檔案可以有一個init函式。一般用於檢查資料型別是否符合要求
 ...
}


8. Go if...else語句
跟其他語言不同,Go語言對於if...else語句有嚴格的語法要求
8.1 if條件語句不需要括號
8.2 else不能另起一行,必須緊跟if的右括號}處於同一行
8.3 哪怕{}裡面的執行語句只有一句,{}也不能被忽略
  例項1

  if i%2==0 {
    ....
  }


  例項2

  if i==10 {
   ...
  } else {
   ...
  }

9. Go for迴圈語句
Go只有一種迴圈語句 就是for迴圈
  例項

  for i:=0;i<10;i++ { //一般的迴圈
    ...
  }
  for i<10 { //相當於while迴圈
  
  }
  for { //無限迴圈,一般情況下不要使用
    ...
  }


break/continue可以與迴圈配合使用
break 終止迴圈
continue 跳出當前迴圈,進入下一個迴圈

10. Go switch語句
例項1:有表示式

    switch num {
      case 1:
        ...
      case 2:
        ...
      case 3,4,5:
        ...
      default:
        ...
    }


例項2:無表示式

   switch {
     case num>=0 && num<=50 :
      ...
     case num>=51 && num<=100:
      ...
     case num>=101:
      ...
   }


例項3:fallthrough
 switch語句從上往下檢索,當找到滿足條件的case便會結束往下檢索,fallthrough語句可以讓switch繼續往下檢索

 switch {
   case num>=0 && num<=50 :
    ...
    fallthrough
   case num>=51 && num<=100:
    ...
   case num>=101:
    ...
 }

相關推薦

Gogolang初級語法

1. Go 基礎 package main   //每一個go檔案開頭都應該宣告包名,一個go專案需要有一個main包 import (   //匯入該go檔案依賴的外部包     "fmt" )

Pythonpython基礎語法 編碼

finall ont 實現 tro out 程序 port 其他 pytho 編碼 默認情況下,python以UTF-8編碼,所有的字符串都是Unicode字符串,可以為代碼定義不同的的編碼。 #coding:UTF-8 #OR #-*- coding:UTF-8 -

Redis入門就這一

弊端 use total 嚴重 之一 sts 內存條 秒殺 DC Redis 概述 在我們日常的Java Web開發中,無不都是使用數據庫來進行數據的存儲,由於一般的系統任務中通常不會存在高並發的情況,所以這樣看起來並沒有什麽問題,可是一旦涉及大數據量的需求,比如一些商品

golang-defer坑的本質

get 改變 在定義函數時 寄存器 局部變量 target var 理由 作者 本文節選自https://tiancaiamao.gitbooks.io/go-internals/content/zh/03.4.html 作者的分析非常透徹,從問題本質分析,就不會對de

SpringCloud(2)---SpringCloud入門

開發 span zipkin 集成 調用服務 data 但是 優點 難度 SpringCloud理解篇 一、微服務概述 1、什麽是微服務 目前的微服務並沒有一個統一的標準,一般是以業務來劃分將傳統的一站式應用,拆分成一個個的服務,徹底去耦合,一個微服

Python基礎語法

特定 文檔字符串 目前 特性 sta 邏輯運算符 path 之一 不能 【轉】Python基礎語法 學習一門編程語言,通常是學習該語言的以下幾個部分的內容: 基礎語法:如,變量的聲明與調用、基本輸出語句、代碼塊語法、註釋等; 數據類型:通常都為 數字、字符串、布爾

GoPanic函數

與此同時 沒有 異常 caller run 文件 絕對路徑 代碼 pre   panic(運行時恐慌)是一種只會在程序運行時才回拋出來的異常。在panic被拋出之後,如果沒有在程序裏添加任何保護措施的話,程序就會在打印出panic的詳情,終止運行。   舉個栗子 pack

Go錯誤處理

·  error型別是一個介面型別,也是一個Go語言的內建型別。在這個介面型別的宣告中只包含了一個方法Error。這個方法不接受任何引數,但是會返回一個string型別的結果。它的作用是返回錯誤資訊的字串表示形象。我們使用error型別的方式通常是,在函式宣告結果列表的最後,宣告一個該型別的結果。同時在呼叫這

Java基本Java語法,初學Java

常量: public static final double PI = 3.14159265358979323846; 函式: 將ang角度轉換成徑度 public static double toRadians(double ang)

Hadoop學習--第二:史上最詳細的Hadoop環境搭建

GitChat 作者:鳴宇淳 原文: 史上最詳細的Hadoop環境搭建 前言 Hadoop在大資料技術體系中的地位至關重要,Hadoop是大資料技術的基礎,對Hadoop基礎知識的掌握的紮實程度,會決定在大資料技術道路上走多遠。 這是一篇入門文章,Hadoop的學

Python關鍵語法-閉包:函式中的函式用法例項

本文例項講述了Python閉包的用法。分享給大家供大家參考,具體如下: Python函式中也可以定義函式,也就是閉包。跟js中的閉包概念其實差不多,舉個Python中閉包的例子。 def make_adder(addend): def adder(augend

shiro許可權框架——基礎

shiro是什麼 Apache Shiro是一個強大且易用的Java安全框架,有身份驗證、授權、密碼學和會話管理。使用Shiro的易於理解的API,您可以快速、輕鬆地獲得任何應用程式,從最小的移動應用程式到最大的網路和企業應用程式。 shiro的作用 Shiro 開發團隊稱為“應用程式的四

Pythonpython 基礎語法之列表、n維陣列的變換(取反(逆序)\切片等)

【筆記】 二維陣列取反: 執行a[::-1],上下行交換。同樣的看成一維陣列的話,一行就是一個元素。 執行a[:, ::-1],上下前後交換。相當於對行取逆序,對列取逆序。 a=np.arange(12).reshape(3,4) a array([[ 0, 1, 2, 3],

web搜尋引擎的語法

檢索表示式 介紹 示例 - 搜尋關鍵詞A的同時遮蔽關於關鍵詞B的資訊 apple -iphone | 同時搜尋關鍵詞多個關鍵詞, |可以用OR代替, OR需要大寫 apple|google, apple OR google “” 要求查詢結果要精確匹配,不包括演變形式 “Failu

goubuntu安裝

Linux下安裝Go環境 下載安裝包 wget https://dl.google.com/go/go1.11.4.linux-amd64.tar.gz 安裝 sudo tar -C /usr/local -zxv -f go1.11.4.lin

Jenkins定時構建語法

欄位有哪些 每行包含5個欄位,用製表符或空格隔開,從左至右依次是: 分 時 天 月 星期 每個欄位的取值範圍 分鐘 一小時中(0–59) 時 一天中 (0–23) 天 一個月中(1–31) 月 一年中 (1–12) 星期 一週中 (0 和 7 都代表星期日) 為了每個欄位可以取多個值,可以用下面操作

專欄 - Golang自學及專案實戰

Golang自學及專案實戰 一個偶然的機會讓我接觸到golang,被其能把很複雜的高效能開發變得簡單起來的優點深深吸引,從此一發不可收拾。。。 該專欄為我自學golang的一些重點總結以及專案中常遇到的一些問題,希望能吸引更多人

Go筆記一 | 工作區和GOPATH

核心知識 GOPATH的意義在與程式碼結構分層 Go語言原始碼的組織方式 以程式碼包為基本組織單位 程式碼包與目錄一一對應 目錄有子目錄,程式碼包也有子包 程式碼包中可以任意個.go 副檔名的原始碼檔案,需要被宣告為屬於同一個程式碼包

Go筆記三 | 庫原始碼檔案

庫原始碼檔案不能被直接執行,它僅用於存放程式實體。只要遵從 Go 語言規範,這些程式實體就可以被其他程式碼使用。 首發地址:庫原始碼檔案 核心知識 程式碼包宣告 程式碼包引用 模組級私有internal 程式實體是什麼? 在 Go 語言中,它是變數

如何讀一論文

轉載,原文地址 第一遍閱讀看結構。 第二遍閱讀看內容,不是細節。(寫調研看到這裡) 第三遍閱讀看細節,復現。在復現過程式中學習論文中的沒有說明的條件和假設。(重要) 重新看到了走向禿頂的路。 原文下載:《How to Read Paper》 如何讀一篇論文