AI智能
改变未来

golang学习之第一天


第一天

包 package

  • 包名(name)与文件夹名可以不相同,但是尽量把持相同
  • 同一个文件夹下的文件只能有一个包名,否则编译报错
  • main函数只能在main包下,否则报错:‘go run: cannot run non-main package‘

变量

  • 三种声明方式:

      var v_name v_type,var v_name v_type = value.
    1. var v_name;
    2. v_name :=
  • 默认值:

      数值类型(包括complex64/128)为 0

    1. 布尔类型为 false

    2. 字符串为 “”(空字符串)

    3. 以下几种类型为 nil:

      *int

    4. []int
    5. map[string] int
    6. chan int
    7. func(string) int
    8. error // error 是接口
  • 注意:

      := 赋值语句只能在函数(方法)体中使用
    1. 函数(方法)体中定义的变量必须使用
  • 提示:

      交换值: a,b = b,a
    1. 多变量复制: a,b,c = 1,true,“string”
    2. 空白标识符\”_\”也被用于抛弃值,如值 5 在:_, b = 5, 7 中被抛弃。
      空标识符_使用:
    package mainimport \"fmt\"func main() {_,numb,strs := numbers() //只获取函数返回值的后两个fmt.Println(numb,strs)}//一个可以返回多个值的函数func numbers()(int,int,string){a , b , c := 1 , 2 , \"str\"return a,b,c}//输出结果:2 str

常量

  • 定义方式

      显式类型定义: const b string = “abc”
    1. 隐式类型定义: const b = “abc”
  • iota常量,可以认为是一个可以被编译器修改的常量(记录的是常量的个数)。代码中只能读取值

  • 常量用作枚举:

const (a = iotab //没有赋值的将会使用前一个常量的赋值方式,即b=iotac)

循环

  • go中没有where循环
  • 无限循环:
for{}
  • 只有一个循环条件的循环:
var i intfor i <= 10 {i++}

*Go语言的 for 循环同样支持 continue 和 break 来控制循环,但是它提供了一个更高级的 break,可以选择中断哪一个循环

JLoop:for j := 0; j < 5; j++ {fmt.Println(j)for i := 0; i < 10; i++ {if i > 5 {break JLoop //break 语句终止的是 JLoop 标签处的外层循环。此处的的j所在的循环}fmt.Println(i)}}
  • 注意: 左花括号{必须与 for 处于同一行。

switch case语句

  • go中case 与 case 之间是独立的代码块,不需要通过 break 语句跳出当前 case 代码块以避免执行到下一行,示例代码如下:
var a = \"hello\"switch a {case \"hello\":fmt.Println(1)case \"world\":fmt.Println(2)default:fmt.Println(0)}
  • 一分支多值
var a = \"mum\"switch a {case \"mum\", \"daddy\":mt.Println(\"family\")}
  • 分支表达式
var r int = 11switch {case r > 10 && r < 20:fmt.Println(r)}
  • 跨越 case 的 fallthrough
var s = \"hello\"switch {case s == \"hello\":fmt.Println(\"hello\")fallthroughcase s != \"world\":fmt.Println(\"world\")}

函数

func function_name( [parameter list] ) [return_types list] {函数体}
  • 函数可以有多个返回值,都需要在返回值类型中声明类型

  • 传递值,不会改变源字符串的值

package mainimport \"fmt\"func main() {str := \"abc\"reverse(str)fmt.Println(str)}func reverse(str string){str = \"cba\"}//输出: abc
  • 传递引用,会改变源字符串的值
package mainimport \"fmt\"func main() {str := \"abc\"reverse(&str)fmt.Println(str)}func reverse(str *string){*str = \"cba\"}//输出: cba
  • 闭包
package mainimport \"fmt\"func main() {fmt.Println(a()())}func a() func() string {str := \"ahah\"b := func() string {return str}return b}输出:ahah
赞(0) 打赏
未经允许不得转载:爱站程序员基地 » golang学习之第一天