2.1.变量定义

(1)第一个程序helloworld

package main

import(
"fmt"
) func main() {
fmt.Println("helloworld")
}

(2)变量的初始值

如果定义一个变量,没有赋值,会有一个默认的初始值

package main

import(
"fmt"
) func variableZeroValue(){
//定义两个变量,没有赋值
var a int
var s string
fmt.Printf("%d %q\n",a,s) //格式化输出
} func main() {
fmt.Println("helloworld")
variableZeroValue() //a,s初始值:0 ""
}

(3)变量的定义和赋值 

package main

import(
"fmt"
) func variableInitialValue(){
//变量的定义和赋值
var a, b int = 3,4
var s string = "derek"
fmt.Println(a,b,s)
} func variableShorter(){
//用冒号
d,e,f := 5,false,"zhang"
fmt.Println(d,e,f)
} func main() {
variableInitialValue() // 3 4 derek
variableShorter() // 5 false zhang
}

(4)使用var()集中定义变量

package main

import(
"fmt"
) //集中定义变量
var (
aa = 2
bb = true
cc = "jack"
) func main() { fmt.Println(aa,bb,cc) // 2 true jack
}

总结

  • 使用var关键字:var s1,s2 string = "zhang","derek"
  • 让编译器自动选择类型:var a,b,i,s1,s2 = true,false,3,"hello","world"
  • 使用冒号等于定义变量:a,b,i,s1,s2 := true,false,3,"hello","world",只能在函数内使用

2.2.内建变量类型

(1)类型

  • bool,string
  • (u)int,(u)int8,(u)int16,(u)int32,(u)int64,unitptr
  • byte,rune
  • float32,float64,complex64,comlex128

(2)强制类型转换

package main

import(
"fmt"
"math"
) func main() {
var a,b int = 3,4
// Sqrt必须接收float64类型,先把a,b平方的和转换成float64类型,然后在把结果转换成int类型
var c int = int(math.Sqrt(float64(a*a + b*b)))
fmt.Println(c) //5
}

2.3.常量与枚举

const数值如果不指定类型可以作为各种类型使用,也可以指定类型。

(1)常量的定义

package main

import(
"fmt"
) func main() {
//不指定类型,则可以作为各种类型使用
const a,b = 3,4
//指定为string类型,则为指定的类型
const str string = "derek"
//可以放在括号不用每次写const
const (
c = false
d = "jack"
)
fmt.Println(a,b,str) //3 4 derek
fmt.Println(c,d) //false jack
}

(2)枚举类型

package main

import(
"fmt"
) func main() {
const (
java = 0
python =1
golang = 2
)
fmt.Println(java,python,golang) //0 1 2
}

(3)使用iota自增值枚举类型

package main

import(
"fmt"
) func main() {
const (
java = iota //iota表示这组const自增值
python
golang
javascript
)
fmt.Println(java,python,golang,javascript) //0 1 2 3
}

2.4.条件语句

(1)if语句

if语句条件里面不需要括号

package main

import(
"fmt"
"io/ioutil"
) func main() {
const filename = "C:\\Users\\86158\\Desktop\\awesomeProject\\src\\abc.txt"
//ioutil.ReadFile:返回两个值,一个是读出的文件内容,一个是error信息
//if的条件里可以赋值
if contents,err := ioutil.ReadFile(filename); err != nil{
fmt.Println(err)
}else {
fmt.Printf("%s\n",contents)
}
//if条件里赋值的变量的作用域就在if语句里,像下面这样在if外面访问则报错
fmt.Println(contents)
}

(2)switch语句

  • switch后可以没有表达式
  • switch不需要break
  • 可以直接switch多个条件
package main

import(
"fmt"
) func grade(score int) string{
g := ""
switch {
case score < 0 || score > 100:
//报错信息
panic(fmt.Sprintf("错误的分数:%d",score))
case score < 60:
g = "D"
case score < 80:
g = "C"
case score < 90:
g = "B"
case score <= 100:
g = "A"
}
return g
} func main() {
fmt.Println(grade(2))
fmt.Println(grade(70))
fmt.Println(grade(83))
fmt.Println(grade(101)) //panic: 错误的分数:101
}

2.5.循环

for

  • for的条件里不需要括号
  • for的条件里可以省略初始条件,结束条件,递增表达式
package main

import "fmt"

func main() {
sum := 0
for i :=1; i <= 100; i++{
sum += i
}
fmt.Println(sum)
}

2.6.函数

特点:

  • 返回值类型写在最后面
  • 可返回多个值
  • 函数可以作为参数
  • 没有默认参数和可选参数

(1)基本用法

package main

import "fmt"

//函数名(函数参数,参数类型)返回值类型
func eval(a,b int, op string) int {
switch op {
case "+":
return a + b
case "-":
return a - b
case "*":
return a * b
case "/":
return a / b
default:
//错误信息
panic("unsupport operation: " + op)
}
} func main() {
fmt.Println(eval(3,5,"+")) //8
fmt.Println(eval(3,5,"*")) //15
fmt.Println(eval(3,5,"gg")) //panic: unsupport operation: gg
}

(2)两个返回值

package main

import "fmt"

//返回两个值
func div(a,b int) (q,r int){
return a / b, a % b
} func main() {
//接收两个值
q,r := div(13,3)
fmt.Println(q,r) //4 1
}

 只接收一个返回值

package main

import "fmt"

//返回两个值
func div(a,b int) (q,r int){
return a / b, a % b
} func main() {
//如果只想接收一个返回值,可以用“_”
q,_ := div(13,3)
fmt.Println(q) //4
}

2.7.指针

用法

package main

import "fmt"

func main() {
var a int = 2
var pa *int = &a
*pa = 3
fmt.Println(a) //3
}

  

最新文章

  1. Android ScrollView监听滑动到顶部和底部的两种方式(你可能不知道的细节)
  2. php实现的笛卡儿积
  3. 用C#读取txt文件的方法
  4. Anchor 对象
  5. popupwindow显示的位置 布局的右上角,标题栏下
  6. Android开发_Android数据的四种存储方式
  7. js动态向页面中添加表格
  8. The JSON request was too large to be deserialized
  9. Android学习笔记之LinearLayout
  10. Linux常用的配置文件整理
  11. css3中的动画效果
  12. c 语言的基本语法
  13. C#-之属性(2)
  14. 放球游戏B
  15. myeclipse使用hibernate5框架load延迟装载对象报错_$$_javassist_0 cannot be cast to javassist.util.proxy.Proxy
  16. TCP简介
  17. php最常见最经典的算法题
  18. loadrunner&#160;脚本开发-文件读写操作
  19. node.js初识11
  20. Windows 忘记登录密码解决方法 【摘抄于百度】

热门文章

  1. 数据库读写分离Master-Slave
  2. 【设计模式】结构型03外观模式(Facade Pattern)
  3. Netty源码分析-- 处理客户端接入请求(八)
  4. 关于String重写的hashcode的代码分析
  5. JVM监控jconsole
  6. bzoj3125: CITY 题解
  7. 缓存实践Cache Aside Pattern
  8. 【最小生成树之Prim算法】-C++
  9. [原创]mininet安装
  10. FC游戏修改教程(hack)小白文。