go语言学习(一):基本语法

go语言是静态语言,但不需要依赖库,且支持并发,支持垃圾回收,内置大量的库,
一.helloworld

//定义包名,在源文件中的第一行指明这个文件属于哪个包
//程序必须要有一个main包
package main

import "fmt"  //这个程序需要使用fmt包(的函数或其他元素),fmt包实现了格式化IO函数

func main() {  //func main()是程序开始执行的函数
    /* 这是我的第一个简单的程序 Println()会自动换行,*/
    //调用函数,大部分需要导入包
    fmt.Println("Hello, World!") //go语句结尾没有分号
}

注:每个工程(文件夹)只能有一个main函数
解决办法:
1.//go build xxx.go,编译go代码,生成一个可执行程序
//然后运行这个可执行程序 ./hello
2.直接go run xxx.go
二.变量声明

package main

import "fmt"  //导入包比需要使用

func main() {  //func main()是程序开始执行的函数
    //1.声明了变量,必须要使用
    //只声明没有初始化的变量,默认值为0
    //同一个{}里,声明的变量名唯一
    var a int
    fmt.Println("a = ", a) //go语句结尾没有分号

    //可同时声明多个变量
    var b, c int
    a = 10   //变量赋值
    fmt.Println("a = ", a)
    fmt.Println(b,c)

    //2.声明变量时同时赋值
    var d int = 10
    fmt.Println(d)

    //3.自动推导类型,必须初始化,通过初始化的值确定类型,同一变量名只能使用一次,用于初始化,但赋值可以使用多从
    f := 30
    //%T打印变量所属的类型
    fmt.Printf(" f type is %T\n",f)
}

printf和println区别

package main

import "fmt" //导入包比需要使用

func main() {  //func main()是程序开始执行的函数
   a :=10
   //一段一段处理,自动加换行
   fmt.Println("a =",a)

   //格式化输出,把a的内容放在%d的位置
   fmt.Printf("a = %d\n", a)

   b := 10
   c := 20
   fmt.Printf("a = %d, b= %d, c= %d",a, b, c)
}

匿名变量

package main

import "fmt" //导入包比需要使用

func test()(a, b, c int){
    return 1, 2, 3
}

func main() {  //func main()是程序开始执行的函数
   //多重赋值
   a, b := 10, 20
   //传统交换赋值
   var tmp int
   tmp = a
   a = b
   b = tmp
   fmt.Printf("a = %d, b = %d\n",a,b)

   //go语言交换赋值
   i := 10
   j := 20
   i, j = j, i
    fmt.Printf("i = %d, j = %d\n",i,j)

   //匿名变量,丢弃数据不处理, 匿名变量配合函数返回值使用
   tmp, _ = i, j
   fmt.Println(tmp)


   var c, d, e int
   c, d, e =test() //return 1,2,3
   fmt.Printf("a=%d,b=%d,a=%d\n",c,d,e)

    _, d, e =test() //return 1,2,3
    fmt.Printf("a=%d,b=%d,a=%d\n",c,d,e)
}

常量定义

package main

import "fmt" //导入包比需要使用

func main() {  //func main()是程序开始执行的函数
  //变量:程序运行期间,可以改变的量,变量声明需要var
  //常量,程序运行期间,不可以改变的量,变量声明需要const

    const a int = 10
    //a=20 err,常量不允许修改
    fmt.Println("a = ",a)

    const b = 10 //没有使用:=
    fmt.Println("b = ",b)

}
package main

import "fmt" 

func main() { 
   //不同类型变量的声明(定义)
   //var a int = 10
   //var b float64 = 3.14
   //a,b=10,3.14
   var (
      a int
      b float64
   )



   fmt.Println("a =",a)
   fmt.Println("b =",b)

   //const i int =10
   //const j float64 = 3.14
   const (
      i int =10
      j float64 = 3.14
   )
   //也可以自动推导类型
   //const (
   //   i =10
   //   j = 3.14
   //)
   fmt.Println("i =",i)
   fmt.Println("j =",j)

}

iota枚举

package main

import "fmt"

