package main
import (
"fmt"
"io/ioutil"
"math"
"math/cmplx"
)
//函數(shù)外定義變量,必須使用關(guān)鍵字作為開頭捎迫,不能使用:=定義變量,作用域在包的內(nèi)部
var aa? =3
var bb? ="ddd"
//可以使用var ()? 來定義多個(gè)變量
var (
ss ="tt"
? dd =true
)
//不初始化蛹尝,編譯器自己賦空值
func variableZeroValue()? {
var a int
var s? string
fmt.Printf("%d %q\n",a,s)
}
//初始化
func variableInitialValue()? {
var? a,bint? =2,4
? var sstring? ="adc"
? fmt.Println(a,b,s)
}
//類型推斷
func variableTypeDeduction()? {
var a,b,c,d? =3,4,true,"dfg"
? fmt.Println(a,b,c,d)
}
//使用:= 定義變量的變量不能在使用:=賦值,要使用=賦值灿渴,并且類型一致
func variableShorter()? {
a,b,c,d :="a",1,true,4.9
? a ="字符串"
? fmt.Println(a,b,c,d)
}
/**內(nèi)建變量
bool string
(u)int (u)int8 (u)int16 (u)int32 (u)int64 uintptr指針
byte:8位 int8的別名
rune:go語言字符型 32位 int32的別名 4字節(jié)
float32 float64 complex64 complex128
*/
//歐拉公式
func euler()? {
//復(fù)數(shù)
//c := 3 + 4i
//fmt.Println(cmplx.Abs(c))
//complex64 實(shí)部和虛部是float32 complex128 實(shí)部和虛部是float64 導(dǎo)致值算出來不等于0
//fmt.Println(cmplx.Pow(math.E,1i *math.Pi) + 1)
//fmt.Println(cmplx.Exp(1i *math.Pi) + 1)
? fmt.Printf("%.3f\n",cmplx.Exp(1i * math.Pi) +1)
}
//go語言強(qiáng)制類型轉(zhuǎn)換
func triangle()? {
var? a,bint? =3,4
? var? c int
c = int(math.Sqrt(float64(a * a + b * b)))
fmt.Println(c)
}
//常量的定義,不用大寫驶拱,可以指定類型峡迷,也可以不指定,不指定類型a,b的類型是不確定的
//可以定義在包內(nèi)部棍矛,所有函數(shù)可以使用儡遮,const數(shù)值可以作為各種類型使用
func consts()? {
const(
filename ="gfgf.text"
? ? ? a,b =3,4
? )
var c int
c = int(math.Sqrt(a *a +b *b))
fmt.Println(filename,c)
}
//枚舉 iota表示自增值 “_”表示跳過? << 左移
func enums()? {
const (
cpp =iota
_
python
golang
js
? )
fmt.Println(cpp,python,golang,js)
//b,kb,mb,gb,tb,pb
? const (
b =1 << (10 *iota)
kb
mb
gb
tb
pb
? )
fmt.Println(b,kb,mb,gb,tb,pb)
}
//條件語句里可以賦值乳蛾,值的范圍在條件語句里
func iff()? {
const filename? ="abc.txt"
? //讀取文件函數(shù) ioutil.ReadFile()
//
//contents,err := ioutil.ReadFile(filename)
//if err != nil {
//? fmt.Println(err)
//} else {
//? fmt.Printf("%s\n",contents)
//}
? if contents,err := ioutil.ReadFile(filename); err != nil {
fmt.Println(err)
}else{
fmt.Printf("%s\n",contents)
}
}
//switch 不需要加break 會(huì)自動(dòng)加 除非使用fallthrough
func eval(a,b int,op string) int? {
var? result int
switch op {
case "+":
result = a + b
case "-":
result = a - b
case "*":
result = a * b
case "/":
result = a / b
default:
panic("unsupported operator:" + op)//報(bào)錯(cuò)
? }
return? result;
}
//switch后面可以不跟表達(dá)式,在case里跟判斷語句
func grade(score int) string? {
g :=""
? switch? {
case score <0 || score >100:
panic(fmt.Sprintf("wrong score: %d",score))
case score <60:
g ="F"
? case score <80:
g ="C"
? case score <90:
g ="B"
? case score <=100:
g ="A"
? }
return? g
}
func main() {
fmt.Println("hlleo go")
//
? variableZeroValue()
//
? variableInitialValue()
//
? variableTypeDeduction()
//
? variableShorter()
//
? fmt.Println(aa,bb,dd,ss)
//
? euler()
//
? triangle()
//
? consts()
//
? enums()
//
? iff()
//
? fmt.Println(
eval(10,2,"-"),
eval(10,2,"+"),
eval(10,2,"*"),
eval(10,2,"/"),
)
//
? fmt.Println(grade(0))
fmt.Println(grade(59))
fmt.Println(grade(70))
fmt.Println(grade(90))
fmt.Println(grade(100))
fmt.Println(grade(101))
}