开箱一个Go语言

前言

一学期一度的课程设计来咯,这次Web课程设计,依旧是各种xxx管理系统,继续拿PHP搞一通很快就搞完了,没啥意思(其实后面如果go不下去,可能会PHP真香)。准备用Beego,目前的认知的是一种为微服务而生的框架。先开箱Go,了解基本语法。

下面是开箱的全过程。

go学习笔记

语言变量

  1. import一个包之后,不能不使用,否则应该写作 import _ "fmt"

  2. 正括号不能写到下一行

  3. 声明了变量,必须要使用,否则会编译错误

  4. ''单引号,指的是rune类型,也就是C中的char。var a = 'a'

  5. Println: 可以打印出字符串,和变量,自带换行。

  6. Printf: 只可以打印出格式化的字符串,可以输出字符串类型的变量,不可以输出整形变量和整形

  7. int、string、bool没有赋值时,分别对应0,,false

  8. fmt.Printf("%v %v %v %q\n", int, float64, bool, string)

  9. := 是声明并赋值,并且系统自动推断类型,不需要var关键字。如d := 100 ,d 不能是已经声明过的

  10. 这种因式分解关键字的写法一般用于声明全局变量

    var (
            a int
            b bool
        )
    
  11. 多变量可以在同一行进行赋值,如:

    var a, b int
    var c string
    a, b, c = 5, 7, "abc"
    // 如果没有被调用,可以直接
    a, b, c := 5, 7, "abc"
    
  12. 引用类型写作 (ref)r1,r1就为引用类型的变量

  13. 空白标识符:

    func main() {
      _,numb,strs := numbers() //只获取函数返回值的后两个
      fmt.Println(numb,strs)
    }
    
    //一个可以返回多个值的函数
    func numbers()(int,int,string){
      a , b , c := 1 , 2 , "str"
      return a,b,c
    }
    

语言常量

可以理解为静态变量
常量的定义格式:

const identifier [type] = value
const b string = "abc" // 显式
const b = "abc" // 隐式

常量还可以用作枚举:

const (
    Unknown = 0
    Female = 1
    Male = 2
)

iota

iota,特殊常量,可以认为是一个可以被编译器修改的常量。
iota 在 const关键字出现时将被重置为 0(const 内部的第一行之前),const 中每新增一行常量声明将使 iota 计数一次(iota 可理解为 const 语句块中的行索引)。
第一个 iota 等于 0,每当 iota 在新的一行被使用时,它的值都会自动加 1;所以 a=0, b=1, c=2 可以简写为如下形式:

const (
    a = iota
    b
    c
)

牛掰但是还没理解的用法:传送门,看最后几行

远算符

加减乘除什么的都一样用
位运算符号,参见菜鸟教程
同C,有取地址符号&,和指针变量*

键盘输入

fmt.Scan(&b)

条件语句

if

不写括号

if a > 0 {
    if a == 3 {
        ///
    }
    ///
} else {
    ///
}

switch

默认case后面自动执行break,
使用fallthrough,会强制执行后面的 case 语句,fallthrough 不会判断下一条 case 的表达式结果是否为 true传送门的最后。

var grade string = "B"
var marks int = 90

switch marks {
  case 90: 
    grade = "A"
    fallthrough
  case 80: grade = "B"
  case 50,60,70 : grade = "C"
  default: grade = "D"  
}

用于判断某个 interface 变量中实际存储的变量类型

var x interface{}
     
switch i := x.(type) {
  case nil:   
     fmt.Printf(" x 的类型 :%T",i)                
  case int:   
     fmt.Printf("x 是 int 型")                       
  case float64:
     fmt.Printf("x 是 float64 型")           
  case func(int) float64:
     fmt.Printf("x 是 func(int) 型")                      
  case bool, string:
     fmt.Printf("x 是 bool 或 string 型" )       
  default:
     fmt.Printf("未知型")     
}  
// 结果为:x 的类型 :<nil>

