【GO學習二】包,函數,常量和變量

主要介紹go語言的基本元素,包引入,變量,函數聲明golang

引入包:

go語言經過import引入包
最佳實踐:import順序:系統package,第三方package,程序本身的package數據庫

package main

import (
   "fmt"
   "math"
)

func main() {
   fmt.Printf("math test number %g ",math.Sqrt(7))
}


# 運行輸出
cuixiaozhuai:main cuixiaohuan$ ./hello
math test number 2.6457513110645907

函數定義

go中函數能夠沒有參數或者接受多個參數express

基本格式

func xx(AA type,aa) Type {
}
package main

import (
   "fmt"
)

func funcNoParams() string {
   return "Hello no params func"
}

func add(x int, y int) int {
   return x + y
}
func main() {
   fmt.Println(funcNoParams())
   fmt.Println(add(3, 3))
}

cuixiaozhuai:main cuixiaohuan$ ./hello
Hello no params func
6

func 能夠多值返回

func swap(a, b string) (string, string) {
   return b, a
}

func main() {
   a, b := swap("cuihuan_first", "cuihuan_second");
   fmt.Println(a, b)
}

cuixiaozhuai:main cuixiaohuan$ ./hello
cuihuan_second cuihuan_first

變量操做

go 中經過var 定義變量,參數在前,類型在後c#

var boolVal, boolVal2 bool

func main() {
   var intVal int
   var stringVal string
   fmt.Println(boolVal, boolVal2, intVal, stringVal)
}

cuixiaozhuai:main cuixiaohuan$ ./hello
false false 0

變量默認值

沒有賦值的時候會給上默認值。函數

var boolVal, boolVal2 bool = true, false

func main() {
   // 聲明類型
   var intVal int = 33
   var stringVal string = "xiaozhuai string"
   fmt.Println(boolVal, boolVal2, intVal, stringVal)

   // 不聲明類型
   var undefineType1,undefineType2,undefineType3 = "yo yo yo","qiekenao",666
   fmt.Println(undefineType1, undefineType2, undefineType3)
}

cuixiaozhuai:main cuixiaohuan$ ./hello
true false 33 xiaozhuai string
yo yo yo qiekenao 666

:= 賦值

函數中的賦值能夠用 :=代替var 【:= 標示聲明又賦值,可是隻能用於函數內】ui

var boolVal, boolVal2 bool = true, false

func main() {
   // 聲明類型
   var intVal int = 33
   var stringVal string = "xiaozhuai string"
   fmt.Println(boolVal, boolVal2, intVal, stringVal)

   // 不聲明類型 := 聲明賦值
   undefineType1,undefineType2,undefineType3 := "yo yo yo","qiekenao",666
   fmt.Println(undefineType1, undefineType2, undefineType3)
}

注意:= 簡介賦值,可是沒法,聲明,賦值,定義類型。和var的區別
函數外,必須用var func等等code

變量基本類型

func main() {

   // go 變量所有類型和默認值
   var boolVal bool
   fmt.Println("bool default:",boolVal)

   var stringVal string
   fmt.Println("string default:",stringVal)

   // int 在32位上默認32 64位默認64,uint 和 uintptr相似
   var intVal int
   var int8Val int8
   var int16Val int16
   var int32Val int32
   var int64Val int64
   fmt.Println("int default:",intVal)
   fmt.Println("int8 default:",int8Val)
   fmt.Println("int16 default:",int16Val)
   fmt.Println("int32 default:",int32Val)
   fmt.Println("int64 default:",int64Val)
   fmt.Println("max int 64:", uint64(1<<64-1))

   var uintVal uint
   var uint8Val uint8
   var uint16Val uint16
   var uint32Val uint32
   var uint64Val uint64
   var uintptrVal uintptr
   fmt.Println("uint default:",uintVal)
   fmt.Println("uint8 default:",uint8Val)
   fmt.Println("uint16 default:",uint16Val)
   fmt.Println("uint32 default:",uint32Val)
   fmt.Println("uint64 default:",uint64Val)
   fmt.Println("uintptr default:",uintptrVal)

   // uint8 別名
   var byteVal byte
   fmt.Println("byte default:",byteVal)

   // int 32 別名,表明一個unicode
   var runeVal rune
   fmt.Println("rune default:",runeVal)

   // int 32 別名,表明一個unicode
   var floatVal float32
   fmt.Println("floatVal default:",floatVal)

   // int 32 別名,表明一個unicode
   var complexVal complex64
   fmt.Println("complex64Val default:",complexVal)
}

cuixiaozhuai:main cuixiaohuan$ ./hello
bool default: false
string default:
int default: 0
int8 default: 0
int16 default: 0
int32 default: 0
int64 default: 0
max int 64: 18446744073709551615
uint default: 0
uint8 default: 0
uint16 default: 0
uint32 default: 0
uint64 default: 0
uintptr default: 0
byte default: 0
rune default: 0
floatVal default: 0
complex64Val default: (0+0i)

int 類型的零值 是0 bool 默認false 字符串爲」" 空字符串unicode

18446744073709551615 byte 到底多大 【2097152TB】
int 64 能夠表示200wTB的數據,那麼問題來了,PB的數據如何表示,float
這裏也能夠通俗的理解下:數據庫中的int(11)類型做爲主鍵,基本不用擔憂滿,200wTB*8 的數據量,足以文檔

變量類型推導:

func main() {
   v := 666
   f := 666.666
   s := "string 666"
   i := v
   fmt.Printf("666 is of type %T\n", v)
   fmt.Printf("666.666 is of type %T\n", f)
   fmt.Printf("'string666' is of type %T\n", s)
   fmt.Printf("傳遞 is of type %T\n", i)
}

# 須要注意的是,go中屬於強類型,一旦定義以後就不容許改變爲其餘類型。
cuixiaozhuai:main cuixiaohuan$ ./hello
666 is of type int
666.666 is of type float64
'string666' is of type string
傳遞 is of type int

另外變量的官方參考文檔:
https://golang.org/ref/spec#C...字符串

常量:const

go中常量不能用:=
go中常量能夠是字符,字符串,布爾和數字類型的值

const PI = 3.14

func main() {
   const test = "test const";
   fmt.Println(test, PI);
}
cuixiaozhuai:main cuixiaohuan$ ./hello
test const 3.14
相關文章
相關標籤/搜索