Go语言中的包机制

包的声明与导入

包(package)是Go语言中实现代码复用的重要手段。包的存在可以让我们只关心包中的有用的函数。

Go语言自带100多个标准包,这些包使Go语言用起来便捷,进行服务器端、Web端编程几乎不需要第三方框架就可以开发。

可依据函数、接口、方法之间的关联性来对包进行划分,关联性高的功能会放在一个包内,便于理解和后续修改维护。这种模块化特性,允许我们在不同的项目内甚至世界范围内共享和复用代码。

指定编译的速度快是Go语言的优势:

导入方便 : 每个源码文件用到的导入文件都在开头显式地列出来,这样编译器就不需要遍历文件查找。
避免循环引用 : Go语言避免循环引用,也就是说引用都是有向无环的引用。
编译速度快 : Go语言编译输出的目标文件不仅记录自己的导出信息,也记录依赖包的导出信息,所以在一个包内很快可以编译整个包的文件。

init函数

package main

//init()函数在main函数执行之前进行执行,init用在设置包,初始化变量或者程序运行之前优先完成的引导工作
//即使包被导入多次,初始化只需要一次
//匿名导包
import (
	_ "bao/test"
	"fmt"
)

// init函数不需要传入参数,也不会返回任何值。与main相比而言,init没有被声明,因此不会被引用
func init() {
	fmt.Println("main-init")
}

func main() {
	fmt.Println("main")
}

Text文件夹下

import "fmt"
import _ "bao/test2"

func init() {
	fmt.Println("test-a-init1")
}
func init() {
	fmt.Println("test-a-init2")
}
func init() {
	fmt.Println("test-a-init3")
}



import "fmt"

func init() {
	fmt.Println("test2-b-init1")
}
func init() {
	fmt.Println("test2-b-init2")
}
func init() {
	fmt.Println("test2-b-init3")
}

在这里插入图片描述

strings包常用函数


func main() {
	//定义一个字符串
	str := "xuexiangban,nansang"
	//判断是否包含
	fmt.Println(strings.Contains(str, "z"))
	fmt.Println(strings.Contains(str, "g"))
	//containAny模糊查询查找,任意一个存在即可
	fmt.Println(strings.ContainsAny(str, "ghk"))
	//Count在字符中出现的次数
	fmt.Println(strings.Count(str, "a"))
	//HasPrefix以。。。开头
	filename := "20031016.mp4"
	if strings.HasPrefix(filename, "2003") {
		fmt.Println("我找到了2003年的文件")
	}
	//HasSuffix结尾

	if strings.HasSuffix(filename, ".mp4") {
		fmt.Println("是以.MP4结尾的文件")
	}
	//index 寻找指定字符串任意字符第一次出现的位置,找到并返回下标,找不到返回-1
	fmt.Println(strings.Index(str, "a"))
	//indexAny 跟containsAny一样
	fmt.Println(strings.IndexAny(str, "ghk"))
	//LastIndex 字符串最后一次出现的位置
	fmt.Println(strings.LastIndex(str, "a"))
	//Join用指定符号进行字符串拼接
	str2 := []string{"a", "b", "c"}
	str3 := strings.Join(str2, "-")
	fmt.Println(str3)
	//Split按照指定符号分割
	str4 := strings.Split(str3, "-")
	fmt.Println(str4)
	//Repeat
	str5 := strings.Repeat("a", 5)
	fmt.Println(str5)
	//Replace替换指定的字符
	str6 := strings.Replace(str, "u", "*", -1)
	fmt.Println(str6)
	//ToUpper字母转大写ToLower字母转小写
	fmt.Println(strings.ToUpper(str))
	fmt.Println(strings.ToLower(str))
	//截取字符串
	str7 := str[0:5]
	fmt.Println(str7)
	str8 := str[5:]
	fmt.Println(str8)

}

strconv包常用函数


// Parse把字符串转换成相应的类型
// Format把类型转换成字符串
// 10 int atoi数字字符串转换成十进制  itoa十进制转换成数字字符串
func main() {
	s1 := "true"
	//将字符串转换成bool类型
	b1, _ := strconv.ParseBool(s1)
	fmt.Printf("%T\n", b1)
	fmt.Println(b1)
	if b1 {
		fmt.Println("b1是bool类型")
	}
	s2 := strconv.FormatBool(b1)
	fmt.Printf("%T\n", s2)
	fmt.Println(s2)
	//把字符串看成以十进制的形式转换
	s3 := "100"
	i1, _ := strconv.ParseInt(s3, 10, 64)
	fmt.Println(i1)
	//整型转换成二进制的字符串
	s4 := strconv.FormatInt(100, 2)
	fmt.Printf("%T\n", s4)
	fmt.Println(s4)
	//10 int atoi  itoa
	i2, _ := strconv.Atoi("-20")
	fmt.Printf("%T\n", i2)
	fmt.Println(i2)
	str := strconv.Itoa(i2)
	fmt.Printf("%T\n", str)
	fmt.Println(str)

}

时间与时间戳


func main() {
	timestamp := time.Now().Unix()
	fmt.Println(timestamp)
	time1 := time.Unix(timestamp, 0)
	fmt.Println(time1)

	//time1()
	now := time.Now()
	fmt.Println(now.Format("2006-01-02 15:04:05"))
	fmt.Println(now.Date())
	//把字符串转换成Time对象的方法
	loc, _ := time.LoadLocation("Asia/Shanghai")
	timeObj, _ := time.ParseInLocation("2006/01/02 15:04:05", "2023/01/01 12:12:00", loc)
	fmt.Println(timeObj)
}

func time1() {
	//获取当前时间
	now := time.Now()
	fmt.Println(now)
}

随机数生成

func main() {
	//rand.Seed(11)
	//num1 := rand.Intn(10)//Intn(10) [0,9)
	//fmt.Println(num1)
	//设置随机数,可以设置时间戳
	rand.Seed(time.Now().Unix())
	for i := 0; i < 10; i++ {
		num := rand.Intn(100)
		fmt.Println(num)

	}
}

定时器与时间判断


func main() {
	tick心脏  想象成一个通道每隔一秒放一个数据
	//ticker := time.Tick(time.Second)
	//for t := range ticker {
	//	fmt.Println(t)
	//}
	//
	//for i := 0; i < 10; i++ {
	//	fmt.Println(time.Now())
	//	time.Sleep(time.Second)
	//}
	now := time.Now()
	later := now.Add(time.Hour)
	fmt.Println(now)
	fmt.Println(later)

	subtime := later.Sub(now)
	fmt.Println(subtime)
	fmt.Println(now.Equal(later))
	fmt.Println(now.After(later))
	fmt.Println(now.Before(later))
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值