Go基础编程---基本类型

Go语言

1、程序的一般结构

  • go程序是通过package来组织的,
  • 只有package名称为main的包可以包含main函数,
  • 一个可执行程序有且仅有一个main包

2、Go导入package的格式

  • 引包后若未调用其中的函数或者类型,将编译出错
第一种
import "fmt"
----------------------
第二种
import(
  fm  "fmt"   //起别名,可以使用 fm.Println("xx")
  o "math"  //起别名,可以使用 o.Min()
  . "fmt"   // 可以省略调用 直接 Println("xxx"),不建议使用
)

3、可见性规则

  • Go中由大小写决定该常量、变量、类型、接口、结构、或函数 是否可以被外部包所调用:
  • 约定函数名首字母小写即为 private 大写即为public

Go的基本类型:

  • bool :1字节,true or false 和js不同,不可以用数字代表他们
  • 整型 :int / uint 根据平台可能问32或者64位
  • 8位整型: int8 / uint8 长度:1字节,取值范围-128~127/0~255
  • 字节型:byte(uint8别名)
  • 16位整型:int16 / uint16 长度2字节,范围-32768~32767/0~65535
  • 32位整型:int32(rune)/uint32 长度:4字节
  • 64位整型:int64/uint64 长度:8字节
  • 浮点型:float32/float64 长度:4/8字节 小数位:精确到7/15小数位
  • 复数:complex64/complex128 长度:8/16字节
  • 其它值类型:array、struct、string
  • 引用类型:slice、map、chan
  • 接口类型:inteface
  • 函数类型:func

1、类型零值
零值并不等于空值,而是当变量被声明为某种类型后的默认值,通常情况下值类型的默认值为0,bool为false,string为空字符串


Go的基础类型.png

变量的声明和赋值

变量的声明方式:var 变量名 类型

var  i   int  // 变量声明了必须要用,否则报错,同一个作用域内变量声明唯一
var  a,b  int  // 同时声明多个变量

// 声明同时赋值
var  i int = 10 

//自动推导类型,必须初始化,通过初始化的值确定类型
c := 10 
var   c = 10 // 这也是自动推导类型
fmt.Printf("c type  is  %T", c )  // %T打印变量所属类型

// Printf 和Println的区别
Println("a = " ,a)  //自动加换行
Printf("a = %d " ,a) // 格式化输出,(%T-输出类型) (%s-字符串输出)(%d-整型输出)(%c-字符输出)

//多重赋值和匿名变量
// 交换2个变量的值
  a,b := 1,2
  a,b = b, a // ----> a=2, b=1 
// 匿名变量
  var temp  int 
  temp, _  = a, b  // ------> temp =1,b的值就被抛弃了,_为匿名变量,要配合函数的返回值使用才有用处
  eg: func  test(a,b,c int)(int,int,int){
              return 1,2,3
        }
        var  c,d,e int
        c,d,e = test()    // c = 1, d = 2, e = 3 
        _,d,_ = test()   //  d = 2

// 多个变量不同类型的定义:
var (
   a  int     // a int = 10 还可以赋值
   b  float64
   c   string
)
自动推导类型
var (
   a  = 1
   b  = 12.2
   c   = "test"
)

常量的使用

常量声明方式: const 常量名 常量类型 = 值 (写了无法改变)

const  a  int  = 10 // 声明式
const  b = 11.2  //自动推导式  没有使用 b := ,这是和 变量的推导式不一样的地方
fmt.Printf("b type is %T \n", b)  // => float64因为比float32精度更高

// 多个常量不同类型的定义:
const (
   a  int = 1
   b  float64 = 11.33
   c   string  = "test"
)
// 自动推导类型
cosnt(
    a = 1
    b = 11.11
)

iota 枚举

含义:iota 常量自动生成器,每个一行,自动累加1,给常量赋值使用,iota yudao const重置为0

cosnt (
   a = iota // a = 0
   b = iota // b= 1
   c = iota // c = 2
)
cosnt (
   a1  = iota // a1 = 0 
   b1            // b1 = 1
   c1
)
const (
    a1  = iota  // 0
    a2,a3,a4 = iota,iota,iota  //全是1
    a5 = iota   // 2
)

