package main import ( "fmt" "io/ioutil" "math" "math/cmplx" "strconv" ) //go 语言很特别 //没有对象 没有继承多态 没有泛型 没有try/catch // //有接口 函数式编程 csp并发模型(goroutine + channel) // 函数外面定义变量 必须 用 var 关键字 他没有全局的意思 只在包内用 var aa=3 var bb=4 //另一种写法 var ( cc = 6 dd = 5 ) //变量的定义 func variable(){ var a int var s string fmt.Printf("%d %q\n",a,s) } //变量赋值 func variableValue(){ var a,b int = 3, 4 var s string = "abc" fmt.Print(a,b,s) } //省略声明 变量类型 func variableVal(){ var a,b = 3, 4 var s = "abc" fmt.Print(a,b,s) } //简写声明变量 第一次定义变量 要用 :=来定义 第二次就可等于 就好 func variableShorter(){ a := 3 b := 4 fmt.Print(a,b) } //内置变量类型 // bool,string, int(u), int8(u), int16(u), int32(u), int64(u) uintper 指针 // byte(8位) rune(32位) // float32 float64 complex64 complex128 复数 // 复数的操作 Abs 复数的求和 func euler(){ c := 3+4i fmt.Print(cmplx.Abs(c)) fmt.Print( cmplx.Pow(math.E, 1i*math.Pi)+1) } //强制类型转换 func triangle(){ var a,b int =3,4 var c int c =int(math.Sqrt(float64(a*a+b*b))) fmt.Print(c) } //go 指针的学习 指针不能运算 // 值的传递 还是引用传递 // go语言只有值传递一种方式 // 值传递和指针怎么配合 // 交换两个变量的值 func swap(a,b *int){ // b 所指向的内容是a // a 所指向的内容是b *b,*a=*a,*b } //循环 1+100 5050 func getNum(){ sum := 0 for i:= 1;i<=100 ;i++ { sum+=i } fmt.Println(sum) } //整数转换二进制 // 少初始条件 func convertToBin(v int)string{ result := "" for ;v>0;v /=2 { result = strconv.Itoa(v%2)+result } return result } //for 所有的条件都少 func printFor(){ for { fmt.Print("abc") } } //常量的定义 // go语言 常量的定义一般不用大写 因为大写在go语言是有含义的 func consts(){ const filename = "abc.txt" const a,b int= 3,4 } //定义常量也可以一组的形式定义 func enums(){ const ( // iota 为自增 cpp = iota python golang javascript ) fmt.Println(cpp,javascript,python,golang) // iota 也可以参与运算 // b , kb,mb,gb,tb,pb const( b = 1 <<(10*iota) kb mb gb tb pb ) fmt.Print("\n") fmt.Println(b , kb,mb,gb,tb,pb) } //条件查询 if 条件里可以赋值 func getfile(){ const filename = "2018.12.6/abc.txt" contents, err := ioutil.ReadFile(filename) if err != nil{ fmt.Print(err) }else{ fmt.Printf("%s\n",contents) } } // 函数的定义 // switch // 默认不用加 break // 除非使用 fallthrough func getswitch(a,b int,op string) (c int){ switch op { case "+": c = a+b case "-": c = a-b case "*": c = a*b case "/": // 不想要第二个返回值 就用 _ 来代替 c, _ :=div(a,b) return c default: fmt.Print("输入有误") } return c } // 函数返回多个值 // 13 / 3 =4 ...1 func div(a,b int)(c,d int){ return a/b, a%b } //在函数里调用函数 如果外部函数定义了返回值为一个 而里面调用的返回值为两个 // 这样程序就会报错 需要通过两个变量来接收里面的返回值 // 但是外部返回值只需要一个 而不需要的那个返回值 可以用 _ 这个符号 来占位 这样程序就不会报错 func main() { fmt.Print("hello word") variable() variableValue() variableVal() variableShorter() fmt.Print(aa,bb) euler() triangle() //指针 a,b:=3,4 swap(&a,&b) fmt.Print(a,b) getNum() //整数转换二进制 fmt.Print( convertToBin(5), // 101 ) //死循环 //printFor() fmt.Print("\n") enums() getfile() //加减乘除 fmt.Print(getswitch(1,3,"+")) fmt.Print(getswitch(1,3,"-")) fmt.Print(div(13,4)) }