Go語言初學筆記-和Python的區別

來源:互聯網
上載者:User

Go誕生於Google, 是由以下三位電腦領域的大師寫的

Go的做著

    由於出身名門,Go在誕生之初就吸引了大批開發人員的關注。誕生十年以來,已經有很多基於Go的應用,一直有傳言Go在將來是要取代現在Java的位置。對於一門只有十年歷史的新語言,Go的發展勢頭是相當迅猛的。國外的docker就是用Go寫的,國內的七牛團隊廣泛使用Go。

而今如火如荼的區塊鏈技術更是將Go推上了熱潮。IOT裝置連線協定也是Go語言開發技術居多。由此可見未來是屬於Go和Python的天下。

go環境搭建

在官網下載go的安裝包

如果是mac,可直接用brew安裝:

brew intall go

查看go版本

$ go version

go version go1.10.3 darwin/amd64

go開發編輯器

關於編輯器,推薦使用jetbrains出品的golang

第一個go程式

按照官網的demo,運行第一個go程式

建立hello.go檔案

package main

import "fmt"

func main() {

    fmt.Println("Hello, 世界")

}

運行go可以有兩種方式:

類似於python,php這樣的指令碼語言,直接運行,一步到位

go run hello.go

如java,c++ 一樣,要進行編譯,再運行編譯輸出的可執行檔

$ go build hello.go # 產生可執行檔 hello

$ ls

hello    hello.go

$ ./hello # 運行可執行檔,運行速度極快

Hello, 世界

    go是一門有著文法潔癖的語言,如強制規定了大括弧的寫法。長期以來,關於大括弧是否要另起一行,是程式員界的聖戰,且這個聖戰跨越了語言,作業系統,編輯器。戰鬥雙方多年來廝殺無數回合,不分勝負。python之父Guido van Rossum直接取消了大括弧,完全採用縮排,繞過了聖戰。與之相比,go就顯得很霸道了,直接下了死命令: "大括弧只能在當前行開始,不能另起一行,另起一行是異教徒,直接編譯出錯!" 讓我們來試下。

對於另起一行的強迫症程式員,想用go惟有屈服。此外,如果程式中有冗餘變數,或引入了沒有用到的包,都會報錯

package main

import "fmt" // 引入了fmt包,但沒有使用

func main() {

}

報錯:

$ go build hello.go

# command-line-arguments

./hello.go:3:8: imported and not used: "fmt"


go的設計理念既簡潔又嚴謹,用強制性的規則保證了代碼的一致性。

變數

go在定義變數的規範上,有些反人類。c++, java 都是在變數名之前聲明資料類型,而go卻別出心裁的將資料類型聲明置於變數名後面。

命名規則

變數的命名規則:以字母或底線開頭,對大小寫敏感。

Go內建關鍵字共25個


Go語言預定義標識符(區分大小寫)共38個


Go的注釋方法,和其他大多語言一樣

// :單行注釋

/* */ :多行注釋

Go程式的一般結構

//當前程式的包名

package main

//匯入其它的包

import "fmt"

//全部變數的聲明與賦值

var name = "gopher"

//一般類型的聲明

type newType int

//結構的聲明

type gopher struct{}

//介面的聲明

type golang interface{}

//由main函數作為程式進入點啟動

func main() {

fmt.Println("Hello World!")

}


.包的匯入

別名:

import std "fmt"

省略調用(這樣可以不用寫包名,直接調用):

import . "fmt"

初始化,但不調用:

import _ "github.com/go-sql-driver/mysql"

可見度規則

只有首字母為大寫的才能被其它包調用(類似物件導向裡面的屬性public 和private)

範圍

1、在代碼塊聲明的變數,只在塊內有效

2、在函數內部聲明的變數,只在函數內有效

3、在函數外部聲明的變數,在整個包內都有效。如果變數名稱是大寫的,即在整個程式中都有效


4、如果變數名要共用到其他包,就需要將包名改成大寫,建立以下目錄結構:

$ tree -L 2

├── main

│  └── main.go

└── test

    └── test.go


main.go

package main

import (

    "fmt"

    "../test" // 引入test包

)

func main() {

    fmt.Println(test.NAME) // 擷取test包的NAME變數

}


test.go

package test

var NAME = "myname" // 變數名大寫,才能被其他包引用,類似於java中的public關鍵字

運行結果

go run main/main.go

myname

你可以試下將test中的NAME改為name,go會報錯,小寫變數是模組的私人變數,其他模組無法引用

常量與運算子

1.常量的定義

常量的值在編譯時間就已經確認

常量的定義格式與變數基本相同

等號右側必須是常量或者常量運算式

常量運算式中的函數必須是內建函數

//定義單個常量

const a int = 1

const b = "A"

const (

    text = "123"

    length = len(text)

    num = b * 20

)

//同時定義多個變數

const i, j, k = 1, "2", "3"

const (

    text2 ,length2, num2 = "456", len(text2),  k* 10

)

2.常量的初始化規則

在定義常量組時,如果不提供初始值,則表示使用上行的運算式

var a = 1

const (

    b  = a

    //此時報錯,因為全域變數在編譯時間不能確定值,常量必須是編譯時間能確定值的或使用內建函數獲得的值(eg:len())

)

const (

    a = "A"

    b

    c

    //此時 a,b,c都為"A"

)

const (

    a, b = 1, "A"

    c, d

    //a,c為1,b,d為"A"。此時注意下行的常量個數必須與上行數量保持一致

)

3.常量的枚舉

使用相同的運算式不代表具有相同的值

iota是常量的計數器,從0開始,組中每定義1個常量自動遞增1

通過初始化規則與iota可以達到枚舉的效果

每遇到一個const關鍵字,iota就會重設為0

const (

    a = "A"

    b

    c = iota

    d        //d的值為3,因為在常量組中,定義了4個變數所以iota計數器從0開始計數4次,所以為3

)

4.運算子

//優先順序從高到低     

*  /  %  <<  >>  &  &^

=  -  |  ^   

==  !=  <  <=  >= >

&&

||

例子:

/*

6的二進位:0110       第一個

10的二進位:1011       第二個

---------

&  0010  = 2    (兩個都是1才為1)

|  1111  = 15   (一個是1就是1)

^  1101  = 13   (兩個只有一個是1才是1)

$^ 0100  = 4    (第二個為1則是0,否則與第一位相同)

*/

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.