字符串类型和字符类型的区别

使用内建函数len() 能得到字符串的长度。
字符串string:“” ,由字符组成
字符char:‘’
字符串都是隐藏了一个结束符' \0'  // str = "a"  由'a' 和'\0'组成一个字符串可以通过 atr[0] 下标访问

复数类型

形如a+bi(a,b均为实数)的数称为复数,其中a称为实部,b称为虚部

var  t complex128  // 声明
t  = 1.2 + 2.34i      // 赋值  = > (1.2+2.34i)
通过内建函数  real()  取实部,imag() 取虚部
fmt.Println("实部为",real(t), "虚部为",imag(t))

格式化输出 ------ 输入

格式化输出

a ,b := 1,2
fmt.Printf("%T,%T",a) 
%T // 操作变量的所属类型
%d  // 整型格式
%v  // 自动匹配格式输出
%c   // 字符格式
%f   // 浮点数格式
%s  // 字符串格式

用户输入

var a int
fmt.Scanf("%d",&a)  // 别忘了 &
简单写法 fmt.Scan(&a)

类型转换

bool和int之间不能互转,因为他们是不兼容类型
byte 能转为 int,因为字符类型本质就是整型

var  a  byte 
var  b  int
a = 10
b = byte( a )
fmt.Println( " b is ", b)  报错//  (type byte) as type int in assignment

类型别名:

别名形式: type 类型别名 类型 eg: type bigint int64 // 使用 var a bigint === var a int64

运算符

  • 、- 、 *、 / 、 %(取余)、 ++ (只有a ++ ,没有 ++a)、 -- (和++一样)
    == 、!=、>、 <、 <=、 >=
    !(非)、&&(与)、|| (或)
    & (按位与)、|(按位或)、^(异或)、<<(左移)、>>(右移):位运算符


    运算符的优先级.png

流程控制

if

a := 1
if  a == 1{
    fmt.Println('ok')
}
// if支持一个初始化语句,初始化语句和判断条件以分号分割
if  a :=10; a==10{
   fmt.Println('ok')
}
// if-else
if a:=10; a==10{
}else{}

//if - else if -else if - else
if a:=10; a==10{
}else if  a > 10{
}else if  a < 10{
}else{}

switch

num := 1
switch num {
   case 1:
        fmt.Println("1")
        break  // go默认实现了break,可以写可以不写
        fallthrough  // 不跳出switch,后面的第一个case无条件执行
   case 2,3,4:
        fmt.Println("2")
   ....
   default:
         fmt.Println("xx")
}

// 支持一个初始化语句,初始化语句后用分号分割,也可以没有任何
switch num:=1; num {
}
score := 21
switch {
  case  score > 90:
      xxxx
   ......
}

for 初始化条件; 判断条件; 条件变化{}

for  i:=1; i<=100; i++{
}
for  {  // 死循环
}
// 通过for 打印每个字符:
str := "test"
for i :=0; i < len(str); i++{
    fmt.Println("%s",str[i])
}
//通过迭代改写, range 默认返回2个值,一个是元素的位置,一个是元素本身
for  i,v  :=range str {
    fmt.Println("%s",v)
}
另外种写法
for  i := range str {    // 类似于  for  i,_  := range str
    fmt.Println("%s",str[i])
}

break 和continue 和 goto

break可以用于for、switch、select,而continue仅能用于for循环

i := 1
for {
  i ++
  if  i ==5{
      break  // 跳出最近的循环,continue跳过本次循环,执行下次循环
  }
}

// goto关键字,aa为用户起的标签名字,goto可以任何地方使用,但是不能跨函数间使用
func main(){
 goto aa
   fmt.Print("11111")
   aa:
     fmt.Print("xxx")
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,383评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,522评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,852评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,621评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,741评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,929评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,076评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,803评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,265评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,582评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,716评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,395评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,039评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,027评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,488评论 2 361
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,612评论 2 350

推荐阅读更多精彩内容