GO语言基础|青训营笔记

372 阅读4分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 1 天 1、helloworld输出

//包,表示该文件属于哪个包,main定义了一个独立可执行的程序
package main

import (
   "fmt"
)
//是整个程序执行时的入口
func main() {
//打印以空格间隔的一个或多个值
   fmt.Println("hello,world!")

}

Go语言的代码通过(package)组织,包类似于其它语言里的库(libraries)或者模块(modules)。一个包由位于单个目录下的一个或多个.go源代码文件组成,目录定义包的作用。每个源文件都以一条package声明语句开始,这个例子里就是package main

fmt包,就含有格式化输出、接收输入的函数

根据格式说明符打印格式并写入标准输出。它返回写入的字节数和遇到的任何写入错误。

func Printf(format string, a ...interface{}) (n int, err error) {
   return Fprintf(os.Stdout, format, a...)
}

Println使用其操作数的默认格式进行格式化,并写入标准输出。 操作数之间总是添加空格,并附加换行符。它返回写入的字节数和遇到的任何写入错误。

func Println(a ...interface{}) (n int, err error) {
   return Fprintln(os.Stdout, a...)
}

2、函数声明


package main //  包的声明语句,说明该源文件是属于哪个包
//import语句导入依赖的其它包
import (
   "fmt"
   "math"
)
//常量boilingF是在包一级范围声明语句声明的
const boilingF = 212.0
func main() {

   var a = "initial"

   var b, c int = 1, 2

   var d = true

   var e float64

   f := float32(e)

   g := a + "foo"
   var  j = boilingF
   var  k = (f - 32 ) * 5 / 9
   fmt.Println(a, b, c, d, e, f) // initial 1 2 true 0 0
   fmt.Println(g)                // initialapple
   fmt.Printf("boiling point = %gF or %gC\n",f,c)
    // boiling point = 212°F or 100°C

   const s string = "constant"
   const h = 500000000  //  5e8
   const i = 3e20 / h    //3e20 /5e8 = 6e11
   //Sin返回弧度参数x的正弦值,特殊情况是:Sin(±0)=±0 Sin(±Inf) = NaN
Sin(NaN) = NaN
   fmt.Println(s, h, i, math.Sin(h), math.Sin(i))
}

Go语言主要有四种类型的声明语句:var、const、type和func,分别对应变量、常量、类型和函数实体对象的声明

package main
import "fmt"
func main() {
   const freezingf, boilingF = 32.0,212.0
   fmt.Printf("%g°F = %g°C\n", freezingF, fToC(freezingF)) // "32°F = 0°C"
    fmt.Printf("%g°F = %g°C\n", boilingF, fToC(boilingF))   // "212°F = 100°C"
}
//定义方法
func fToC(f float64) float64 {
    return (f - 32) * 5 / 9
}

}

变量声明语法:“类型”或“= 表达式”两个部分可以省略其中的一个

var 变量名字 类型 = 表达式

如果省略的是类型信息,那么将根据初始化表达式来推导变量的类型信息。如果初始化表达式被省略,那么将用零值初始化该变量。 数值类型变量对应的零值是0,布尔类型变量对应的零值是false,字符串类型对应的零值是空字符串,接口或引用类型(包括slice、指针、map、chan和函数)变量对应的零值是nil。数组或结构体等聚合类型对应的零值是每个元素或字段都是对应该类型的零值。 零值初始化机制

var s string
fmt.Println(s) // ""

这段代码将打印一个空字符串,而不是导致错误或产生不可预知的行为。

同时声明一组变量,或用一组初始化表达式声明并初始化一组变量

var i, j, k int                 // int, int, int
var b, f, s = true, 2.3, "four" // bool, float64, string

一组变量也可以通过调用一个函数,由函数返回的多个返回值初始化:

var f, err = os.Open(name) // os.Open returns a file and an error

2.1简短变量声明

以“名字 := 表达式”形式声明变量,变量的类型根据表达式来自动推导。

anim := gif.GIF{LoopCount: nframes}
freq := rand.Float64() * 3.0
t := 0.0

简短变量声明语句也可以用来声明和初始化一组变量:

i, j := 0, 1

“:=”是一个变量声明语句,而“=”是一个变量赋值操作

i, j = j, i // 交换 i 和 j 的值

简短变量声明左边的变量可能并不是全部都是刚刚声明的。如果有一些已经在相同的词法域声明过了,那么简短变量声明语句对这些已经声明过的变量就只有赋值行为了。

in, err := os.Open(infile)
// ...
out, err := os.Create(outfile)

简短变量声明语句中必须至少要声明一个新的变量

3.for循环

func main() {

   i := 1
   for {
      fmt.Println("loop") //loop
      break
   }
   for j := 7; j < 9; j++ {
      fmt.Println(j)//7,8
   }

   for n := 0; n < 5; n++ {
      if n%2 == 0 {
         continue
      }
      fmt.Println(n)//1,3
   }
   for i <= 3 {
      fmt.Println(i)//1,2,3
      i = i + 1
   }
}

4.if

CleanShot 2023-01-15 at 13.37.12@2x.png

CleanShot 2023-01-15 at 15.22.03@2x.png