1、變數定義的幾種方式 如:
//方式一:普通定義 var a int = 1 fmt.Println("a = ", a) //方式二:類型推導 var b = 10 fmt.Println("b = ", b) //方式三:省略var name := "tom" fmt.Println("name = ", name) //多變數聲明 var n1, n2, n3 int fmt.Println("n1 = ",n1 ,"n2 = ", n2,"n3 = ",n3) var n4, name1, n5 = 100, "tom", 888 fmt.Println("n4 = ",n4 ,"name1 = ", name1,"n5 = ",n5) n6, name2, n7 := 100, "tom", 888 fmt.Println("n6 = ",n6 ,"name2 = ", name2,"n7 = ",n7)
2、go語言定義的變數或引入的包沒有使用的話不能編譯通過,可以使用忽略保留定義和包引入 如:
package main import ( "fmt" _ "bytes" //忽略bytes包 ) func main () { var num1 int = 10 _ = num1 //忽略變數 fmt.Println("hello world") }
3、自動整理格式化代碼指令
//自動整理格式化輸出linux~# gofmt hello.go package mainimport "fmt"func main() { fmt.Println("hello world")}//將整理格式化後的類容儲存檔案linux~# gofmt -w hello.go
4、大括弧不能換行
//正確的func main () { fmt.Println("hello world")}//錯誤的func main (){ fmt.Println("hello world")}
5、變數多值的返回與接收
package mainimport ( "fmt" )func main () { var num1 int = 10 var num2 int = 1 //接收兩個值 sum , sub := getSumAndSub(num1, num2) fmt.Println("sum =",sum, "sub =", sub) //只接收一個值 sum0 , _ := getSumAndSub(num1, num2) fmt.Println("sum =",sum0)}func getSumAndSub(num1 int, num2 int) (int, int) { sum := num1 + num2 sub := num1 - num2 return sum, sub}
6、go沒有字元類型(char),一般用byte類型來表示,並且go中的編碼是統一使用utf8,每個字元都會有一個固定的碼值
//go沒有字元類型 var c1 byte = 'a' var c2 byte = '1' //輸出的都是碼值 fmt.Println("c1", c1, "c2", c2) //輸出對應的字元 fmt.Printf("c1=%c c2=%c", c1, c2) //漢字 var c3 byte = '被'//溢出 fmt.Printf("c3=%c c3碼值=%d", c3, c3) var c4 int = '被' fmt.Printf("c4=%c c4碼值=%d", c4, c4) //輸出碼值對應的字元 var c5 int = 22269 fmt.Printf("c5=%c", c5)
7、字串(string)一旦賦值就不能通過下標來修改
var str2 = "hello" //str2[0] = 'a' //報錯
8、以字串原生方式輸出
var str string = `每個生命的方式是自然界一種力的方式。有些人的生命像沉靜的湖,有些像白雲飄蕩的一望無際的天空,有些像豐腴富饒的平原,有些像斷斷續續的山峰。我覺得約翰·克利斯朵夫的生命像一條河。 ——羅曼.羅蘭《約翰·克利斯朵夫》` fmt.Println(str)
9、字串+號拼接
//加號放在上一行末尾 str4 := "hello" + "world" fmt.Println("str4 = ", str4)
10、與Java、c相比go的不同類型資料之間轉換需要強制轉換(顯示轉換)
var i int32 = 10 var f1 float32 = float32(i) fmt.Println("f1 = ", f1) var n1 int32 = 1 var n2 int8 var n3 int8 n2 = int8(n1) + 127 //編譯能過,但結果溢出 //n3 = int(n1) + 128 //n3是int8 報錯 fmt.Println("n1 =", n1, "n2 =", n2," n3 =",n3)
11、string類型與其他基本類型之間的互相轉換
其他基礎資料型別 (Elementary Data Type)轉string
//第一種方式 fmt.Sprintf str = fmt.Sprintf("%d", num1) fmt.Printf("str type %T str=%v\n", str, str) str = fmt.Sprintf("%f", num2) fmt.Printf("str type %T str=%v\n", str, str) str = fmt.Sprintf("%t", b) fmt.Printf("str type %T str=%v\n", str, str) str = fmt.Sprintf("%c", ch) fmt.Printf("str type %T str=%v\n", str, str) //第二種方式 strconv str = strconv.FormatInt(int64(num1), 10) fmt.Printf("str type %T str=%v\n", str, str)
string類型轉其他基礎資料型別 (Elementary Data Type)
var str1 string = "true" var b bool b, _ = strconv.ParseBool(str1) fmt.Printf("b type %T b=%v\n", b, b) var str2 string = "123456" var n1 int64 n1, _ = strconv.ParseInt(str2, 10, 64) fmt.Printf("n1 type %T n1=%v\n", n1, n1) var str3 string = "123dd456" var n2 int64 n2, _ = strconv.ParseInt(str3, 10, 64) fmt.Printf("n1 type %T n1=%v\n", n2, n2) var str4 string = "123" var n3 int64 n3, _ = strconv.ParseInt(str4, 10, 64) n5 := int(n3) fmt.Printf("n3 type %T n1=%v\n", n3, n3) fmt.Printf("n5 type %T n1=%v\n", n5, n5) var str5 string = "123.456" var n4 float64 n4, _ = strconv.ParseFloat(str5, 64) fmt.Printf("n1 type %T n1=%v\n", n4, n4)
12、包內變數名和函數名以及常量名,首字母大寫為公開方法(相當於其他語言的public)其他包可使用,首字母小寫為私人方法(相當於其他語言的private)其他包不能使用
var HeroName string = "張飛" //公用 publicvar ambitiousName string = "曹操" //私人 private
13、只有i++和i--,並且只能單獨使用不能賦值
//++ -- 只能獨立使用 var i = 8 i++ fmt.Println("i =",i) i-- fmt.Println("i =",i) //錯誤使用 ++i //錯誤 --i //錯誤 var j int; j = i++ //錯誤 if i++ > 10 { //錯誤 return }