1.編譯 go build hello.go 2.go get gopl.io/ch1/helloworld 命令,就會從網上獲取代碼,並放到對應目錄中 下載的代碼會放在$GOPATH/src/gopl.io/ch1/helloworld目錄 3.Go語言不需要在語句或者聲明的末尾添加分號,除非一行 ...
1.編譯
go build hello.go
2.go get gopl.io/ch1/helloworld 命令,就會從網上獲取代碼,並放到對應目錄中
下載的代碼會放在$GOPATH/src/gopl.io/ch1/helloworld目錄
3.Go語言不需要在語句或者聲明的末尾添加分號,除非一行上有多條語句。
4.Go語言在代碼格式上採取了很強硬的態度。gofmt工具把代碼格式化為標準格式
gofmt -w hello.go 重寫回源文件
5.goimports,可以根據代碼需要, 自動地添加或刪除import聲明
go get golang.org/x/tools/cmd/goimports (被牆不能用)
命令行參數:
1.os包以跨平臺的方式,提供了一些與操作系統交互的函數和變數。程式的命令行參數可從os包的Args變數獲取;os包外部使用os.Args訪問該變數。
2.切片是Go語言的基礎概念,現在先把切片s當作數組元素序列, 序列的長度動態變化, 用s[i]訪問單個元素,用s[m:n]獲取子序列,序列的元素數目為len(s)
a = [1, 2, 3, 4, 5], a[0:3] = [1, 2, 3]
3.os.Args的第一個元素,os.Args[0], 是命令本身的名字,其他參數是os.Args[1:len(os.Args)] => os.Args[1:]
4.import導入兩個包,括弧括起來
5.Go語言只有for迴圈這一種迴圈語句
for initialization; condition; post {
}
for condition {
}
for {//無限迴圈
}
package main import ( "fmt" "os" ) func main() { //定義兩個string類型的變數 var s, sep string //短變數聲明i for i := 1; i < len(os.Args); i++ { s += sep + os.Args[i] sep = " " } fmt.Println(s) //練習 1.1: 修改echo程式,使其能夠列印os.Args[0],即被執行命令本身的名字 s1,sep1:="","" for i := 0; i < len(os.Args); i++ { s1 += sep1 + os.Args[i] sep1 = " " } fmt.Println(s1) //輸出 /tmp/go-build124823637/command-line-arguments/_obj/exe/echo1 tsh ni u bi }
6.for迴圈的另一種形式, 在某種數據類型的區間(range)上遍歷,如字元串或切片。
迴圈迭代,range產生一對值;索引以及在該索引處的元素值。
_空標識符丟棄索引,arg是索引所對應的值
7.使用strings包的Join函數
8.只是為了調試可以直接列印
fmt.Println(os.Args[1:])
package main import ( "fmt" "os" "strings" ) func main() { s, sep := "", "" //短變數聲明 //迴圈迭代,range產生一對值;索引以及在該索引處的元素值。 //_空標識符丟棄索引,arg是索引所對應的值 for _, arg := range os.Args[1:] { s += sep + arg sep = " " } fmt.Println(s) //使用strings包的Join函數 fmt.Println(strings.Join(os.Args[0:], " ")) //只是為了調試可以直接列印 fmt.Println(os.Args[1:]) //練習 1.2: 修改echo程式,使其列印每個參數的索引和值,每個一行。 s1 := "" sep1 := "\n" for index, arg := range os.Args[1:] { index := fmt.Sprintf("%d ", index) //int轉string s1 += index + arg s1 += sep1 } fmt.Println(s1) //輸出 0 tsh 1 niu 2 bi }