go语言入门-基础语法导入包|青训营

114 阅读2分钟

go语言入门

基础语法

// 示例 1
package main
import (
	"fmt"
)
func main(){
	fmt.Println("hello world")
}

// 示例2 变量
package main

import (
	"fmt"
	"math"
)

func main() {
	var a = "initial"
	var b, c int = 1, 2
	var d = true
	var e float64
	f := float32(e)
	g := a + "foo"
	fmt.Println(a, b, c, d, e, f)
	fmt.Println(g)

	const s string = "constant"
	const h = 5000000
	const i = 3e20 / h
	fmt.Println(s, h, i, math.Sin(h), math.Sin(i))
}

标准库

  • fmt
    • 向屏幕输入输出字符串
    • 格式化字符串

问题1

  • 没有引用导入的库时,出现报错 a954146e487e20993cc8e68fe51fc3f5.png *
    c34038324fabba3e27157c9d81464b9b.png 9489e7aae071b3805c2ca6ab510b94da.png
  • 引用之后
  • b1cec888e593bf2e418b3ab4bd415830.png
  • ‘_’的作用
    • 导入包是否使用下划线 _ 取决于你是否需要在代码中直接使用该包中的标识符。如果不需要直接使用,可以使用匿名导入来避免编译错误。如果需要直接使用,就应该正常导入并在代码中使用相应的标识符。匿名导入,只执行包的初始化操作。

问题2 没有直接使用,为什么需要匿名导入来初始化

  • 当导入一个包时,该包中的全局变量的初始化语句和 init 函数将会被执行。这些全局变量和 init 函数的初始化过程可能涉及一些必要的操作,例如注册数据库驱动、初始化配置、启动定时任务等。
// chatGPT的示例
package main

import (
    _ "github.com/go-sql-driver/mysql" // 匿名导入数据库驱动,触发初始化
)

func main() {
    // 在这里你没有直接使用导入包中的标识符,只是为了触发数据库驱动的初始化
    // 以便在其他地方可以正常使用该驱动
}

问题3 有没有别的导入方式

  1. 点号 .:使用点号 . 导入包后,可以直接使用该包中的标识符,而无需通过包名限定。这种方式虽然方便,但在代码中容易造成命名冲突,因此不建议在实际项目中过多使用。
package main

import (
    . "fmt" // 使用点号导入 fmt 包,可以直接使用 fmt 包中的标识符,无需写成 fmt.Println()
)

func main() {
    Println("Hello, World!") // 直接使用 Println(),无需写成 fmt.Println()
}

2. 别名:可以使用别名为导入的包起一个独立的名字,以避免与其他包名称冲突或者缩短包名称。

package main

import (
    f "fmt" // 使用别名 f 导入 fmt 包
)

func main() {
    f.Println("Hello, World!") // 使用别名 f 调用 fmt 包中的 Println() 函数
}