Select

直接看详细:传送门

循环语句

看实例


var b int = 15
var a int

// for循环不加括号   
for a := 0; a < 10; a++ {
  fmt.Printf("a 的值为: %d\n", a)
}

// 相当于while
for a < b {
  a++
  fmt.Printf("a 的值为: %d\n", a)
}

numbers := [6]int{1, 2, 3, 5} 
// 相当于foreach,有点没理解
for i,x:= range numbers {
  fmt.Printf("第 %d 位 x 的值 = %d\n", i,x)
}   

还有break、continue、goto,直接传送门

函数

  1. 至少得有一哥main()函数
  2. Go 语言标准库提供了多种可动用的内置的函数。例如,len() 函数可以接受不同类型参数并返回该类型的长度。如果我们传入的是字符串则返回字符串的长度,如果传入的是数组,则返回数组中包含的元素个数。

函数格式如下:

func function_name( [parameter list] ) [return_types] {
   函数体
}
// 函数名(参数列表)返回值类型

实例:

/* 函数返回两个数的最大值 */
func max(num1, num2 int) int {
   /* 声明局部变量 */
   var result int

   if (num1 > num2) {
      result = num1
   } else {
      result = num2
   }
   return result 
}

可以返回多个值

func swap(x, y string) (string, string) {
   return y, x
}

func main() {
   a, b := swap("Google", "Runoob")
   fmt.Println(a, b)
}

参数传递和函数用法

值传递引用传递(和C语言一样,直接改变地址对应的值)
函数作为另外一个函数的实参闭包方法

全局变量

传送门

数组

定义格式:

var balance [10] float32

初始化:

var balance = [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}

未知大小数组:

var balance = [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
var salary float32 = balance[9]

多维数组

Go 语言向函数传递数组

传送门

指针、结构体、Range、Map、接口、并发

传送门

Go中没有明确指出面向对象概念,借助结构体struct实现,用interface实现接口,具体传送门

成员方法(类里面的方法)的实现:

type Person struct {
  name string
  age int
}

person := Person{"mike",18}
fmt.Println(person)

func (person *Person) showInfo() {
    fmt.Printf("My name is %s , age is %d ",person.name,person.age)
}

func (person *Person) setAge(age int) {
    person.age = age
}

person := Person{"mike",18}
person.showInfo()
person.setAge(20)
fmt,Println(person)

在关键字func和函数名之间加上一对小括号,写上与之关联的结构体类型指针类型变量名推荐写成指针类型的原因是,函数传递的形参不是指针类型的话,无法覆盖实参。【直接copy的】

继承和多态,见传送门

总结

GO还是比较优雅的,有种用Python的简介化封装C语言的感觉,其余的后面用多了再说。尝试一种新语言或框架,有一种开箱一个新的电子产品的感觉。

上面的基础内容,应该掌握,就可以开始搞事了。(我是花了四小时进行学习和整理文档的)

唉,考研还瞎折腾这些,有种出轨的感觉。。。(正确姿势应该是用是用到烂的php框架一天搞完课设,然后一天实验报告,剩下时间全部刷高数)

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

推荐阅读更多精彩内容

  • 指针是C语言中广泛使用的一种数据类型。 运用指针编程是C语言最主要的风格之一。利用指针变量可以表示各种数据结构; ...
    朱森阅读 3,423评论 3 44
  • 官方网站:https://golang.org/标准库文档:https://golang.org/pkg/在线编码...
    技术学习阅读 2,323评论 2 39
  • 第十章 指针 1. 地址指针的基本概念: 在计算机中,所有的数据都是存放在存储器中的。一般把存储器中的一个字节称为...
    坚持到底v2阅读 1,057评论 2 3
  • 1.安装 https://studygolang.com/dl 2.使用vscode编辑器安装go插件 3.go语...
    go含羞草阅读 1,538评论 0 6
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,084评论 1 32