func main() {
   //1. iota常量自动生成器,每生成一行,自动累加1
   //2。iota给常量赋值时使用
   const(
      a=iota
      b=iota
      c=iota
   )
   fmt.Printf("a=%d, b=%d, c=%d\n", a, b, c)

   //3.iota遇到const,重置为0
   const d= iota
   fmt.Printf("d =%d\n",d)

   //4.可以只写一个iota
   const(
      a1=iota
      b1
      c1
   )
   fmt.Printf("a1=%d, b1=%d, c1=%d\n", a1, b1, c1)

   //5.如果是同一行,值都一样
   const(
      i=iota
      j1, j2 = iota, iota
      k= iota
   )
   fmt.Printf("i=%d,j1=%d,j2=%d, k=%d", i, j1, j2, k)
}

bool

package main

import "fmt"

func main() {
   var a bool
   a = true
   fmt.Println("a =", a)

   var b= true
   fmt.Println("b =", b)

   c := true
   fmt.Println("c =", c)
}

浮点型

package main

import "fmt"

func main() {
    var f1 float32
    f1 = 3.14
    fmt.Println("f1 =",f1)

    f2 := 3.14
    //f2 type is float64
     fmt.Printf("f2 type is %T\n",f2)
}

字符型

package main

import "fmt"

func main() {
    var ch byte
    //ch = 97
    ch = 'a'
    fmt.Printf("ch = %c,%d\n",ch,ch)

    //大写转小写,小写转大写,大小写相差32,小写大
    fmt.Printf("大写:%d, 小写:%d\n", 'A', 'a')
    fmt.Printf("大写转小写: %c\n", 'A'+32)
    fmt.Printf("小写转大写: %c\n", 'a'-32)

}

字符串型

func main() {
    var str1 string
    str1 = "abc"
    fmt.Println("str1 =",str1)

    //自动推导类型
    str2 := "mike"
    fmt.Printf("str2 类型是 %T\n", str2)

    //内建函数,len()可以测字符串的长度,有多少字符
    fmt.Println(len(str2))
    
   //字符单引号,字符串双引号
   //字符往往只有一个字符,转义字符除外;
   //字符串由一个或多个组成,字符串都隐藏了一个结束符,'\0'
   //var ch byte = 'a'
   var str string = "hello go"
   //只想操作字符串的某一个字符
   fmt.Printf("str[0] = %c,str[1] = %c\n", str[0], str[1])
}

输入

func main() {
   var a float32
   fmt.Printf("请输入变量a:")

   //阻塞等待用户的输入
   //fmt.Scanf("%f", &a)
   fmt.Scan(&a)
   fmt.Println("a =",a)
}

if判断

func main() {
   //if支持一个初始化语句,用分号与条件相隔
   if a := 21;a == 10{
      fmt.Println("a == 10")
   } else if a < 10{
      fmt.Println("a < 10")
   } else if a > 10 {
      fmt.Println("a > 10")
   } else {
      fmt.Println("这是不可能的")
   }
}

switch语句

func main() {
   var num int
   //默认包含break;fallthrough与break相反,不跳出switch
   fmt.Scan(&num)
   switch num {
   case 1:
      fmt.Println("1111111")
      fallthrough
   case 2:
      fmt.Println("222222")
      fallthrough
   case 3:
      fmt.Println("33333")
      fallthrough
   case 4:
      fmt.Println("44444")
      fallthrough

   default:
      fmt.Println("55555")
   }
}

score :=85
   switch{  //可以没有条件
   case score >60:
      fmt.Println("及格")
   default:
      fmt.Println("不及格")
   }

for循环

func main() {
   //sum := 0
   //for i:=1;i<=100;i++{
   //   sum++
   //}
   //fmt.Println(sum)
   //
   //str := "abc"
   //for i:=0;i<len(str);i++{
   //   fmt.Printf("%c",str[i])
   //}

   //迭代打印每个元素,默认返回两个值
   str := "abc"
   for i,data := range str{
       fmt.Printf("str[%d]=%c\n", i, data)
   }

   numbers := [6]int{1, 2, 3, 5}
   for i,x:= range numbers {
      fmt.Printf("第 %d 位 x 的值 = %d\n", i,x)
   }
}

猜你喜欢

转载自blog.csdn.net/weixin_43011810/article/details/84663742