【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:
...
}
相關推薦
【Go】golang初級語法篇
1. Go 基礎 package main //每一個go檔案開頭都應該宣告包名,一個go專案需要有一個main包 import ( //匯入該go檔案依賴的外部包 "fmt" )
【Python】python基礎語法 編碼
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基礎語法 學習一門編程語言,通常是學習該語言的以下幾個部分的內容: 基礎語法:如,變量的聲明與調用、基本輸出語句、代碼塊語法、註釋等; 數據類型:通常都為 數字、字符串、布爾
【Go】Panic函數
與此同時 沒有 異常 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 開發團隊稱為“應用程式的四
【Python】python 基礎語法之列表、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
【go】ubuntu安裝
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》 如何讀一篇論文