GO基础学习1

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))
}

你可能感兴趣的:(go)